こんにちは。ASKUL ごましおらぶです。
何をやるのか
GCP (※Google Cloud Platform) 上の何らかの処理が、正常に処理されているはずなのに異常な状態になることもあります。そのような時には簡単な設定だけでアラートを飛ばして検知したい。すなわちモニタリング環境を簡単な手順で構築してみましょう。
簡単な方法は何か
GCP 上のログをモニタリングする方法として、エラーログをフィルターしてエクスポート(Cloud Pub/Sub, Cloud Storage)エクスポート先から通知処理(ex: Cloud Functions から Slack Webhook を叩く)を行う方法があります。
※ ログのエクスポートについては公式ドキュメント:ログのエクスポートの概要を参考
※ エクスポートしたログの利用については公式ドキュメント:エクスポートしたログの使用を参考
Stackdriver の Notifications の設定を利用すれば前者の方法よりもっと簡単に Slack と連携させることが出来ます。
この記事のポイント
Default Metrics の Monitoring の構築方法は公式ドキュメントなどに載っていますが Custom Metrics の Monitoring 設定 + Slack 連携をまとめた資料が見つからなかったので、記事を書こうと思いました。それでは、構築方法を解説していきます。
準備をする
まずは、検知したいログ条件のクエリを作成します。そしてクエリに対するカスタム指標を作成する必要があります。
Step1. ログを開く
GCP の Stackdriver-Logging-Logs Viewer
より、エラー検知させたい処理のログを選択します。
Functions、 Scheduler、 Compute Eninge など何でも選べます。
※ Logs Viewer については公式ドキュメント:ログの表示を参考
Step2. ログのフィルターオプションの変更
クエリ欄の filter option を "convert to advanced filter" に変えます。
※ 高度なフィルタやログクエリについては公式ドキュメント:Advanced logs queriesを参考
Step3.ログのフィルターの条件を入力
どういう条件でエラーを検知するかのクエリを作成します。この記事では例としての、jsonPayloadUrl に "elmo"
を含む Cloud Scheduler Job の実行結果が ERROR の場合のクエリです。
resource.type="cloud_scheduler_job" severity>=ERROR jsonPayload.url:elmo
ログ上に出力される Type であれば基本クエリ条件として指定可能です。フィルターを送信してログがちゃんと絞られているかを確認します。
※ クエリの書き方については公式ドキュメント:Basic logs queriesを参考
Step4. カスタム指標を作成
クエリ条件ができあがりましたら、「指標を作成(CERATE METRIC)」ボタンを押します。
作成されたカスタム指標は、ログベース指標画面から確認できます。
※ カスタム指標作成については公式ドキュメント:カウンタ指標の作成を参考
※ ログベース指標については公式ドキュメント:ログベースの指標の概要を参考
通知を仕込む
ここまで出来たらあと一歩です。カスタム指標の用意ができましたので今度はアラートポリシーを作成、そして Slack 通知を仕込みます。
Step5. Slack チャンネルの登録
Stackdriver - Monitoring - Setting - Notifications- SLACK
に移動します。
Add Slack Channel ボタンを押して、通知したいチャンネルを追加します。
URL : https://app.google.stackdriver.com/settings/accounts/notifications/pagerduty?project=[your-project-name]
Slack チャンネル設定が成功するとこのように、Google Cloud Monitoring APP からのテストアラートが送信されます。
Step6. アラートポリシーを作成
Stackdriver - Monitoring - Alerting - Create a Policy
に移動します。そして、Add Condition より "Step4"
で作成したカスタム指標を選択します。
その後、Configiuration よりポリシー違反になる条件を定義します。例として、30 分間で 10 を上回った場合は下記のようです。
※ アラートポリシーの条件については公式ドキュメント:アラート ポリシーの条件を指定するを参考
※ 指標の選択については公式ドキュメント:指標の選択-指標の指定用フィールドを参考
Step7. Slack チャンネルへの通知設定
ポリシーの設定後、Save ボタンを押して、Create a Policy 画面に戻ると Notifications という項目があります。Slack を選び、通知先のチャネルを設定します。Slack 以外にもメール、SMS、Webhook など様々な通知タイプがあります。
※ 通知オプションについては公式ドキュメント:通知オプションを参考
Step8. 終わり!
Policy の名前を決めて Save ボタンを押すと通知設定完了です。定義したポリシーの違反されたらインシデントが送られます。
※ インシデントについては公式ドキュメント:インシデントとイベントを参考
いかがでしたか?
この記事では簡単な条件でアラートポリシーを設定してみました。ちなみに ASKUL では、GCE インスタンスのヘルスチェック・ログレベルの監視・社内ハッカソンのフリースペース検索 IoT ツールのモニタリング等幅広く活用しています。
各自の使い道に合わせてモニタリング設定をしてプロダクトの品質を担保できるといいですね! ではまた!
🌟 アスクルではエンジニアを募集しています!