Skip to content

Prometheus Alertmanager クイズ

Prometheus Alertmanager についての理解を確認するためのクイズです。


  1. Alertmanager でアラートが Firing になる前に経る中間状態は何ですか?
    • A) Active
    • B) Pending
    • C) Warning
    • D) Waiting
回答を表示

回答: B) Pending

解説: Prometheus アラートには Inactive、Pending、Firing の3つの状態があります。アラートルールの条件(expr)が満たされると、まず Pending 状態に遷移し、for 句で指定された期間にわたって条件が継続すると、Firing 状態に遷移して Alertmanager に送信されます。この仕組みにより、一時的なスパイクによる不要なアラートを防止できます。


  1. Alertmanager のルーティング設定における group_waitgroup_intervalrepeat_interval の役割を正しく説明しているものはどれですか?
    • A) group_wait: アラートグループの最初の通知を送信する前の待機時間
    • B) group_interval: 同一アラートを再送信する間隔
    • C) repeat_interval: 新しいアラートがグループに追加された際の待機時間
    • D) すべて同じ機能を実行する
回答を表示

回答: A) group_wait: アラートグループの最初の通知を送信する前の待機時間

解説:

  • group_wait: 新しいアラートグループが作成されてから最初の通知を送信するまでの待機時間です。この期間中に同じグループに属する他のアラートを収集し、まとめて送信します。
  • group_interval: 同じグループに新しいアラートが追加されたとき、次の通知を送信するまでの待機時間です。
  • repeat_interval: まだ解決されていない同じアラートを再送信する間隔です。

  1. Alertmanager の Inhibition 機能を正しく説明しているものはどれですか?
    • A) 特定の期間、すべてのアラートを無視する機能
    • B) 特定のアラートが Firing したときに、関連するアラートを抑制する機能
    • C) アラートの重大度を自動的に下げる機能
    • D) 重複するアラートを統合する機能
回答を表示

回答: B) 特定のアラートが Firing したときに、関連するアラートを抑制する機能

解説: Inhibition は、特定の条件のアラート(source)が Firing したときに、関連するアラート(target)を抑制する機能です。たとえば、Node がダウンした場合、その Node に関連するすべての Pod アラートを抑制して、アラートストームを防ぐことができます。Silencing は、特定の期間アラートを無視する別の機能です。


  1. PrometheusRule CRD の次のアラートルールは何を意味しますか?
    yaml
    - alert: HighCPU
      expr: node_cpu_usage > 80
      for: 5m
      labels:
        severity: warning
    • A) CPU 使用率が 80% を超えると、アラートが直ちに Firing する
    • B) CPU 使用率が 80% を5分間継続して超えると、アラートが Firing する
    • C) CPU 使用率が5分ごとに確認され、80% を超えていればアラートが Firing する
    • D) CPU 使用率が 80% を超えてから5分後に、アラート通知が送信される
回答を表示

回答: B) CPU 使用率が 80% を5分間継続して超えると、アラートが Firing する

解説:for: 5m 設定は、Firing 状態に遷移する前にアラート条件(expr)が5分間継続して満たされなければならないことを意味します。条件が最初に満たされると状態は Pending になり、5分間満たされ続けると Firing に遷移して Alertmanager に送信されます。これにより、一時的なスパイクによる不要なアラートを防止できます。


  1. Alertmanager の receiver 設定における send_resolved: true は何を意味しますか?
    • A) 解決済みのアラートも receiver に送信する
    • B) アラートメッセージに解決方法を含める
    • C) アラートを自動的に解決済み状態に変更する
    • D) receiver にアラートを解決する権限を付与する
回答を表示

回答: A) 解決済みのアラートも receiver に送信する

解説:send_resolved: true 設定は、アラートが解決されたとき(条件が満たされなくなったとき)に、receiver に解決通知を送信します。これにより、対応者は問題が解決されたことを把握できます。デフォルト値は receiver の種類によって異なりますが、一般的には有効にすることが推奨されます。


  1. Alertmanager の高可用性設定で、クラスターのメンバー間の状態を同期するために使用されるプロトコルは何ですか?
    • A) Raft
    • B) Paxos
    • C) Gossip
    • D) gRPC
回答を表示

回答: C) Gossip

解説: Alertmanager クラスターは、メンバー間の状態を同期するために Gossip プロトコルを使用します。これにより、Silence 情報と通知ログ(nflog)をすべてのインスタンス間で共有でき、重複したアラート通知を防止します。クラスターを設定する際は、--cluster.peer フラグを使用して他のメンバーを指定します。


  1. 次の Alertmanager ルーティング設定で、severity=criticalteam=infra を持つアラートはどの receiver に送信されますか?
    yaml
    route:
      receiver: 'default'
      routes:
        - match:
            severity: critical
          receiver: 'critical-receiver'
        - match:
            team: infra
          receiver: 'infra-team'
    • A) default
    • B) critical-receiver
    • C) infra-team
    • D) critical-receiver と infra-team の両方
回答を表示

回答: B) critical-receiver

解説: Alertmanager のルーティングはツリー構造で動作し、デフォルトでは最初に一致したルートで処理が終了します。この場合、severity=critical 条件が最初に一致するため、アラートは critical-receiver に送信されます。複数のルートに送信するには、continue: true 設定が必要です。


  1. AlertmanagerConfig CRD の主な目的は何ですか?
    • A) Alertmanager のグローバル設定を定義する
    • B) namespace ごとにアラート設定を分離する
    • C) Prometheus アラートルールを定義する
    • D) Alertmanager クラスターを設定する
回答を表示

回答: B) namespace ごとにアラート設定を分離する

解説: AlertmanagerConfig CRD は Prometheus Operator が提供するリソースで、Alertmanager の設定(receivers、routes、inhibition rules など)を namespace ごとに個別に管理できます。これにより、各チームはそれぞれの namespace 内でアラート設定を独立して管理できます。


  1. Alertmanager で Silence を作成する適切なユースケースではないものはどれですか?
    • A) 計画されたメンテナンス中にアラートを抑制する
    • B) 既知の問題による繰り返しアラートを防止する
    • C) 特定のアラートを恒久的に無効化する
    • D) Deployment 中にアラートを抑制する
回答を表示

回答: C) 特定のアラートを恒久的に無効化する

解説: Silence はアラートを一時的に抑制する機能で、必ず終了時刻を指定する必要があります。アラートを恒久的に無効化するには、アラートルール自体を変更または削除する必要があります。Silence の主なユースケースは、メンテナンス、Deployment、既知の問題の調査などの一時的な状況です。


  1. 次のうち、Alertmanager テンプレートで使用できる有効な Go template 構文ではないものはどれですか?
    • A) {{ .Labels.alertname }}
    • B) {{ if eq .Status "firing" }}Danger{{ end }}
    • C) {{ range .Alerts }}{{ .Labels.severity }}{{ end }}
    • D) {{ .Annotations.description | length > 100 ? substring(0, 100) : .Annotations.description }}
回答を表示

回答: D) {{ .Annotations.description | length > 100 ? substring(0, 100) : .Annotations.description }}

解説: Go template は三項演算子(? :)をサポートしていません。代わりに {{ if }} 文を使用する必要があります。正しい構文は次のとおりです。

{{ if gt (len .Annotations.description) 100 }}
  {{ slice .Annotations.description 0 100 }}...
{{ else }}
  {{ .Annotations.description }}
{{ end }}

Go template はパイプ(|)、条件分岐(if/else)、ループ(range)、組み込み関数などをサポートしています。


追加学習リソース