问题1
logstash 启动报错如下:
|
|
解决思路:
方法1:错误描述很明显是权限问题
|
|
方法2:但是问题没有得到解决, 后来网上搜到说是系统设定允许打开文档数问题
|
|
保存后,退出重新登录后生效
|
|
注意: linux 默认上线为2^20=1048576, 千万不能超过该数值,否则系统重启导致无法登录
方法3:尝试查看配置文件,测试gork
得出正则不匹配导致的,所以首先去匹配正则
修改配置文件
|
|
问题2
报错信息:
|
|
解决办法:
修改配置文件,允许打开文件数
|
|
问题3
问题描述:
elasticsarch
无法发现 logstash
收集到的日志。
|
|
连接测试正常
又创建个新配置文件如下:
|
|
elasticsearch
可以发现 logstash
收集到日志
对比两个配置文件,发现只有index
不同外,其他都一样,所以查找这里的问题。
由于我的index
使用了变量,导致index
这里无法创建,所以修改配置如下:
|
|
结果:
问题4
报错信息:
|
|
由于elasticsearch
写入遇到瓶颈导致,首先想到是调整elasticsearch
线程池, 官网建议 ,于是我们修改logstash
参数 pipeline.batch.size
在ES5.0以后,es将bulk
、flush
、get
、index
、search
等线程池完全分离,自身的写入不会影响其他功能的性能。
来查询一下ES当前的线程情况:
|
|
|
|
其中:bulk
模板的线程数32,当前活跃的线程数32,证明所有的线程是busy的状态,queue队列121,rejected为516。那么问题就找到了,所有的线程都在忙,队列堵满后再有进程写入就会被拒绝,而当前拒绝数为516。
解决方案:
官方的建议是提高每次批处理的数量,调节传输间歇时间。当前batch.size
增大,es处理的事件数就会变少,写入也就愉快了。
|
|
参数解析:
worker
,output.workers
数量建议等于CPU数
batch.size
一般指数据的条目数。考虑网卡流量,磁盘转速的问题,所以一般来说,建议 bulk 请求体的大小,在 15MB 左右,通过实际测试继续向上探索最合适的设置。
以 logstash
默认的 bulk_size => 5000
为例,假设单条数据平均大小 200B ,一次 bulk
请求体的大小就是 1.5MB。那么我们可以尝试 bulk_size => 50000
;而如果单条数据平均大小是 20KB,一次 bulk
大小就是 100MB,显然超标了,需要尝试下调至 bulk_size => 500
。
batch.delay
根据实际的数据量逐渐增大来测试最优值。
结果:
问题4
错误描述:
|
|
由于在elasticsearch.yml
启用bootstrap.mlockall: true
. 设置为true来锁住内存,因为当JVM开始swapping的时候Elasticsearch的效率会降低,所以要保证他不被swap,可以吧ES_MIN_MEN和ES_MAX_MEN两个环境变量设置为同一个值,并且保证机器有足够的内存分配给Elasticsearch,同时也要允许Elasticsearch的进程可以锁住内存,linux下可以通过ulimit -l unlimited
命令。
解决办法:
查看es节点是否开启了mem_lock
|
|
|
|
上述返回内容,可见都没有开启mem_lock,集全随时都可能发生故障(尤其是集群正常运行了一段时间,莫名其妙的故障)
分配内存无限制
|
|
最后添加到配置文件中
|
|
启动服务后正常
错误5
问题描述:
由于系统宕机,导致大量索引出现了Unassigned 状态。我们通过reroute API进行了操作,对主分片缺失的索引
查看集群健康状态
|
|
|
|
查看为分配的shard
|
|
|
|
执行恢复语句
|
|
如果有太多未分配可以写脚本执行:
|
|
当然还有其他办法恢复,具体详情请借鉴这里