Google Cloud ログベースのアラート機能を使って エラーログが出たら Slack に通知する
Cloud Logging へ出力されたエラーログのSlack通知がぐっと楽になりました。
こちら、2021年7月27日に 投稿された Google Cloud のブログです。
ブログによると、どうやら Cloud Logging から特定のクエリにひっかかるログを検知し、それを通知できる機能のようです。
これまで
これができるまでは、Cloud Logging => Log Router => Cloud PubSub => Cloud Functions => 通知 という流れを実装する必要がありました。

出典:Cloud Logging のイベントをリアルタイムで検出して対応する
今回のリリースで Cloud Pub/Sub や Cloud Functions を配置することなく、通知まで行えます。
新しい機能で検知からSlack通知までをやってみる
では新しい機能を使って検知から通知までやってみましょう。検証のため、実際にはやらないとは思いますが、Google App Engine のヘルスチェックログを検知したら Slack へ通知するよう設定します。
Cloud Logging の画面でログを絞り込み
ログのフィールド ペインをクリックしていって条件を絞り込み、検知したいログを特定します。最終的に以下のようなクエリで絞り込みました。
resource.type="gae_app"
severity=INFO
log_name="projects/market-project/logs/appengine.googleapis.com%2Fnginx.health_check"
resource.labels.module_id="default"
この状態でログアラートの作成をクリックします。

するとアラート作成画面になるので、入力を進めていきます。今回は以下のようにしました。

- アラート名:ヘルスチェックが飛んできた
- Define log entries to alert on:アラート発火の条件クエリです。上記入力したクエリがあらかじめ入力された状態になっているとおもうので、問題なければそのまま「次へ」としてください
- 通知の間隔:ポーリング間隔だと思います。今回はすぐに受信したいので5分にしました
- Notification Channels: ここで通知先を設定するのですが、最初は空のはずです。「通知チャンネルを管理」を、別タブで開いてください
通知先の作成(Slack連携)
次のような画面が開きます。

今回は Slack ワークスペースにアプリをインストールして通知します。Slack のところで Add New してください。ここからは Slack の操作になります。ワークスペースにログインすると、「Google Cloud Monitoring」をインストールしてよいか聞かれるのでOKとします。Google Cloud の画面に戻り、チャンネルを設定する画面になるので通知先を入力してください。

TEST CONNECTION するとテスト通知が飛びますので、それを確認してください。

これで Slack との連携ができました。
通知先の設定
通知先を作成したので、作り途中のアラートポリシーと紐付けます。4. Who should be notified? (省略可)で止まっていたと思うのでそこで作成した通知チャンネルを指定します。その後、SAVEしてください。

これで設定は完了です。
通知の確認
アラートポリシーと合致するログが出力されると、Slack に通知が飛びます。

おわりに
Cloud Pub/Sub や Cloud Functions を用意することなく Cloud Logging の内容を検知して通知までできました。通知はどうしてもやり方が増えてメンテナンスが大変になりがちですので、アプリケーション側はログ出力まで、クラウド側のサービスで検知して通知、と役割をきれいにわけられると嬉しいですね。

Discussion