WebサーバのエラーログをSlackに投稿してみた

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【4/18開催】VSCode Dev Containersで楽々開発環境構築祭り〜Python/Reactなどなど〜
Visual Studio Codeの拡張機能であるDev Containersを使ってReactとかPythonとかSpring Bootとかの開発環境をラクチンで構築する方法を紹介するイベントです。
https://tech-lab.connpass.com/event/311864/

この記事ではApache httpdサーバのApacheエラーログとPHPエラーログをSlackに投稿する方法をまとめました。

やりたいこと

当サイトをWebサーバで運用するにあたり、健全性を保つには定期的にログを確認する必要があります。しかし、毎日サーバに接続してコマンドを実行して内容を確認するのは大変です。そこで、内容チェックは手動でやるにしても、ログの表示までの手順を簡略化しようと思い実装しました。エラーログの内容をSlackに投稿することで、Slackを見るだけでエラーの内容を確認できるようにします。

Slack AppでWebHookのリクエストを待ち受け、サーバのスケジューラでリクエストを送信するスクリプトを実行します。

実装

Slackの設定

Slackのアプリから[App]をクリックします。

 

検索ツールで[webhook]で検索します。検索結果に表示される[Incoming WebHook]の[追加]をクリックします。

 

ブラウザのslackのアプリのページに遷移します。設定により権限が必要な場合があります。その場合は[設定をリクエストする]より管理者にリクエストを送信します。

 

リクエストが承認されるとSlackbotから以下のような通知がきます。[App ディレクトリに移動する]をクリックします。

 

ブラウザのSlackのアプリの設定ページに遷移します。[Webhook URL]をコピーし、後述のスクリプトに貼り付けます。

シェルスクリプト

以下はスクリプトの一例です。

#!/bin/sh

# ログをチェックしてslackに投稿するスクリプト

# 前日のapacheエラーログ、phpエラーログを指定したチャンネルに投稿


# slack設定
URL="[webhookURL]"

USERNAME="[botの表示名]"
CHANNEL="#[送信先チャンネル]"
ICON=":abc:"


# ログの取得
DATE_APACHE=$(LC_ALL=C date -v -1d "+%h %d") 
DATE_PHP=$(LC_ALL=C date -v -1d "+%d-%h-%Y")

LOG_APACHE=$(grep "$DATE_APACHE" /var/log/httpd/error_log)
LOG_PHP=$(grep "$DATE_PHP" /var/log/httpd/error.log)


# メッセージ整形
TEXT=$(cat << EOF
apache
-----------------------------
$LOG_APACHE
-----------------------------

php
-----------------------------
$LOG_PHP
-----------------------------
EOF
)

POST=$(cat << EOF
    payload={
    "channel": "$CHANNEL",
    "username": "$USERNAME",
    "icon_emoji": "$ICON",
    "text": "$TEXT"
  }
EOF
)

# Slackへ送信
curl -X POST --data-urlencode "$POST" $URL

[webhookURL]を先程コピーしたURLに置換します。USERNAMEはbotの表示名、 CHANNELは送信先チャンネル、 ICONはbotのアイコンを設定します。TEXTを書き換えることで送信メッセージを編集できます。

WebHookでは、curlを使ってbotのURLにPOSTします。

スケジューラ

上記スクリプトを定期的に実行するためにcronによるスケジューリングを設定します。下記の例では毎朝9:00に実行します。

# crontab -e
0       9       *       *       *             /path/to/script/log_check.sh 1> /dev/null

 

以上です。

注意点ですが、上記スクリプトはログの容量が大きすぎるとARG_MAXを超えてしまい、curlを実行できない場合があります。ARG_MAXを増やすか、エラーを修正してログ容量を減らす必要があります。スクリプトを修正すべきそもそも表示しきれない程の大量のエラーが出ている状態は良くないのでエラーを修正することをお勧めします。

アバター画像
プロフェッショナルサービスチームの中の人。
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる