エンジニアレポート

LaravelのエラーログをSlackやTeamsに通知する

2020年04月27日

データスタジアムのエンジニア片岡です。

Webアプリの開発ではLaravelを採用することが多いのですが、今回はLaravelでエラー発生時に通知をSlackとTeamsに送る方法について調べた事を記します。

Laravelのバージョンは6.xを使います。

Slackへの通知

Incoming webhook URLを取得

まずはIncoming webhook URLを取得します。以前とは取得方法が変わっているようです。

slackのIncoming webhookが新しくなっていたのでまとめてみた – Qiita

(公式)Slack での Incoming Webhook の利用 – Slack

logging.phpと.env設定

Laravel5.6から、標準でSlackへの通知ができるようになっていて、config/logging.phpに以下のブロックがあります。
levelの所はデフォルトでは’critical’ですが、.envから取るように変えています。

取得したIncoming webhook URLと通知したいログレベルを.envに追加します。

例外発生から通知

この状態でControllerで例外を発生させると、Slackに通知が届きます。

ただ、スタックトレースが長々と出力されるので、続けて何件も通知が来ると非常に見づらくなってしまいます。
できるだけ必要最低限の情報にしてSlack上での見やすさも確保したい所です。

短いフォーマット

logging.phpで’short’ => true を追加することで短くすることができます。

↓こちらが通知内容です。 LevelとMessageが結合された出力になっています。

さらに短く

さらに、’context’ => false を追加するとスタックトレースを含むContext自体が出力されなくなります。

↓このように非常に短い通知内容になります。

課題

これだと情報が少なすぎるので、本当はこのくらい↓の情報は欲しいのですが、それには自前でログハンドラーを書く必要がありそうです。

ちなみに文字数は1990文字で切られるようになっていて、その文字数を減らすのでも対策にはなると思いますが、ソースを追っていくとこちらのSlackRecord.php – GitHubでハードコードされていました。
外側から設定できるようになるといいですね。


Microsoft Teams

続いてMicrosoft Teamsでも同じように通知をしてみましょう。

Incoming webhook URLを取得

Slack同様、Incoming webhook URLを取得します。
画面左側にあるチーム名の右の「・・・」→チームを管理→「アプリ」タブ→「その他のアプリ」を押します。

次に検索窓でwebhookと打つと以下のようにIncoming Webhookがヒットします。
これをクリックして「チームに追加」すると、Webhook URLがゲットできるのでそれをコピーしておきます。

laravel-teams-loggingインストール

Slackと違ってLaravel標準では用意されていないので別途パッケージlaravel-teams-logging – Packagistをインストールします。

次にconfig/app.phpの’providers’ => [ 配下に以下を追記します。

次に以下のコマンドでTeams用の設定ファイルを生成します。

logging.phpと.env設定

logging.phpにTeams用設定を追記します。

さらに、logging.phpのchannlesに’teams’を設定します。

.envに以下の2つを追記します。

例外発生から通知

この状態で先程と同じようにControllerで例外を発生させると、Teamsに通知が届きます。

logging.phpで’style’ => ‘simple’の部分を’style’ => ‘card’にすることもできるようですが、試した所通知が来ませんでした。

また、なぜか処理時間が毎回10秒ほどかかります。
何か環境が悪いのか、TeamsのWebhook側の処理が重いのか分かりませんが、このままだと実戦での利用は難しそうです。
今度時間をとって深追いしてみます。

今回は以上です。

エンジニア募集中

データスタジアムでは一緒に働いていただけるエンジニアを絶賛募集中です!

野球、サッカー、バスケをはじめとして色々なスポーツの仕事があります。

AWSやAzure、動画やAIなど技術的にもチャレンジできる職場です。

テクノロジーの力で、日本のスポーツを一緒に発展させていきましょう!

<募集中のポジション(2020年8月1日現在)>

開発エンジニア(速報サービス)

開発エンジニア(スポーツチーム向けサービス)

インフラエンジニア

最新記事

エンジニアトップ エンジニアインタビュー エンジニアレポート

  • 採用情報
  • おしらせ
  • 掲載事例

ページトップヘ