前段時間我們公司開始使用“釘釘”作為企業溝通工具。在知道釘釘群還能設定機器人接收定制的通知資訊時,我就尋思如何把它和 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 即可。
最後我們就得到了這樣的告警資訊: