ども、 cloudpack の かっぱ (@inokara) です。
もくてき
- ログ監視したいけどサクッとやりたい
- 通知はメールぢゃなくて slack で
- サーバーにはたまたま pm2 が入っていたので pm2 でデーモン化
参考
slack の Incoming WebHooks とスクリプト
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
ちなみに各オプションは以下の通りとなります。
-x
オプションは fork モード--
オプションはスクリプトの引数
nodejs 以外を動かす場合には fork
オプションは必須(デフォルト)のようです。
logger でログを吐く
ログ監視のシェルスクリプトが起動したところで logger
コマンドを利用してログを吐かせます。
logger -t ERROR hoge
通知
ということで…
- 使い捨て感覚でお手軽にログ監視するならシェルスクリプトがイイネ
- slack への通知も簡単
pm2
があればデーモン化もできちゃう
元記事はこちらです。
「ログ監視シェルスクリプトを pm2 でデーモン化して通知は slack に飛ばすメモ」