Send Message To Slack By Logstash


把想知道的資訊往 Slack 傳送,用 ELK 收集 Application Log 都是目前很主流的作法,所以就想說把一些 Error Log 丟到 ElasticSearch 之前,就先傳送到 Slack 告知維護系統的人員,果不其然 Logstash 有提供這樣的一個 Plugin “logstash-output-slack", 但由於官方文件有點不詳細,網路上也找不太到清楚的範例,所以寫下這篇文章記錄一下

P.S. 以下例子的環境是以 ubuntu 16.04 下用 apt 安裝 logstash 為例,在開始之前要先設定好 Slack incoming-webhook

# 安裝 Logstash Plugin 前先切換到  Logstash 的 Binray 目錄底下
~$ cd /usr/share/logstash/bin/

# 然後執行安裝 command
~$ ./logstash-plugin install logstash-output-slack

# 成功的話應該會看到以下的成功訊息
Validating logstash-output-slack
Installing logstash-output-slack
Installation successful

# 這時候記得要 restart Logstash 不然無法使用新安裝的 Plugin

接下來就是開始寫 Logstash 的 Output Config,我假設的情境是當 Nginx 的 HTTP Status Code 是 5xx 開頭的時候,就會把訊息傳送到 Slack,底下為 Logstash Config Sample

output {
  if [log_type] == "nginx-access" and [response] > 499 {
    slack {
      url => "YOUR SLACK WEBHOOK URL HERE"
      channel => [channel-name - optional]
      username => [slack username - optional]
      icon_emoji => [emoji, something like ":simple_smile:" - optional]
      format => []
      attachments => [
      {
        "pretext" => "Error Log Information as Below:"
        "color" => "danger"
        "fields" => [
          {"title" => "project" "value" => "%{project}" "short" => true},
          {"title" => "module" "value" => "%{module}" "short" => true},
          {"title" => "host" "value" => "%{host}" "short" => true},
          {"title" => "response" "value" => "%{response}" "short" => true},
          {"title" => "request" "value" => "%{request}" "short" => true}
        ]
      }
    ]
  }
}
  • 我用了 if 判斷需要傳送到 Slack 的 Log,條件是必須是 Nginx Access Log 而且 HTTP Status Code 大於 499 (log_type 跟 response 是我自己定義的 field 欄位名稱,應該每個人都會不一樣)
  • url 可以在剛剛設定好的 Slack incoming-webhook 頁面內取得
  • channel, username, icon_emoji 就是根據自己喜好來調整
  • format 我不做調整,所以填入一個空的 array
  • attachments 就是要送到 Slack 的內容啦,%{XXXX} 就是取得 Logstash Field Value 的方法,依照個人需要,可以看要填哪些東西,我個人是把哪一台機器出什麼問題給放進去 attachments 內

撰寫好 Logstash Output Config 之後記得要 restart Logstash 載入剛剛新增的部分,然後等到真的有問題發生時,應該就可以再 Slack 收到如下的訊息:
Screen Shot 2017-11-04 at 1.48.51 PM

假如對於 attachments 內的呈現方式或是功能有興趣的話,可以參考 Slack 的“官方文件"

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s