サーバーのエラーログを自動的にSlackに送信する方法

はじめに

この記事では、サーバーのエラーログを自動的にSlackに送信する方法を紹介します。方法はいくつかありますが、以下の手順を参考にしてください。

SlackのWebhook URLを取得する

まずは、エラーログを送信するSlackチャンネルに対応するWebhook URLを取得します。SlackのWebhook URLは、チャンネルに対して特定のアプリケーションやサービスがメッセージを投稿するためのURLです。

Webhook URLは、Slackの管理画面から作成することができます。以下の手順を実行してください。

  1. Slackにログインします。
  2. 画面左側のメニューから「App」を選択し、アプリの管理画面に行きます。
  1. 画面上部の検索窓に「Incoming」と入力すると、「利用可能なアプリ」の候補に「Incoming Webhook」が現れます。
  1. 「Incoming Webhook」の「追加」ボタンを押します。
  2. 別タブにアプリの説明画面が表示されます。
  1. 画面左側のアイコンの下にある「Slackに追加」ボタンを押します。
  2. Incoming Webhookの設定画面に遷移します。
  1. Incoming Webhookがメッセージを投稿するチャンネルを選択し、「Incoming Webhookインテグレーションの追加」ボタンを押します。
  1. Webhookの設定画面が表示されます。
  1. Webhook URLをコピーします。
  2. 必要に応じて、名前やアイコンをカスタマイズし、「設定を保存する」ボタンを押して保存します。

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への送信対象から漏れてしまいます。

ログ観察ツールについて

より詳細なログの監視や管理を行いたい場合は、以下に示すようなツールを使用してください。

参考にした記事