elasticsearch维护中常遇到的问题

       Elasticsearch常应用于企业大数据、大规模日志存储分析;
       在我的应用场景中,Elasticsearch存储几百台防火墙,负载均衡设备的syslog,数据量每个月都在提升,年前已突破每月3百G,在维护过程中有些注意的事项,下面从4个方面展开:

一、健康度检查

可以在kibana的Dev Tool执行如下命令:

       GET _cat/health?v

获取当前elasticsearch的健康状态
health
status:集群状态,分green,yellow和red.

二、对应的JVM 参数

  因为elasticsearch是使用Java编写的,其运行在 JVM 上,因此 JVM 参数设置对于 elasticsearch 集群的重要性不言而喻。。

1.堆的容量的设置

  对应的jvm.options中的堆默认只有1G,对于业务环境过小,这里按服务器的内存一半以下分配给elasticsearch(最好低于32G以便利用java的内存指针压缩技术).

2.增大每个进程最大可使用的文件描述符数量

  可以使用ulimit -a查看,在centos中默认只有1024,这里已改为65535
ulimit-a
limits.conf

三、数据的导出

  业务环境配套的kibana没有report功能,还好有对应的python包,可以实现,demo如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#! /usr/bin/env python
# -*- coding: utf-8 -*-
from elasticsearch import Elasticsearch

es = Elasticsearch("http://127.0.0.1/")
body = {"query":{"term":{"host":"centos7.3"}}}
f = open("/tmp/es.txt","a+")
query = es.search(index = "messages-2020.01.14",body = body, scroll = "5m", size = 100) #size是查询到的数据上限条数
result = query['hits']['hits']
print(query['hits']['total']) #匹配到的总数
print (len(result)) #为size的值
for j in result:
#print (j["_source"])
f.write(str(j["_source"]) + "\n")

f.close()

四、磁盘容量的维护(索引的删除)

  可以在kibana的Dev Tool执行如下命令,查看每个索引的大小,以此判断删除索引释放空间或者加磁盘:

       GET _cat/indices?v

cat-indices