SQL レイテンシとディストリビューションのパーセンタイル
平均は分布を 1 つの数値に圧縮します。これは合計や広範な傾向には役立ちますが、インシデント中に重要な遅いエクスペリエンスが隠れてしまう可能性があります。パーセンタイルは別の質問に答えます。p95 は、観測値の約 95 パーセントがそれ以下に該当する値です。
分布内の複数のポイントをクエリする
Telemetry は Apache DataFusion SQL を使用します。使用する approx_percentile_cont 実際のパーセンタイル推定値については、次のようになります。
SELECT
route_template,
COUNT(*) AS requests,
approx_percentile_cont(duration_ms, 0.50) AS p50_ms,
approx_percentile_cont(duration_ms, 0.95) AS p95_ms,
approx_percentile_cont(duration_ms, 0.99) AS p99_ms,
MAX(duration_ms) AS maximum_ms
FROM api_request_events
WHERE timestamp_utc >= now() - INTERVAL '24 hours'
GROUP BY route_template
HAVING COUNT(*) >= 100
ORDER BY p95_ms DESC;
リクエスト数を結果に保持します。小さなグループからのパーセンタイルは不安定であり、グループにほんの一握りの観測値しか含まれていない場合、p99 は意味がありません。近似結果も人為的な小数精度で表示すべきではありません。
ランクだけでなく形状を解釈する
p50、p95、および p99 がすべて同時に上昇すると、ワークフロー全体が変化した可能性があります。 p99 が増加しているのに p50 が安定している場合、リクエストのサブセットでテール レイテンシが発生しています。最大値は調査には役立ちますが、1 つの外れ値によって通常のパフォーマンスが定義されるべきではありません。
アクションを変更できるディメンション (ルート テンプレート、依存関係、リリース、リージョン、または制限された操作名) によってのみグループ化します。生の URL と制限のないクエリ テキストは、比較が難しく、機密性の高い値が公開される可能性がある高カーディナリティのグループを作成します。
パーセンタイルはパーセントではありません。 p95 レイテンシが 800 ミリ秒であっても、リクエストの 95 パーセントが遅いという意味ではありません。これは、約 95% がその値以下で完了したことを意味します。この数値を、レビューされた目標および明示的な単位と組み合わせます。
を使用します。 API レイテンシ レシピ, 依存関係レイテンシのレシピ、または キュー待機レシピ テストされた例については。の 分布可視化ガイド ヒストグラムが 3 パーセンタイル ポイントよりも明らかな場合について説明します。