天天看點

Logstash 推送告警到阿裡釘釘(Dingtalk)

前段時間我們公司開始使用“釘釘”作為企業溝通工具。在知道釘釘群還能設定機器人接收定制的通知資訊時,我就尋思如何把它和 logstash 結合在一起了。

首先要了解釘釘的“機器人”是如何設定的。

文檔在此 然後我們使用 logstash 的 http output throttle filter

插件。

首先設定 throttle 的條件,以我們的

monit 日志為例,先給 logstash 配置一個 filter 檔案:

filter {
  if "monit" in [tags] {
    grok {
      match => { "message" => "\[CST %{SYSLOGTIMESTAMP:[monit][timestamp]}\]%{SPACE}%{LOGLEVEL:[monit][level]}%{SPACE}\:%{SPACE}%{GREEDYDATA:[monit][log]}" }
      remove_field => "message"
    }
    if [monit][level] == "error" {
      throttle {
        before_count => -1 # 最小值
        after_count => 1 # 最大值
        period => 1800 # 統計周期 1800 秒, 這個時間内不再觸發同一個條件。
        max_age => 3600 # 最大有效周期 3600 秒
        key => "%{[monit][log]}" # 要統計的字段
        add_tag => "monit-throttle" # 注意:不符合以上條件的才會添加 tag。相應的 output 裡要注意。
      }
    }
    date {
      match => [ "[monit][timestamp]", "MMM dd HH:mm:ss", "MMM  d HH:mm:ss" ]
      remove_field => "[monit][timestamp]"
    }
    mutate {
      add_field => { "indexname" => "monit" }
    }
  }
}           

然後在 output 裡配置:

output {
  if "monit-throttle" not in [tags] and [monit][level] == "error" {
    http {
      url => "{{ dingtalk_webhook_url }}"
      http_method => "post"
      content_type => "application/json; charset=utf-8"
      format => "message"
      message => '{"msgtype":"text","text":{"content":"[Monit] %{[monit][log]}"}}'
    }
  }
}           

把 {{ dingtalk_webhook_url }} 替換成你的釘釘機器人 webhook url 即可。

最後我們就得到了這樣的告警資訊:

繼續閱讀