この記事はTech KAYAC Advent Calendar 2023の15日目の記事です。
こんにちは、カヤックボンドのサーバーエンジニアの松本です。
今年はカヤックグループ合同のアドベントカレンダーということで、各グループから色んな方が参戦しています。
今回は開発サーバーでの開発体験を高めるためのアラートについて紹介したいと思っています。
なお、今回の記事はGoogle CloudのCloud Loggingにエラーログを送信しているプロジェクトを対象にしています。(50GB/月、保持期間30日まで無料なのでガンガン活用すると良いと思います)
はじめに
Google CloudではError Reportingという自動的にモニタリング/アラートを行えるサービスがあります。
Error Reportingではエラー箇所ごとに発生回数を集計してくれたり、影響ユーザー数も集計してくれたりでGoogle Cloud使うなら絶対活用するべきなのですが、Slack等に送信するメッセージは整形できないので、開発では不便なことがあります。
例えば、こんな情報がSlackで通知されると便利なのではないでしょうか。
- リクエストURL
- エラーメッセージ/エラーコード
- エラー発生箇所(関数名、行数)
- エラー発生ユーザー
アラートの仕組みがない開発環境ではクライアントさんや企画さんから「エラー出ました」と発信が無いと、サーバー側での事前検知が困難です。
Slackにアラートが発報されて、それを見て直ぐにどの程度深刻か判断できる場合、サーバー側から「エラーっぽいので調査します」だったり、「致命的なのでCloud Runのリビジョンを戻します」等素早い判断が出来、お互い幸せな開発体験を送ることができるでしょう。
最低限の形で動かしてみよう
まずは特定のログが来たらSlackに通知するだけのアラートを作ってみようと思います。
ログベースのアラートは昨年GAになった比較的新しい機能で、公式Docも何故かコンソールからの操作説明を諦めてしまっているのみたいですが、今回はコンソールからの操作で説明します。
まずは通知チャンネルの構成を行います。以下のURLより、SlackのAdd newを押すことで、Slackワークスペースとの連携が行います。
https://console.cloud.google.com/monitoring/alerting/notifications
赤い丸より連携を行うことで、登録は完了です。メールやその他アプリへの連携も可能です。
Terraform等やAPI経由で設定を行いたい方は、登録後青い丸から「通知のURL」のコピーが可能です。
次に、ログエクスプローラより「アラートを作成」ボタンを選択します。
選択すると、作成画面が出てきます。現時点では日本語対応は部分的のようです。
最低限必要な項目は以下です。
- Alert Policy Name
- Choose logs to include in the alert
- 通知の間隔
- インシデントの自動クローズ期間
- 通知チャンネル(複数指定可)
Choose logs to include in the alertにはアラート条件をLoggingのクエリ言語で記載します。PREVIEW LOGSを押下することで、絞り込めているか確認も可能です。
ここまで設定を終えて、slackでログを出してみると以下のようにアラートが発報されます。
このアラートではCloud Runで何かが起きたことは分かるのですが、詳細はURL見ないと分かりません。
そこで、表示されるメッセージのカスタマイズを行ってみようと思います。
アラートメッセージをカスタマイズしよう
ログベースのアラートでは構造化ログの任意のフィールドの値を変数として利用できる機能があります。
今回は、構造化ログからエラー発生箇所を取ってきてSlackに表示させてみようと思います。
アラートの設定から「ADD A LABEL」を押して以下のように指定します。
Documentationには以下のように追記します。
- 構造化ログから特定のフィールドを指定して、ラベルを作る
- 作ったラベルで、アラートのメッセージを作る
ここまで設定すると、Slackには以下のようなアラートが発報されます。
ここまでくれば、エラーが起きたAPIが何なのか素早く特定できるでしょう。
他にもログに出しているものを出力することで、より良いアラートになると思います。
例えば、アプリケーション側に送信しているエラーコードやメッセージを表示したり、ユーザーIDと管理画面のURLを繋げて管理画面へのリンクを作ったりすることで、サーバー以外の人が見ても役に立つエラーログになると思います。
おわりに
無事にアラートが発報出来たので、めでたしめでたし、と言いたいところですが、もし環境が10環境あって、それら全てに上記の設定を加えてメンテするのは非常に大変です。
社内の勉強会などの各種イベントでは、上記問題などを取り扱った少し広い範囲の紹介を行っているので、ご興味がある方や、一緒に快適な開発体験を行う取り組みを行いたい方、是非↓リンクからご応募いただければと思います。メリークリスマス!