最初のTelemetry SQLクエリを書く
既知の合成行から答えを検証できる質問から始めます。このウォークスルーでは、 api_request_completed 前の開始手順で作成したテーブル。
最近の行を検査する
集計ではなくイベント粒度から始めます。
SELECT
timestamp_utc,
request_id,
route_template,
status_code,
latency_ms,
release,
environment
FROM api_request_completed
WHERE environment = 'development'
ORDER BY timestamp_utc DESC
LIMIT 100;
合成物を見つける req_demo_001 行。不足している場合、または入力が間違っている場合は、に戻ってください。 イベントの取り込みとスキーマの検証.
リクエスト量とエラーを計算する
生の行が正しいように見えたら、ルート粒度で集計します。
SELECT
route_template,
COUNT(*) AS requests,
SUM(CASE WHEN status_code >= 500 THEN 1 ELSE 0 END) AS server_errors,
ROUND(
100.0 * SUM(CASE WHEN status_code >= 500 THEN 1 ELSE 0 END)
/ NULLIF(COUNT(*), 0),
2
) AS server_error_pct
FROM api_request_completed
WHERE timestamp_utc >= now() - INTERVAL '24 hours'
AND environment = 'development'
GROUP BY route_template
ORDER BY requests DESC;
分母は、同じ時間枠内の各ルートのリクエスト量です。 NULLIF 後でクエリが結合または空のバケットで生成されたタイム スパインに適応された場合に、分割を保護します。
ユニットをチェックした後にのみレイテンシーを追加してください
SELECT
route_template,
COUNT(*) AS requests,
approx_percentile_cont(0.5) WITHIN GROUP (ORDER BY latency_ms)
AS p50_latency_ms,
approx_percentile_cont(0.95) WITHIN GROUP (ORDER BY latency_ms)
AS p95_latency_ms
FROM api_request_completed
WHERE timestamp_utc >= now() - INTERVAL '24 hours'
AND environment = 'development'
GROUP BY route_template
ORDER BY p95_latency_ms DESC;
それを確認してください latency_ms は数値であり、パーセンタイルを解釈する前に常にミリ秒単位で測定されます。読む SQL パーセンタイル スパースグループ、近似関数、サンプルサイズの注意について。
保存する前に検証する
成功件数と失敗件数が分かっている小さなフィクスチャを使用してください.予想されるリクエスト数とエラー率を手動で計算し、SQL の結果と比較します。
次の 4 つのことを確認してください。
- 穀物: 1 行は 1 つの完了したリクエストを表します。
- 分母: 再試行と内部トラフィックは意図的に含まれるか除外されます。
- ウィンドウ: 最新の不完全なバケットは完全なバケットと比較されません。
- 寸法: ルート テンプレート、リリース、環境では安定した値が使用されます。
有効な SQL は、間違ったビジネス上の質問に答えることができます。定義と除外をクエリとともに保存します。
続ける
を使用します。 API エラー率レシピ 完全なスキーマ、フィクスチャ、視覚化、アラートの推奨事項については、こちらをご覧ください。接続された合成データベースで練習するには、 SaaS SQL ラボ。次に、次のように続けます 最初のダッシュボードとアラートを作成する.