logstash marking url as dead 问题解决
具体问题如下图所示:

将 INFO 信息打印大致如下所示:
[2018-03-05T16:26:08,711][INFO ][logstash.setting.writabledirectory] Creating directory {:setting=>"path.queue", :path=>"/usr/share/logstash/data/queue"}
[2018-03-05T16:26:08,727][INFO ][logstash.agent ] No persistent UUID file found. Generating new UUID {:uuid=>"f4d5f9a9-42ca-4765-b3fb-0f4566f440df", :path=>"/usr/share/logstash/data/uuid"}
[2018-03-05T16:26:09,175][INFO ][logstash.outputs.elasticsearch] Elasticsearch pool URLs updated {:changes=>{:removed=>[], :added=>[http://logstash_system:xxxxxx@localhost:9200/_xpack/monitoring/?system_id=logstash&system_api_version=2&interval=1s]}}
[2018-03-05T16:26:09,176][INFO ][logstash.outputs.elasticsearch] Running health check to see if an Elasticsearch connection is working {:healthcheck_url=>http://logstash_system:xxxxxx@localhost:9200/, :path=>"/"}
[2018-03-05T16:26:09,262][WARN ][logstash.outputs.elasticsearch] Attempted to resurrect connection to dead ES instance, but got an error. {:url=>#<URI::HTTP:0x59e42e4f URL:http://logstash_system:xxxxxx@localhost:9200/_xpack/monitoring/?system_id=logstash&system_api_version=2&interval=1s>, :error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :error=>"Elasticsearch Unreachable: [http://logstash_system:xxxxxx@localhost:9200/][Manticore::SocketException] Connection refused (Connection refused)"}
首先,从日志上看到发现可能是 es 被写死了,即无法再写入更多的数据,既然这样,那么很自然的就会想到限流 logstash 数据的写入,配置logstash-5.4.1/config/logstash.yml修改:
降低 pipeline 中的 workers 的量,由原来的 32 -> 16, batch size 修改 1000 -> 500, delay 修改 200 -> 1000, output.workers: 16 -> 8
修改完毕之后重启 logstash 发现过一段时间还会有相应的日志出现,找了半天终于 google 中找到有一个老外说的可能是 xpack 做的 helth check 影响的,我一看日志果然有对应每隔 1s 会对 es 做一次 helth check,于是就在 logstash.yml 中增加一行:
xpack.monitoring.enabled: false
即去除 xpack 的监控,再重新启动 logstash 后观察了一段时间果然不会再有任何的 WARN 和 ERROR 日志,问题得以解决。
总结
我猜测,这确实是 xpack 的问题,因为它每1s 去 ping es 状态,当集群繁忙时很容易导致 time out,此时 logstash 认为 es 不可达,就会一直轮询等待。去除掉 xpack 的helth check 等监控,由 logstash 自己写入时判断即可。
【2018-03-06 18:08:56 记录】
昨天修改完,今天查看发现仍然有上面提到的异常日志,于是继续查看。对应的logstash 以及 ElasticSearch 服务器对应的负载、cpu 都不是太高,初步怀疑可能是 io 的问题,即很频繁的进行 io 交互。
通过查看日志发现在很多的时间内,反复提示 ‘send a bulk request to elasticsearch’ 的错误,代表logstash在不断的,快速的给ES发送 bulk reuqest。我们查看logstash的配置发现,默认的配置是:
# How many events to retrieve from inputs
pipeline.batch.size: 125
# milliseconds
pipeline.batch.delay: 5
而我当前配置是:
pipeline:
workers: 32
batch:
size: 200
delay: 100
output:
workers: 8
unsafe_shutdown: false queue:
type: persisted
page_capacity: 250mb
max_events: 10000
max_bytes: 1gb
checkpoint:
acks: 10000
writes: 10000
interval: 1000
这里的单位是milliseconds,即每个 logstash 的 instance,每 100 毫秒会发送 200 条 request 到ES集群,这个会导致ES集群的网络io过载。
那么,是不是说我们需要把每个 batch 之间的间隔增大,把每次batch的size调大?比如batch.size = 500, batch.delay = 500,就能防止出现以上的问题?
经过测试这样是可行的。
由于下面配置的 max_bytes 以及 max_events 的限制,修改后的配置如下(仅供参考):
pipeline:
workers: 16
batch:
size: 500
delay: 200
output:
workers: 12
unsafe_shutdown: false queue:
type: persisted
page_capacity: 250mb
max_events: 10000
max_bytes: 1gb
checkpoint:
acks: 10000
writes: 10000
interval: 1000
这样配置的目的有那么几个:
1. 尽量一次读出最大可能条数据,这样可以最大程度的降低与 ES 之间的 IO 交互。
2. 间隔时间不能太久,刚开始配置 1000,发现还是出现又降低到 500,错误变少了,分析发现应该是间隔时间长了,logstash 堵在队列中的数据就会增多,这样导致读取的频次永远不会降低,尤其是过了一段时间发现部分日质数量比较大的收集延迟变大。故综合考虑将延迟时间修改为 200。
3. 由于 CPU 核数比较高达到40多个,故将 output.workers 线程数增加,提升处理能力,减少数据拥堵,降低延迟度。
最后总结一句:以上报错信息其实并不影响整体日志收集,这个错误只是 logstash 自己认为可能不可达,是由于其中的组件导致的,查了下 github 上的说法,后续最新版本可能会解决这个误报问题,但是不是说我们就不管不顾了,而是要想办法将这个错误频次降低,尽最大可能使其运行良好。
【2018-05-06 10:18:56 记录】
在这期间将 ELK 收集日志丢失日志问题解决。最主要还是配置不合理导致的。问题原因是因为配置的 filebeat 中不可达等待最长时间为:3min,如果中途 logstash 拥堵比较严重,elasticsearch 负载又高,极大可能会造成 filebeat 休眠超过3min,看最新版本 filebeat 默认为 1天,其实配置是合理的,虽然有点大,但是总比丢数据要来的好。将其中的配置增大为 1h 后,再不会发生丢失日志的情况。
解决 ELK 收集日志延迟比较高的问题,尝试了很多优化发现无法从根本上解决,于是将最耗资源的 nginx_log 和 push_log 单独迁移到各自小的集群上,剩下所有的其他日志仍然保留在现有集群上,从此以后各种问题得以解决。归结起来就是一句话:有多大能力就干多大的事,不要超过其最大承受能力。
logstash marking url as dead 问题解决的更多相关文章
- dede列表页分页地址优化(不同url相同内容问题解决)<转自http://www.966266.com>
<注明,完全转自http://www.966266.com/seoblog/?p=75> 存在问题 DEDE默认分类分页地址存在不同URL相同内容问题,导致内容重复,对SEO非常不利.情况 ...
- url编码乱码问题解决
//url encodeURI加密 window.location.href = "upload.html?sendName="+encodeURI(sendName); //接收 ...
- eclipse/myeclipse SVN资源库URL中文乱码问题解决办法
右击选择资源库地址 可以自定义名称
- 树莓派搭建网站wordpress的url写错 问题解决方法 有效GUI方法
这个时候wordpress的后台已经登陆不了了,所以要对数据库做一些改变. 先说一下我是跟b站韩博士学的,LNMP.如果我们用的不一个方法的话下面就不用看了.下面是具体方法: 1 浏览器登录phpm ...
- logstash写日志elaticsearch不响应
在大量的解析日志并写入elasticsearch,在后端节点数据数量及磁盘性能等影响下,es不响应 问题描述: [--12T17::,][WARN ][logstash.outputs.elastic ...
- 基于ELK搭建MySQL日志平台的要点和常见错误
第一部分 概括 ELK是集分布式数据存储.可视化查询和日志解析于一体的日志分析平台.ELK=elasticsearch+Logstash+kibana,三者各司其职,相互配合,共同完成日志的数据处理工 ...
- 谷歌浏览器 URL无法访问
使用谷歌浏览器老是会崩溃,或者访问的时候发现“URL无法访问”等失败的问题,连淘宝都没法访问,这个让人很恼火, 最后在扩展应用那里搜到个URL的redirect,问题解决了,~~发现没有再出现类似问题 ...
- CentOS 搭建Graylog集群详解
1. Graylog2 简介 Graylog 是一个简单易用.功能较全面的日志管理工具,相比 ELK 组合, 优点: 部署维护简单,一体化解决方案,不像ELK三个独立系统集成. 查相比ES json语 ...
- windows 2008 下C#调用office组件访问拒绝的解决方法(failed due to the following error: 80070005 拒绝访问)
"组件服务"- >"计算机"- >"我的电脑"- >"DCOM配置"->找到word->属 ...
随机推荐
- idea 解决 pom.xml 中,maven仓库无法导入的问题(红线)
只需要用另一篇文章的 maven clean install 功能就行了 idea Cannot Resolve Symbol 问题解决
- [LOJ#6044]. 「雅礼集训 2017 Day8」共[二分图、prufer序列]
题意 题目链接 分析 钦定 \(k\) 个点作为深度为奇数的点,有 \(\binom{n-1}{k-1}\) 种方案. 将树黑白染色,这张完全二分图的生成树的个数就是我们钦定 \(k\) 个点之后合法 ...
- vuex实践之路——笔记本应用(一)
首先使用vue-cli把环境搭建好. 介绍一下应用的界面. App.vue根组件,就是整个应用的最外层 Toolbar.vue:最左边红色的区域,包括三个按钮,添加.收藏.删除. NoteList.v ...
- linux之grep 基础
第一章 -a 将binary文件以text文件的方式搜寻数据-c 只输出匹配行的计数,计算找到匹配的次数-I(大写i) 不区分大小写(只适合用于单字符)-h 查询多文件时不显示 ...
- centos7 部署LNMP
1.安装Nginx 使用Nginx官方提供的rpm包 [root@nginx ~]# cat /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo b ...
- 4星|《流量池》:Luckin Coffee营销操盘手经验谈
流量池:“急功近利”的流量布局.营销转化 作者是一线营销操盘手,全书是作者的经验总结,这样的作者在营销类图书中比较罕见,因此这本书非常有价值. 全书是写给巨头之外的企业营销人员看的,这样的企业的流量来 ...
- linux一切皆文件之tcp socket描述符(三)
一.知识准备 1.在linux中,一切皆为文件,所有不同种类的类型都被抽象成文件(比如:块设备,socket套接字,pipe队列) 2.操作这些不同的类型就像操作文件一样,比如增删改查等 二.环境准备 ...
- Bootstrap 样式设计 栅格系统
.col-xs- 超小屏幕 手机 (<768px) .col-sm- 小屏幕 平板 (≥768px) .col-md- 中等屏幕 桌面显示器 (≥992px) .col-lg- 大屏幕 大桌面显 ...
- js实现随机的四则运算题目
老师给出的题,写一个小程序,可以生成随机的四则运算题目给给小学生用.以前自己就写了一个四则运算的简单js小程序,是这样的: 事件 + - * / 这是个自己输入的算法,但要求是自动产生随机数.于是我用 ...
- 团队项目M1展示成绩和Week 10分数
根据M1项目评审的分数,分档打分得到的M1项目成绩.