可観測性 — ログ・メトリクス・トレースの実務
深夜に鳴った電話に、本番へ入り直さずに答えられるか。構造化ログ・メトリクスのカーディナリティ・分散トレースの伝播・SLOとエラーバジェットを前提知識ゼロから積み上げ、「気づく→絞る→確定させる」という一本の線に並べ直します。
外から中を当てる
深夜にスマホが鳴ります。「決済が通らない」。あなたはサーバーの前にいませんし、そのサーバーが物理的にどこにあるのかも分かりません。手元にあるのは、システムが動いている最中に自分から吐き出しておいた記録だけです。
医者の仕事に似ています。体を開いて中を見るのではなく、体温・血圧・血液検査と問診だけで、内側で何が起きているかを言い当てる。可観測性(observability)はもともと制御工学の言葉で、外から観測できる出力だけで内部の状態を推定できる性質を指します。ソフトウェアではこう言い換えられます — 「本番に入り直して調べ直さなくても、すでに出ている記録だけで原因まで辿り着けるか」。
よく似た監視(monitoring)との違いは、質問を誰がいつ作るかです。監視は事前に決めた質問に答え続ける仕組みで、「CPUが80%を超えたら鳴らす」のように人が先に質問を用意します。可観測性は予想していなかった質問に、後から答えられる性質です。「日本のAndroidユーザーが、決済APIの再試行のときだけ遅い」— こんな切り口を障害の前に思いつくことはできません。
だから可観測性はツールの名前ではなく、アプリ側の設計の話です。何も吐いていないアプリは、どれだけ高価な基盤に載せても何も見えません。
3つの信号
- ログ — 出来事1件の記録。「12:03:41 ユーザーAの決済が失敗」
- メトリクス — 数値の時系列。「12:03台の決済失敗は7件」
- トレース — 1件のリクエストが通った経路と、区間ごとの所要時間
買い物に例えると、ログはレシート(明細は完全だが枚数が膨大)、メトリクスは家計簿のグラフ(軽くて何年分でも眺められるが「なぜ」は書いていない)、トレースは宅配便の追跡番号(1個の荷物がどの営業所で何分止まったか)です。
3つ揃える理由はコストの形が違うことにあります。メトリクスは送る前に集約されるので、リクエストが100倍になっても系列の本数が同じなら保管量はほとんど増えません。ログは出来事の数にそのまま比例します。トレースはリクエスト数×1リクエストあたりの区間数で増えるので、放置すれば本番トラフィックと同じ勢いで膨らみます。
使い分けは一本の線でつながります。気づくのはメトリクス、絞り込むのはトレース、確定させるのはログ。以下の細部は、全部この順番の補強として読めます。
メトリクスは掛け算で増える
メトリクスの最小単位は系列(time series)で、「名前+ラベルの組」1通りにつき1本です。型は4つ覚えれば足ります。counter は単調増加する累計で、値そのものではなく傾きに意味があります。gauge は上下する現在値(キュー長、メモリ使用量)。histogram は値をバケットに数え上げた分布で、レイテンシはこれを使います。summary はクライアント側で分位数まで計算してから送る形式です。
問題は、系列が何本になるかです。
が系列の本数、 がラベルの個数、 が 番目のラベルが取りうる値の個数です。つまり、ラベルごとの「取りうる値の数」を全部掛け合わせた数だけ、裏でグラフの線が作られるということ。ラベルを1つ増やすのは行を1本足すことではなく、いま持っている全部の組み合わせを、その新しいラベルの値の数だけコピーすることです。足し算ではなく掛け算、というのがこの式の全てです。method 5種 × status 6種 × endpoint 40種 × pod 20個なら、たった1つのメトリクス名から24,000本が生まれます。ここに user_id を足せば、ユーザー数の分だけ丸ごと掛かります。
平均は嘘をつく
平均レイテンシ200msという数字は、ほとんど何も言っていません。1000件のうち990件が50ms、残り10件が15秒かかっていても、平均は200ms付近に収まります。怒っているのは、その10件を踏んだユーザーです。
だから分布を見ます。p99が800msとは「100件に1件は800ms以上」という意味です。ここに、1つの操作が裏で何度もAPIを呼ぶ構造が効いてきます。
は「その操作のどこか1回でも遅い呼び出しを踏む確率」、 は1回が遅くなる確率、 は1操作あたりの呼び出し回数です。つまり、1回も外れを引かずに済む確率を呼び出し回数分だけ掛け合わせ、残り全部を「どこかで1回は踏んだ」側に数える、と読めば十分です。独立と仮定すると ・ で約63%。「100件に1件」は、100回呼べば「3人に2人」になる。 末尾のレイテンシが致命的だと言われるのは、この掛け算のためです。
コメント
コメントにはログインが必要です