FLINTERS Engineer's Blog

FLINTERSのエンジニアによる技術ブログ

Google Cloudのログ件数比率でアラートを発生させる

こんにちは、株式会社FLINTERSの丸山です。この記事はFLINTERS10周年記念ブログリレーの63日目です。

Google Cloudには、ある条件に達した時にアラートを発生させる仕組みがあります。その仕組みを使って、あるログの数と別のログの数の比率がある割合になった時(例えば失敗ログ数が成功ログ数の10%を超えた時など)アラートを受け取る方法を調べてみました。

ログベースの指標の作成

まずは対象となるログの指標を作ります。 Google Cloudではユーザー定義の指標を使って、独自のログベースの指標を作成できます。

ログベースの指標の画面から特定のメッセージを持つログをフィルタ条件とする指標を作成します。

今回はログの件数の比率を出したいので、指標タイプはCounter、フィルタはtextPayloadというフィールドがsuccessというログとfailureというログをカウントする指標を作りました。

アラートポリシーの作成

次にアラートポリシーを作成します。 アラートポリシーはアラートが発生する条件とその通知方法の設定です。

今回アラートが発生する条件はfailureログ数がsuccessログ数の50%を超えたらアラートを発生させるという条件にします。

アラートポリシーはGoogle Cloudの画面からも作成できますが、今回はgcloudコマンドとJSONファイル使用して作成します。

まず下記のようなJSONファイルを用意します。

{
  "displayName": "test policy",
  "documentation": {
    "content": "テスト通知",
    "mimeType": "text/markdown"
  },
  "userLabels": {},
  "conditions": [
    {
      "displayName": "New condition",
      "conditionThreshold": {
        "aggregations": [
          {
            "alignmentPeriod": "86400s",
            "crossSeriesReducer": "REDUCE_SUM",
            "perSeriesAligner": "ALIGN_DELTA"
          }
        ],
        "comparison": "COMPARISON_GT",
        "denominatorAggregations": [
          {
            "alignmentPeriod": "86400s",
            "crossSeriesReducer": "REDUCE_SUM",
            "perSeriesAligner": "ALIGN_DELTA"
          }
        ],
        "denominatorFilter": "resource.type=global AND metric.name=\"logging.googleapis.com/user/success\"",
        "duration": "0s",
        "filter": "resource.type=global AND metric.name=\"logging.googleapis.com/user/failure\"",
        "thresholdValue": 0.5,
        "trigger": {
          "count": 1
        }
      }
    }
  ],
  "alertStrategy": {
    "autoClose": "604800s"
  },
  "combiner": "OR",
  "enabled": true,
  "notificationChannels": []
}

ここで大事な部分はdenominatorFilterfilterです。 分母となる指標をdenominatorFilterに、分子となる指標をfilterに設定することとで、二つの指標の比率を計算することができます。 そしてthresholdValueに閾値となる0.5(50%)を設定します。

JSONファイルが作成できたら、下記のコマンドを実行してアラートポリシーを作成します。

$ gcloud alpha monitoring policies create --policy-from-file="アラートポリシーを記述したJSONファイル名"

アラートの確認

アラートポリシーを作成したので、実際にアラートが飛ぶか確認してみます。 まずアラートの条件となるsuccessとfailureのログを2つずつ作成します。

gcloud logging write my-test-log "success"
gcloud logging write my-test-log "failure"

アラート画面を見ると下記のようにインシデントが発生しています。

インシデントの詳細を見ると比率が100%になり、閾値を超えていることを確認できます。

以上、Google Cloudでログの比率によってアラートを発生させる方法でした。