Skip to content

[検討]GCP Datastreamのログの監視

Issue

https://fastdoctor.atlassian.net/browse/SRE-959

Datastreamの転送ができてるかの監視がログからしか拾えなさそう。

gcp.datastream.stream.bytes_count
gcp.datastream.stream.event_count
gcp.datastream.stream.freshness
gcp.datastream.stream.latencies.avg
gcp.datastream.stream.latencies.samplecount
gcp.datastream.stream.system_latencies.avg
gcp.datastream.stream.system_latencies.samplecount
gcp.datastream.stream.total_latencies.avg
gcp.datastream.stream.total_latencies.samplecount
gcp.datastream.streamobject.bytes_count
gcp.datastream.streamobject.event_count

ログ監視の方式を検討したい。

検討内容

Datadogで監視する場合は作成物が多く管理対象が増えたりコストがかかりそう。

また上記を監視する仕組みも必要になりそう。

ログ監視はdatadogを使わずにgcpのアラート機能使って直接Slack通知させるのがいいかもしれない。

評価項目ログ転送 & datadog監視gcpアラートポリシー
作成が容易
作成物が少ない
料金の安い
運用コストの低い

ログ転送 & datadog監視

  • 作成物

    • logルーター
    • pub/sub
      • kms
    • dataflow
      • サービスアカウント
      • SecretManager
      • VPC
        • FW
      • GCSバケット
    • Datadog
      • 監視モニタ
  • コスト

  • 作成手順

  • メリット

    • Datadogで監視が統一できる
    • Datadogでログの分析がしやすい
    • Pub/Subでメッセージ確認したり順序指定や保持期間の設定ができる
    • Dataflowのスペックを上げれば転送時間がよりタイムリーになるかも?
  • デメリット

    • 検討・設計事項が多くできるまで時間がかかる
    • 作成物が多く運用管理対象が増える
    • 構成が煩雑
    • ログ転送を監視する仕組みが必要になる
    • 今回はDatastreamのログだけなので比較的コストが大きい(監視対象が多いほどコストメリットがある)

gcpアラートポリシー

  • 作成物
    • ログ指標(ログのフィルタする)
    • アラートポリシー
  • コスト
    • datadog構成との差異でいくとアラート部分のみ。
    • アラート ポリシー条件あたり月額 $1.50. 指標アラート ポリシー条件のクエリによって返される 1,000,000 件の時系列ごとに $0.35
    • https://cloud.google.com/stackdriver/pricing?hl=ja
    • もし将来的にGCPのサービス増えるなら比例してコストが上がっていきそう
  • メリット
    • 作成が比較的はやい
    • 作成物が少なく管理コストもそこまで増えなさそう
    • 構成がシンプル
    • 比較的コストが少ない
  • デメリット
    • Datadogで統一できずGCPでもアラートがあるので認知負荷になりそう
    • Datadog上でのログの分析ができない(GCPで確認するための学習が必要)
  • 作成手順
  • 検証して通知できた。
    • ステータス変わってログ自体はすぐに出力されるが、タイムウィンドウが10分だと検知・アラートまで時間かかるので最初はもう少し短めで5分くらいでいいかも

フィルタ

`(severity="ERROR" AND jsonPayload.context="CDC") OR (severity="ERROR" AND jsonPayload.eventCode="STREAM_STATE_CHANGED")`
設定値エクスポート
{
  "name": "projects/fdt-sre-dev/alertPolicies/6647143076577420251",
  "displayName": "datastream-status-check",
  "documentation": {
    "content": "test",
    "mimeType": "text/markdown",
    "subject": "datastream-status-error"
  },
  "userLabels": {},
  "conditions": [
    {
      "name": "projects/fdt-sre-dev/alertPolicies/6647143076577420251/conditions/7711321040218244280",
      "displayName": "datastream-status-check",
      "conditionThreshold": {
        "aggregations": [
          {
            "alignmentPeriod": "300s",
            "crossSeriesReducer": "REDUCE_SUM",
            "perSeriesAligner": "ALIGN_SUM"
          }
        ],
        "comparison": "COMPARISON_GT",
        "duration": "60s",
        "filter": "metric.type=\"logging.googleapis.com/user/datastream-error-log\"",
        "trigger": {
          "count": 1
        }
      }
    }
  ],
  "alertStrategy": {
    "notificationPrompts": [
      "OPENED",
      "CLOSED"
    ]
  },
  "combiner": "OR",
  "enabled": true,
  "notificationChannels": [
    "projects/fdt-sre-dev/notificationChannels/15624255533568098089"
  ],
  "creationRecord": {
    "mutateTime": "2025-01-16T03:10:34.935968375Z",
    "mutatedBy": "takahiro.oga@fdteam.jp"
  },
  "mutationRecord": {
    "mutateTime": "2025-01-16T04:13:12.130750897Z",
    "mutatedBy": "takahiro.oga@fdteam.jp"
  },
  "severity": "CRITICAL"
}

フィルタされるログのサンプル

ログエクスプローラ