ログを監視してSlackに通知を送るシェルスクリプトを良く書いたり、誰かに設定してもらうことが多いので健忘録。
1. SlackからIncomming Webhookを作成
https://hooks.slack.com/services/XXXXXXXXX/YYYYYYYYY/ZZZZZZZZZ
のようなURLを作成する。
2. サーバー上でエラーを検知し、送付するスクリプトを作成
ファイル名を、report.sh
として作成。ここでは対象ログを、 cron_daily.log
とし、検知する文字列を大文字小文字を無視して err
とした。自分用に随時編集のこと。curlで送る内容は、チャンネル名と最後のWebhook URLを変更のこと。
スクリプトの内容としては、エラーログファイルをgrepして対象文字列を含む行がある場合には、Slackに通知するスクリプトとなっている。
#!/bin/bashERROR_CONTENT=`cat cron_daily.log | grep-i err`ERROR_BYTE=`echo$ERROR_CONTENT | wc-c`echo$ERROR_BYTEif[$ERROR_BYTE-gt 1 ];then
echo"エラーがありました。"
curl -X POST --data-urlencode"payload={\"channel\": \"#チャンネル名\", \"username\": \"エラーログ報告\", \"text\": \"$ERROR_CONTENT\", \"icon_emoji\": \":bar_chart:\"}" https://hooks.slack.com/services/XXXXXXXXX/YYYYYYYYY/ZZZZZZZZZ
else
echo"エラーはありませんでした。"fi
3. Cronでエラーログの送信タイミングを設定
chmod a+x report.sh
crontab -e
実行権限をつけてCronを編集するコマンドにて、vim等で編集し、
0 * * * * /home/username/report.sh
のように実行するスクリプトのパスを設定して完了。このCronの設定だと毎時0分にエラーが発生していたらSlackに通知が飛ぶ。
以上。