サーバーのエラーログを自動的にSlackに送信する方法
公開日
はじめに
この記事では、サーバーのエラーログを自動的にSlackに送信する方法を紹介します。方法はいくつかありますが、以下の手順を参考にしてください。
SlackのWebhook URLを取得する
まずは、エラーログを送信するSlackチャンネルに対応するWebhook URLを取得します。SlackのWebhook URLは、チャンネルに対して特定のアプリケーションやサービスがメッセージを投稿するためのURLです。
Webhook URLは、Slackの管理画面から作成することができます。以下の手順を実行してください。
- Slackにログインします。
- 画面左側のメニューから「App」を選択し、アプリの管理画面に行きます。
- 画面上部の検索窓に「Incoming」と入力すると、「利用可能なアプリ」の候補に「Incoming Webhook」が現れます。
- 「Incoming Webhook」の「追加」ボタンを押します。
- 別タブにアプリの説明画面が表示されます。
- 画面左側のアイコンの下にある「Slackに追加」ボタンを押します。
- Incoming Webhookの設定画面に遷移します。
- Incoming Webhookがメッセージを投稿するチャンネルを選択し、「Incoming Webhookインテグレーションの追加」ボタンを押します。
- Webhookの設定画面が表示されます。
- Webhook URLをコピーします。
- 必要に応じて、名前やアイコンをカスタマイズし、「設定を保存する」ボタンを押して保存します。
Slackのドキュメントも参考にしてください。
ログをSlackに送信するスクリプトを作成する
ログをSlackに送信するためのスクリプトを作成します。このスクリプトでは、Webhook URLとログファイルを指定して、ログファイルの最後の10行を取得し、Slackに送信します。
- SLACK_WEBHOOK_URLの行に、前項で取得したWebhookのURLを設定します。
- LOG_FILEの行にログファイルを設定します。以下の例ではApacheのエラーログが出力されるファイルを指定しています。ファイル名やディレクトリはOSやWebサーバによって異なるので、それに合わせてください。
#!/bin/bash
# Webhook URL
SLACK_WEBHOOK_URL="https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXX"
# Log file
LOG_FILE="/var/log/apache2/error.log"
# Get the last 10 lines of the log file
LOG_CONTENT="$(tail -n 10 $LOG_FILE)"
# Post the log content to Slack
curl -X POST -H 'Content-type: application/json' --data "{\"text\":\"$LOG_CONTENT\"}" $SLACK_WEBHOOK_URL
スクリプトを定期的に実行する
最後に、スクリプトを定期的に実行するために、cronジョブを作成します。
例えば、前項で作成したスクリプトをscript.shというファイルに保存します。そして、以下のようなcronジョブを作成し、crontabに登録することで、5分ごとにスクリプトが実行されます。
*/5 * * * * /path/to/script.sh
注意点
このプログラムでは、スクリプトを5分ごとに実行し、その時点におけるエラーログファイルの最後の10行をSlackに送信しています。しかし、直近の5分以内に10行以上のログが追加されると、一部のログがSlackへの送信対象から漏れてしまいます。
ログ観察ツールについて
より詳細なログの監視や管理を行いたい場合は、以下に示すようなツールを使用してください。
- Logwatch:Linuxシステム上で稼働するログ分析ツールです。
- 参考: logwatchによるログ監視
- Logrotate:ログファイルをローテーションするためのツールです。
- 参考: logrotate入門
- Syslog:Linuxシステム上でログを収集するための標準的な方法です。