心跳检测

缺少内部队列状态的监控办法一直是 logstash 最为人诟病的一点。从 logstash-1.5.1 版开始,新发布了一个 logstash-input-heartbeat 插件,实现了一个最基本的队列堵塞状态监控。

配置示例如下:

  1. input {
  2. heartbeat {
  3. message => "epoch"
  4. interval => 60
  5. type => "heartbeat"
  6. add_field => {
  7. "zbxkey" => "logstash.heartbeat",
  8. "zbxhost" => "logstash_hostname"
  9. }
  10. }
  11. tcp {
  12. port => 5160
  13. }
  14. }
  15. output {
  16. if [type] == "heartbeat" {
  17. file {
  18. path => "/data1/logstash-log/local6-5160-%{+YYYY.MM.dd}.log"
  19. }
  20. zabbix {
  21. zabbix_host => "zbxhost"
  22. zabbix_key => "zbxkey"
  23. zabbix_server_host => "zabbix.example.com"
  24. zabbix_value => "clock"
  25. }
  26. } else {
  27. elasticsearch { }
  28. }
  29. }

示例中,同时将数据输出到本地文件和 zabbix server。注意,logstash-output-zabbix 并不是标准插件,需要额外安装:

  1. bin/logstash-plugin install logstash-output-zabbix

文件中记录的就是 heartbeat 事件的内容,示例如下:

  1. {"clock":1435191129,"host":"logtes004.mweibo.bx.sinanode.com","@version":"1","@timestamp":"2015-06-25T00:12:09.042Z","type":"heartbeat","zbxkey":"logstash.heartbeat","zbxhost":"logstash_hostname"}

可以通过文件最后的 clock 和 @timestamp 内容,对比当前时间,来判断 logstash 内部队列是否有堵塞。