Click-Opsダッシュボードの問題
チームには200のダッシュボードがあります。誰が所有しているかわかりません。半分は壊れています。残りは昨日の現実を示しています。
これはclick-opsの負債であり、コードの負債よりも早く蓄積します。
Observability as Code
すべてのダッシュボード、アラート、SLO定義は、サービスコードと並んでGitリポジトリに保存されるべきです。
resource "datadog_dashboard" "api_gateway" {
title = "API Gateway - Golden Signals"
description = "Owner: @platform-team"
layout_type = "ordered"
widget {
timeseries_definition {
title = "Request Rate (per second)"
request {
q = "sum:api.requests{service:gateway}.as_rate()"
}
}
}
widget {
timeseries_definition {
title = "P99 Latency"
request {
q = "max:api.latency{service:gateway}.as_count()"
}
}
}
}
Enter fullscreen mode Exit fullscreen mode
これはサービスのmain.tfの隣に置かれます。サービスをデプロイするとき、observabilityも一緒にデプロイします。
複利効果のある利点
1. 所有権が明確。 ファイルにはCODEOWNERSエントリがあり、PRにはレビューが必要です。
2. ダッシュボードが自動更新される。 サービス名を変更すると?Terraformのリファクタリングがすべてのダッシュボードに反映されます。
3. ドリフト検知。 誰かがUIで「save as」をクリックしてダッシュボードが同期されなくなった場合、terraform planが検知します。
4. 本番投入前のレビュー。 アラートの変更はPRレビューを経由します。「誰がこの閾値を設定したのか?」がなくなります。
プラットフォーム別のツール
datadog:
provider: DataDog/datadog
resources: datadog_monitor, datadog_dashboard, datadog_slo
grafana:
provider: grafana/grafana
resources: grafana_dashboard, grafana_alert_rule
prometheus:
approach: YAML files in Git, deployed by ArgoCD
resources: alert rules, recording rules
new_relic:
provider: newrelic/newrelic
resources: newrelic_alert_policy, newrelic_dashboard
Enter fullscreen mode Exit fullscreen mode
1つの信頼できる情報源を選びましょう。混在させないでください。
実例
サービス名を受け取り、完全なobservabilityスタックを生成するモジュールがあります。
module "service_observability" {
source = "./modules/observability"
service_name = "payment-processor"
team_slack = "#payments"
severity_map = {
error_rate_pct = 1.0
p99_latency_ms = 500
saturation_pct = 80
}
slo_targets = {
availability = 0.9995
latency_p99 = 0.99
}
}
Enter fullscreen mode Exit fullscreen mode
1回のモジュール呼び出しで、3つのダッシュボード、8つのアラート、2つのSLO、Slackチャンネルの紐付け、PagerDutyのエスカレーションポリシーが作成されます。
一番難しい部分
コードは簡単です。難しいのは:
- 既存のclick-opsダッシュボードの移行 — 2週間を見積もる
- エンジニアにUIではなくYAML/HCLを編集させる — 3ヶ月間のリマインダーを見積もる
- UI編集のブロック — 一部のツールではダッシュボードを読み取り専用に設定できます
- アラート変更のレビュー — PRレビュアーには文脈が必要です
避けるべきアンチパターン
エンジニアが欲しいカスタムチャートごとにTerraformを書かないでください。誰も理解できない500行のダッシュボードモジュールにつながります。
代わりに、標準ダッシュボード(golden signals、RED/USE、SLO burn rate)をモジュールとして定義しましょう。エンジニアが独自のカスタムダッシュボードをUIで追加したい場合は追加させても構いませんが、「explore-only」(アラート対象外)とマークしてください。
コアobservability = コード。実験的な探索 = UI。
移行戦略
週1:1つのサービスを選び、そのダッシュボードをTerraformに変換
週2:Terraformにアラート+SLOを追加
週3:UI版を削除
週4:パターンからモジュールを作成
2ヶ月目:さらに10のサービスに展開
3ヶ月目:すべての新規サービスにモジュールの使用を必須化
6ヶ月後にはclick-opsの負債はなくなり、observabilityは再現可能になります。
Written by Dr. Samson Tanimawo
BSc · MSc · MBA · PhD
Founder & CEO, Nova AI Ops. https://novaaiops.com
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.