タイムスライスSLOでDatadogのSLO管理を効率化する

Posted on Dec 27, 2024

はじめに

DatadogのSLOには3種類のオプションがあります:モニターベース SLO (Monitor-based SLOs)、メトリクスベース SLO (Metric-based SLOs)、そして新しく追加されたタイムスライス SLO (Time Slice SLOs)です。

今回は、特にタイムスライス SLOの利便性とメリットについて、具体例を挙げて説明します。


従来の方法: モニターベース SLO

タイムスライス SLOが登場する以前、たとえばNode.jsのExpress APIにおけるレイテンシーSLOを作成する場合、モニターベース SLOを使用して次のように設定していました。以下はTerraformを使った例です。

resource "datadog_monitor" "request_get_latency" {
  name    = "📝 [SLO] Resource Get API has an abnormal latency"
  type    = "query alert"
  message = "Resource Get API latency is above 1 second"
  query   = <<EOT
percentile(last_5m):p95:trace.express.request{resource_name:get_${local.path}} > 1
EOT

  monitor_thresholds {
    critical = 1.0 # 1秒
  }

  evaluation_delay    = 300 # 5分
  require_full_window = false
}

resource "datadog_service_level_objective" "request_get_latency" {
  name        = "🏝️ Get API p95 latency *monitor* SLO"
  type        = "monitor"
  description = "99.9%の時間、Get APIのp95レイテンシーが1秒以下であること。"

  thresholds {
    timeframe = "30d"
    target    = 99.9
  }

  monitor_ids = [
    datadog_monitor.request_get_latency.id
  ]
}

モニターベース SLOでは、SLOを作成する前にモニターの定義が必要です。この手間を軽減するために、タイムスライス SLOが登場しました。


新しい選択肢: タイムスライス SLO

タイムスライス SLOでは、モニターを別途作成する必要がなくなります。Terraformでの記述もシンプルで、以下のように1つのリソースで完結します。

resource "datadog_service_level_objective" "request_get_latency_time_slice" {
  name        = "🏝️ Get API p95 latency *time slice* SLO"
  type        = "time_slice"
  description = "99.0%の時間、Get APIのp95レイテンシーが1秒以下であること。"

  sli_specification {
    time_slice {
      query {
        formula {
          formula_expression = "query1"
        }
        query {
          metric_query {
            name  = "query1"
            query = "p95:trace.express.request{env:production,resource_name:get_${local.path}}"
          }
        }
      }
      comparator             = "<="
      threshold              = 1.0
      query_interval_seconds = 300
    }
  }

  thresholds {
    timeframe = "30d"
    target    = 99.0
  }
}

このように、タイムスライス SLOでは、モニターを介さずに直接SLOを作成できます。コードの簡潔さからも、運用の負担が軽減されることがわかります。


運用画面の比較

タイムスライス SLOの詳細ページを見てみると、Error BudgetやBurn Rateの遷移、Timelineなどの情報が豊富で、運用がさらに効率的になっています。

time slice slo

一方、モニターベース SLOの詳細ページには、右上に「Export to Time Slice SLO」というオプションがあります。このボタンをクリックすると、既存のモニターベース SLOからタイムスライス SLOへの移行が簡単に行えます。

monitor based slo

export to time slice slo


終わりに

今回は、レイテンシーSLOを例に、モニターベース SLOタイムスライス SLOの作成と運用を比較しました。その結果、タイムスライス SLOは設定の簡潔さ、豊富なデータ表示、そして運用効率の観点から非常に優れています。

今後、SLOを作成する際には、タイムスライス SLOを優先的に検討することをおすすめします。