ヒストグラムメトリクスとは?分布を解説
ヒストグラムメトリクスは、値の集合を範囲、すなわちbucketに数え上げることで、その集合がどう分布しているかを記録します。これにより、平均だけでなくパーセンタイルを計算できます。
平均は嘘をつきます。特にレイテンシについては。ヒストグラムは真実を語るメトリクスタイプであり、分布の形状を捉えることで、典型的なユーザーだけでなく最も遅いユーザーが何を体験するかを問えるようにします。ヒストグラムは、本番でもpipelineでも、パフォーマンスを本気で見るうえで中心的な存在です。
ヒストグラムの仕組み
ヒストグラムは値の範囲、すなわちbucketの集合を定義し、いくつの観測値がそれぞれに入るかを数えます。個々の値をすべて保存する代わりに、bucketごとのカウントを保持します。これはコンパクトな要約でありながら、テールを含むデータ全体の形状を依然として捉えます。
なぜ平均では不十分か
平均は分布を1つの数値に押しつぶし、外れ値を隠します。あるサービスは、意味のある割合のリクエストが痛いほど遅くても、良好な平均レイテンシを持ち得ます。ヒストグラムはその詳細を保持するため、遅いテール、つまりユーザーが実際に不満を訴える部分が見えたままになります。
パーセンタイルとテール
ヒストグラムからは、p50、p95、p99といったパーセンタイルのレイテンシを推定できます。p99は最も遅い1パーセントのリクエストの体験を教えてくれ、そこにこそ本当の問題が潜んでいることがよくあります。平均ではなく高いパーセンタイルを追跡することは、成熟したパフォーマンス監視の証です。
bucketと精度
ヒストグラムの精度はbucketの境界に依存します。パーセンタイルはbucket内での補間によって推定されるため、範囲の選び方が悪いと結果がぼやけます。定義を適切に行わなければならない固定bucketを使うシステムもあれば、自動的に適応する手法を使うシステムもあります。いずれにせよ、bucketの設計が主要なトレードオフです。
CI/CDにおけるヒストグラム
ヒストグラムはbuildやdeployのデータに直接適用できます。jobの所要時間やキュー待ち時間の分布をパーセンタイルとして見ると、大半のbuildは速いのに遅いテールが足を引っ張っているかどうかが明らかになります。これは平均では隠れてしまう情報です。p95のbuild時間を観察すると、平均では決して浮かび上がらない問題がしばしば表面化します。
重要なポイント
- ヒストグラムメトリクスは値をbucketに数え上げて分布を捉えます。
- 平均では提供できないパーセンタイルを可能にします。
- p99のような高いパーセンタイルは、ユーザーを苦しめる遅いテールを明らかにします。
- ヒストグラムはbuildやdeployのタイミングデータのテールを露わにします。