【GCP】アラートメールにログ情報を載せる方法

# 1. はじめに
Google Cloud のログベースの指標に基づいたアラートを設定していると、メールでアラートを通知する際に、アラートメールにエラーが発生した機能の情報やアカウントの情報なども一緒に知らせたい時があると思います。
そこで今回は、アラートメールにそれらの情報を載せる方法が実現できたため、備忘録含め紹介します。

ちなみに、Cloud Monitoring のアラートポリシーのドキュメントフィールドで、変数を用いて、特定の情報を載せることもできます。ただしこの場合だと、アカウント名やアプリで表示させたログの情報（textPayload）などを変数に代用することはできません。
（2022.11.30 時点）

https://cloud.google.com/monitoring/alerts/doc-variables#doc-vars

### 前提
本投稿は以下の2点を理解していることを前提に記載します。
・ログベースの指標の定義を理解していること
・ログベースの指標の定義に基づいたアラートを理解していること

ログベースの指標に基づいたアラートの作成方法の記載について割愛します。
作成方法は、公式ドキュメントを確認してください。

https://cloud.google.com/logging/docs/alerting/log-based-alerts#lba-definition

# 2. 実現方法
早速ですが、実現方法を記載します。
<b>それはアラート発報の元となっている、ログベースの指標にラベルを付けることで、
アラートメールにラベルに基づいた情報が表示されるようになります。</b>

今回ご紹介する例として、Cloud Storage のオブジェクトを削除した場合にアラート発報するためのログベースの指標を作成します。
※オブジェクトを削除したログを出力するために、事前に Cloud Storage のデータアクセス監査ログを有効化しています。

## 2-1. ログベースの指標を作成
まず、アラート発報の元となるログベースの指標を作成します。

```ruby:ログベースの指標のフィルタ
severity="INFO"
protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"
protoPayload.methodName="storage.objects.delete"
```
そして、今回ご紹介の肝となるラベルの付与を行います。
今回は知りたい情報として、以下の内容が表示されるようにラベルを付与します。

<table>
  <caption>1. ファイル削除したアカウント</caption>
  <tr>
    <td><b> ラベル名 </b></td> <td>Account</td>
  </tr>
  <tr>
    <td><b> Label type </b></td> <td>STRING</td>
  </tr>
  <tr>
    <td><b> フィールド名 </b></td> <td>protoPayload.authenticationInfo.principalEmail</td>
  </tr>
</table>

<table>
  <caption>2. 削除したファイル名</caption>
  <tr>
    <td><b> ラベル名 </b></td> <td>File</td>
  </tr>
  <tr>
    <td><b> Label type </b></td> <td>STRING</td>
  </tr>
  <tr>
    <td><b> フィールド名 </b></td> <td>protoPayload.authorizationInfo.resource</td>
  </tr>
</table>

![01.log_filter.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989007/0d743fd1-9af1-1bf8-b7e3-62330b6cfd79.png)
図1. ログフィルタの設定
![02.log_lavel.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989007/0b634f72-7f3b-20e1-c6b0-0307dce14c2b.png)
図2. ラベルの設定

## 2-2. ログベースの指標に基づいたアラートの作成
2-1 で作成したログベースの指標をベースにアラートを作成します。
今回は、以下の設定で作成しました。
※表に記載されていない設定は default になります。
（通知チャネルやアラートポリシー名は、任意の値で設定しています）

<table>
  <caption>アラートポリシーの設定値</caption>
  <tr>
    <td><b> ローリングウィンドウ </b></td> <td>1分</td>
  </tr>
  <tr>
    <td><b> ローリングウィンドウ関数 </b></td> <td>delta</td>
  </tr>
  <tr>
    <td><b> 時系列集計 </b></td> <td><b><font color="#ff0000">none</font></b></td>
  </tr>
  <tr>
    <td><b> Condition type </b></td> <td>Threshold</td>
  </tr>
  <tr>
    <td><b> Aleart triger </b></td> <td>任意の時系列の違反</td>
  </tr>
  <tr>
    <td><b> 閾値の位置 </b></td> <td>閾値より上</td>
  </tr>
  <tr>
    <td><b> 閾値 </b></td> <td>0</td>
  </tr>
  <tr>
    <td><b> 条件名 </b></td> <td>TEST Aleart</td>
  </tr>
</table>

上記の表で重要なのが、時系列集計を「<b>none</b>」にしている点です。
「<b>none</b>」にしなければ、ラベル付与した情報は表示されませんので、注意してください。

![03.monitoring_alert01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989007/15282ce3-eb3c-7902-73a6-33d020138b19.png)
図3. アラートの設定_1
![04.monitoring_alert02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989007/7ed217eb-142d-09fd-e04a-15f8a406e81d.png)
図4. アラートの設定_2

# 3. 動作確認
それでは、実際にCloud Storage にアップロードされているファイルを削除し、アラートメールの受信を確認します。
受信したアラートメールは、こちらの画像になります。

![05.mail.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989007/d5a5fb9c-93f5-093c-b4eb-18dfee2b18a1.png)
図5. アラートメール

上図にある、「Metric labels」がラベル設定した情報になります。
ラベル設定した、「どのアカウントで」「何のファイル」を削除したのかが、アラートメールから分かるようになりました。

# 4. おわりに
本投稿では、ログベースの指標に対するアラートで、アラートメールにアカウント情報や削除したファイル情報を表示する方法を紹介しました。
本投稿の例では、Cloud Storageのオブジェクトを削除した際のアラートでしたが、アプリケーションのエラーログの情報（textPayload）やセキュリティ監視のアクセス元情報（callerIp）なども表示することができます。