我已在邮件列表中看到过这个问题几次,但尚未得到满意的答案。
如何最好地监控管道是否卡住?客户端 -> logstash -> elasticsearch。
Logstash 和 elasticsearch 尤其容易出现资源匮乏的情况。它们都擅长从中断的地方继续运行,但人们究竟是如何监视它们的监视者的呢?
欢迎发表意见。
答案1
我实际上亲自检查过,redis 仍然在中央日志主机上出队,该主机位于 LS+ES 的上游。
即:redis-cli llen logstash
小于某个固定数字。
虽然这可能并不表明日志出现在 redis 中,但我猜也可以检查一下。
可能像检查那样redis-cli info | grep total_commands_processed
不断增加,对吗?
答案2
我在我的环境中使用 zabbix,但我认为这种方法在其他设置中也适用。我已配置允许 zabbix 使用的以下命令:
UserParameter=elasticsearch.commits,/usr/bin/curl -s 'localhost:9200/_cat/count?v' | /bin/sed -n '2p' | /bin/awk '{print $3}'
这将返回已提交的 elasticsearch 记录总数。因此,我取此值并除以自上次采样以来的秒数(我每分钟检查一次),如果此数字低于任意限制,我可以发出警报。我还使用 zabbix 检查 logstash PID 是否已死亡,并发出警报,然后运行以下命令:
UserParameter=elasticsearch.health,/usr/bin/curl -s 'http://localhost:9200/_cluster/health?pretty=true' | /bin/sed -n '3p' | /bin/awk -F'\"' '{print $4}' | /bin/sed s/yellow/0/ | /bin/sed s/green/0/ | /bin/sed s/red/1/
如果集群健康状况变为红色(黄色和绿色正常),这将返回 1,我也可以发出警报。
答案3
检查最终端点(例如 elasticsearch)的每秒日志量是否高于某个基线。
也就是说,进行端到端检查,如果最终结果正常,则您知道管道中的所有步骤都正常。
如果您经常遇到问题,或者需要更好的自省,请按照上述建议开始对管道的每个部分(如 redis)进行检测。
答案4
我们采用了几种方法:
- 监控,监听 Elastic 和 Logstash 端口并重新启动它们
- 对于发生不好的事情的情况,从监控的角度来看一切都已准备就绪,但日志未被使用/存储,有一个简单的脚本,每小时检查一次活动索引,并在文档计数在过去一小时内没有发生变化时发出警报。