share facebook facebook2 twitter menu hatena pocket slack

2015.02.25 WED

ログ監視シェルスクリプトを pm2 でデーモン化して通知は slack に飛ばすメモ

川原 洋平

WRITTEN BY川原 洋平

ども、 cloudpackかっぱ (@inokara) です。

もくてき

  • ログ監視したいけどサクッとやりたい
  • 通知はメールぢゃなくて slack
  • サーバーにはたまたま pm2 が入っていたので pm2 でデーモン化

参考

slack の Incoming WebHooks とスクリプト

Incoming WebHooks

Incoming WebHooks を利用します。
ログ監視シェルスクリプトを pm2 でデーモン化して通知は slack に飛ばすメモ: Incoming WebHooks の設定

上記の WebHook エンドポイントに対して以下のようなリクエストボディを投げつけます。

payload={"text": "This is a line of text in a channel.nAnd this is another line of text."}

例えば、 curl で投げつける場合には以下のように。

curl -XPOST 'https://hooks.slack.com/services/xxxxxxx/xxxxxxxxxxxxxxxxx' --data-urlencode 
'payload={"text": "Log error.","channel": "#notify-log-alert","icon_emoji": ":older_man:"}'

スクリプト

こちら のシェルスクリプトを以下のように slack 通知に改変させて頂きました。有難うございます。

#!/usr/bin/env bash
#
error_conditions="ERROR"

#
post_to_slack(){
cat << EOT | curl -XPOST 'https://hooks.slack.com/services/xxxxxxx/xxxxxxxxxxxxxxxxx' --data-urlencode 
payload='{
  "text": "Log error.",
  "channel": "#notify-log-alert",
  "icon_emoji": ":older_man:"
}'
EOT
}
#
log_alert() {
  while read i
  do
    echo $i | grep -q ${error_conditions}
    if [ $? = "0" ];then
      post_to_slack
    fi
  done
}
tail -n 0 --follow=name --retry $1 | log_alert

このシェルスクリプトを logwatch.sh という名前で保存しておきましょう。

デモ

pm2 でシェルスクリプトをデーモン化

pm2とは泣く子も黙る node.js アプリケーションのプロセス管理パッケージです。node.js だけではなくてシェルスクリプトのプロセスも管理することが出来るようです。

ということで、以下のように実行してシェルスクリプトをデーモン閣下します。

pm2 start logwatch.sh -x -- /var/log/messages

以下のように出力されます。
ログ監視シェルスクリプトを pm2 でデーモン化して通知は slack に飛ばすメモ: pm2でシェルスクリプトをデーモン化

ちなみに各オプションは以下の通りとなります。

  • -x オプションは fork モード
  • -- オプションはスクリプトの引数

nodejs 以外を動かす場合には fork オプションは必須(デフォルト)のようです。

logger でログを吐く

ログ監視のシェルスクリプトが起動したところで logger コマンドを利用してログを吐かせます。

logger -t ERROR hoge

通知

以下のように slack に通知がキマシタ。
ログ監視シェルスクリプトを pm2 でデーモン化して通知は slack に飛ばすメモ: 動作確認 (slackに通知)

ということで…

  • 使い捨て感覚でお手軽にログ監視するならシェルスクリプトがイイネ
  • slack への通知も簡単
  • pm2 があればデーモン化もできちゃう

元記事はこちらです。
ログ監視シェルスクリプトを pm2 でデーモン化して通知は slack に飛ばすメモ