インフラ用語集へ戻る

運用・監視 / 観測性

カーディナリティとは

Cardinality。メトリクスやログのラベル値の組み合わせ数です。多すぎると監視基盤の負荷や費用が急増します。

用語集内のカードを見る

詳細な図解

ラベル設計と時系列数の増え方
メトリクス値を収集
ラベルmethod/statusなどを付与
時系列数組み合わせごとに系列化
監視基盤保存容量とクエリ負荷へ影響
  • user_idやrequest_idをラベルにしない
  • URLはルートパターン化する
  • 追加前後で系列数を比較

この記事で学べること

カーディナリティを、定義だけで終わらせず、現場で出てくる場面、確認材料、見落としやすい点、関連語とのつながりまで順に確認できます。

  1. カーディナリティとは何か
  2. 現場で問題になる場面
  3. 確認する材料
  4. よくある誤解
  5. 運用での設計方針

カーディナリティとは何か

カーディナリティは、メトリクスやログのラベル値の組み合わせ数です。Prometheusのような時系列監視では、ラベルの組み合わせごとに時系列が増えるため、カーディナリティが高いと保存容量、メモリ、クエリ時間、費用に直結します。

たとえばhttp_requests_totalにmethodとstatusだけなら組み合わせは少なめです。しかしuser_id、request_id、full_urlのような値をラベルに入れると、リクエストごとに時系列が増え、監視基盤が急激に重くなります。

現場で問題になる場面

OpenTelemetryを導入した直後、アプリチームが便利なラベルを追加した直後、ログからメトリクスを作り始めた直後に問題化しやすいです。ダッシュボードを詳しくしたつもりが、監視基盤のコスト増やクエリ遅延を招くことがあります。

障害時には、監視基盤そのものが重くなり、見たいメトリクスが見えないという二次被害も起きます。

確認する材料

確認では、メトリクス名ごとの系列数、ラベル一覧、値の種類、増加傾向、保存期間、クエリ頻度を見ます。Prometheusなら高カーディナリティのメトリクスを上位から洗い出し、不要なラベルを削るのが基本です。

  • user ID、session ID、request IDをラベルに入れていないか確認する。
  • URLは生値ではなくルートパターンで持つ。
  • ラベル追加前後で時系列数と費用を比較する。

よくある誤解

ラベルが多いほど分析しやすい、とは限りません。検索したい情報はログへ、集計したい情報はメトリクスへ、という使い分けが必要です。

また、カーディナリティは単なる技術制約ではありません。監視費用、障害時の調査速度、保存期間、個人情報混入のリスクにも関係します。

運用での設計方針

カーディナリティを管理するには、メトリクス命名規則、許可ラベル、禁止ラベル、レビュー手順を決めます。新しいラベルを追加するときは、値の種類がどれくらい増えるかを見積もり、必要ならログやトレースで代替します。

関連語はメトリクス、Prometheus、OpenTelemetryです。観測性を高めるほどデータ量は増えるため、何を見るためのラベルなのかを常に説明できる状態にしておくことが大切です。

関連語

同じ主要カテゴリの用語

運用・監視の学習順

同じ主要カテゴリの用語をまとめて確認できます。現在の用語を起点に、前後の用語へ進むと文脈を保ったまま読み進められます。

InfraEngKit内の関連機能