当ES向logstash发出reject

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当ES向logstash发出reject相关的知识,希望对你有一定的参考价值。

参考技术A

背景: 使用了自定义插件之后,出现了数据无法写入es的问题。

查看日志后发现如下信息:

查阅相关资料,了解到出现 "es_rejected_execution_exception" 是因为logstash写入es速度小于logstash读取数据速度,导致logstash频繁给es发送 bulk reuqest ,从而导致es集群的网络io过载,进而产生以上的问题提示,表明elasticsearch无法继续接收数据。
可以通过调整logstash.yml的 pipeline.workers , pipeline.output.workers , pipeline.batch.size , pipeline.batch.delay ,或者output plugin的 flush_size , idle_flush_time 参数来进行优化,经过试验后发现7.3.1版本的output plugin中 flush_size , idle_flush_time 已经不可用。
调整 pipeline.batch.size=3000 , pipeline.batch.delay=100 后,正常运行了几小时后又出现了上述问题。
查阅官方文档后,找到一个output plugin配置项 sniffing_delay 与上述 idle_flush_time 类似。
怀疑是用了自定义插件导致处理速度过慢,但是经过验证发现处理速度与使用自定义插件之前并没有差距。
问题解决: 将 pipeline.batch.size 调整为2000后,logstash能流畅处理,并未产生拥堵。所以,产生这个问题的原因还是进入logstash的速度大于logstash输出的速度导致堵塞。在进行logstash性能优化时,不同的处理流程可能需要设置不同的控制参数才能达到较优的性能。
说明: 这个错误的问题的产生与logstash的 bulk request 息息相关, es_rejected_execution_exception 正是logstash像es发出请求后,若 bulk queue 已满,es就会向logstash返回该应答。

Why am I seeing bulk rejections in my Elasticsearch cluster?

How many shards should I have in my Elasticsearch cluster?

ELK系统之logstash问题:retrying failed action with response code: 429
logstash output plugin 官方文档
Why am I seeing bulk rejections in my Elasticsearch cluster?
How many shards should I have in my Elasticsearch cluster?

ES+Logstash

Logstash日志收集实践

先了解以下几个基本概念:
logstash收集日志基本流程: input-->codec-->filter-->codec-->output
1.input:从哪里收集日志。
2.filter:发出去前进行过滤
3.output:输出至Elasticsearch或Redis消息队列
4.codec:输出至前台,方便边实践边测试
5.数据量不大日志按照月来进行收集

#通常使用rubydebug方式前台输出展示以及测试
[[email protected] ~]# /opt/logstash/bin/logstash -e ‘input { stdin {} } output { stdout{codec => rubydebug} }‘
hello #输入
{
"message" => "hello",
"@version" => "1",
"@timestamp" => "2016-12-10T08:16:36.354Z",
"host" => "linux-Tcat1.com"
}


Logstash安装

Logstash需要Java环境,所以直接使用yum安装。

1.安装java

[[email protected] ~]# yum install java
[[email protected] ~]# java -version
openjdk version "1.8.0_101"
OpenJDK Runtime Environment (build 1.8.0_101-b13)
OpenJDK 64-Bit Server VM (build 25.101-b13, mixed mode)


2.下载并安装GPG key

[[email protected] ~]# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch


3.添加logstash的yum仓库

#添加logstash的yum仓库
[[email protected] ~]# cat /etc/yum.repos.d/logstash.repo
[logstash-2.3]
name=Logstash repository for 2.3.x packages
baseurl=https://packages.elastic.co/logstash/2.3/centos
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1


安装Logstash

[[email protected] ~]# yum install -y logstash
声明:如果需要前台查看测试结果,在output加入如下:

stdout {
codec => "rubydebug"
}
#执行命令:
/opt/logstash/bin/logstash -f /etc/logstash/conf.d/syslog.conf
#执行完毕,将文件放置/etc/logstash/conf.d目录,logstash会自动读取相关配置文件
如果无法读取,可将/etc/init.d/logstash里USER和GROUP修改为root

以上是关于当ES向logstash发出reject的主要内容,如果未能解决你的问题,请参考以下文章

ES+Logstash

读取与从 JMS 队列复制消息..使用 logstash 到 ES

logstash写入es重复id

logstash.conf配置

Logstash导入csv到es

es 无日志,logstash 报错