laravel
Slack
laravel5.4
LaravelDay 25

LaravelでMonologを使って、SlackにERROR通知する

今、携わっているプロジェクトで謎のエラーでアプリケーションが
落ちる事があり、エラーログを検知して、Slackに通知する事になった!

やりたいこと

  • Monologを使ってSlackへ通知したい

環境

  • Laravel5.4
  • php7.1
  • local開発環境(MAMP)

手順

1.Slackでアプリを発行する
2.monologをインストール
3.monologの設定を行う
4.動作確認

1.Slackでアプリを発行する

1.1まずはここにアクセスして、 https://api.slack.com/apps

クリックする / 入力する
1. Create New App
2. App Name
3. Development Slack Team
4. Create App

スクリーンショット 2017-12-10 5.43.01.png

2. スコープ設定

まずはスコープの設定をしないとアプリをインストールできません。
今回のサンプルではチャンネルにメッセージを投稿するだけのスコープだけ設定します。
どのスコープでどういうことができるかは今回取り扱いませんので、ドキュメントを参照ください。

permission scopeをクリック
キャプチャ.png
* 必要なscopeを選択
* 今回はSend messages as sample.

キャプチャ2.png

3. Slackにアプリをインストール

ちゃんとScopeが設定されていると緑色になっている[Install App To Team]を押します。

キャプチャ3.png
Team名を確認して間違いがなければ[Authorize]を押します。
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3131323932392f31663834313432382d633465342d356137392d386235622d3532363461346564303439372e706e67.png

リダイレクトされた先にTokenが書かれていますのでこれを普通のTokenとして使ってください。

4. Tokenを探す

先のTokenを紛失したときの探し方。
https://api.slack.com/apps

アプリを選ぶ。
sampleをクリック
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3131323932392f34383237333635302d333236632d373934662d356363372d3531323265373336353333332e706e67.png

[OAuth & Permissions]をクリック
[OAuth Access Token]をコピー

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3131323932392f36376161353038332d636266382d376665382d663431372d6263343865383530616433342e706e67.png

2.monologをインストール

下記のコマンドを実行して、monologをインストール

$ composer require monolog/monolog

3.monologの設定を行う

AppServiceProvider.php に先ほど発行したtokenの設定などを行う。

<?php

namespace App\Providers;

use Illuminate\Support\Facades\Schema;
use Illuminate\Support\ServiceProvider;
use Log;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {

        Log::listen(function () {

            $monolog = \Log::getMonolog();

            $slackHandler = new \Monolog\Handler\SlackHandler(
                'token',
                '#channel-name',
                'Monolog',
                true,
                null,
                \Monolog\Logger::ERROR
            );

            $monolog->pushHandler($slackHandler);
        });
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

4.動作確認

\Monolog\Logger::ERROR を設定した場合
Slackに指定したメッセージが表示されていれば成功!!

// 意図的にSlackへ通知する
\Log::error('TEST');

スクリーンショット 2017-12-10 6.04.19.png

参考

https://qiita.com/qiita-kurara/items/04a3de448506e1d7876c

https://qiita.com/ykhirao/items/3b19ee6a1458cfb4ba21