TT Lab
はじめる
学ぶ 学習パス コース

Grafana — ダッシュボードは問いだ

アラートはグラフではなくランブックを指すべきだ

TT Labで続きを見る

一言でいうと

パネルからアラートを作れることと、そのアラートが役に立つことは、別の話です。役に立つかどうかを決めるのはしきい値ではなく、次の2つです: forとrunbook_url。

なぜ必要なのか

5xxの割合は、リクエストが1件失敗しただけで跳ね上がります。トラフィックの少ない明け方なら、1件の失敗が数パーセントになることもあります。しきい値を超えた瞬間に人を呼び出すと、1日に何度も鳴り、人はアラートを無視するようになります。

アラートが死ぬ方法は、いつもこれです。消えるのではなく、無視されます。そして、無視されるアラートチャンネルには、本物の障害も一緒に埋もれます。

forは、この問題を正面から解決します。「10分間超え続けたら」と書けば、一瞬跳ねた値は通り過ぎます。人を呼び出すアラートにforがなければ、そのアラートはいつか必ず無視されます。

どう動くのか

Grafanaのアラートルールは、いくつかのパーツがつながった形をしています。

パーツ 役割
クエリ(A) データソースから値を取得します
しきい値(B) その値が基準を超えているかを判定します
condition どのパーツの結果で判定するか
for どれだけ長く超え続けたら呼び出すか
annotations 人が読むもの: 要約とランブックのアドレス

クエリだけでしきい値がなければ、それはアラートではなくメトリクスです。いつ鳴らすかが決まっていないからです。

そして、これらすべてをファイルで書けます。

apiVersion: 1
groups:
  - orgId: 1
    name: shop-api
    folder: Lab
    interval: 1m
    rules:
      - uid: shopapi5xx
        title: ShopApiHighErrorRate
        condition: B
        for: 10m
        annotations:
          summary: 5xx 비율이 10분 넘게 0.5% 를 넘었습니다
          runbook_url: file:///root/graf/runbook.md

UIで作ったアラートルールは、ダッシュボードとまったく同じ運命をたどります。このGrafanaの中にしか残りません。

アラートにダッシュボードへのリンクを付けると

ページを受けた人がリンクを押すと、グラフが開きます。グラフは何がおかしいのかしか語らず、何をすべきかは語りません。午前3時に必要なのは、絵ではなく手順です。

ランブックは短くてもかまいません。3つの節があれば、たいてい十分です。

節 入れるもの
何が壊れたか このアラートが何を意味するのかを1、2行で。ユーザーに何が起きているのか
最初に見るもの 実際に打てるコマンドやクエリ。「状態を確認する」では役に立ちません
元に戻す方法 原因を探す前に、先に行う対処。たいていは直近のデプロイを元に戻すこと

ランブックをアラートより先に書くほうがよいです。そうすれば、「これが鳴ったとき、人はいま何をするのか」に答えられないアラートが、そもそも作られません。

よくある勘違い

「アラートが多いほど安全だ」という考えは誤りです。アラートが1つ増えるたびに、残り全部の信頼度が少しずつ削られます。予算は件数ではなく注意力です。

「重大度だけ分ければいい」という考えもよくありません。severity: warningを付けて、誰も見ないチャンネルへ送るのは、アラートを作ったのではなく、ログをもう1つ作っただけです。

実務で本当に大切なこと

アラートを作るときに問うことは1つです。「これが鳴ったら、人はいま何をするのか」

答えが「とりあえず様子を見る」なら、それはアラートではなくダッシュボードのパネルです。答えがあるなら、その答えをランブックに書き、アラートがその文書を指すようにします。その2行が、ページを受けた人の最初の5分を変えます。