cURL および HTTP API の例
cURL を使用して、API キーの検証、SDK リクエストの再現、サーバー側スクリプトの自動化、またはアプリケーションにインストルメンテーションを追加する前に障害処理をテストします。
キーを設定する
シークレット値を記録しないシェルでキーをエクスポートします。
export TELEMETRY_API_KEY="YOUR_API_KEY"
取り込みには書き込みスコープのキーを使用し、クエリまたはレポートには別の読み取りスコープのキーを使用します。キーを展開するコマンド周辺のシェル トレースを無効にします。
1 つのイベントを送信する
curl --fail-with-body \
--connect-timeout 2 \
--max-time 10 \
--request POST \
"https://api.telemetry.sh/log" \
--header "Authorization: ${TELEMETRY_API_KEY}" \
--header "Content-Type: application/json" \
--data @- <<'JSON'
{
"table": "api_request_completed",
"data": {
"event_id": "evt_request_101",
"route_template": "/api/projects/:id",
"method": "GET",
"status_code": 200,
"status": "success",
"latency_ms": 184
}
}
JSON
Telemetry が追加 timestamp_utc。 APIキー、認証ヘッダー、Cookie、生のリクエスト本文、プロンプト、顧客の非公開情報をイベントフィールドとして送信しないでください.
互換性のあるバッチを送信する
の data フィールドには配列を指定できます。
curl --fail-with-body \
--connect-timeout 2 \
--max-time 10 \
--request POST \
"https://api.telemetry.sh/log" \
--header "Authorization: ${TELEMETRY_API_KEY}" \
--header "Content-Type: application/json" \
--data @- <<'JSON'
{
"table": "job_completed",
"data": [
{
"event_id": "evt_job_101",
"job_name": "invoice_sync",
"status": "success",
"duration_ms": 912
},
{
"event_id": "evt_job_102",
"job_name": "invoice_sync",
"status": "failed",
"duration_ms": 2401,
"error_type": "provider_timeout"
}
]
}
JSON
すべてのオブジェクトと同じテーブル スキーマとの互換性を維持します。バッチによりリクエストのオーバーヘッドは軽減されますが、1 つの失敗したリクエストによって影響を受けるイベントの数は増加します。
SQLを実行します
curl --fail-with-body \
--connect-timeout 2 \
--max-time 30 \
--request POST \
"https://api.telemetry.sh/query" \
--header "Authorization: ${TELEMETRY_API_KEY}" \
--header "Content-Type: application/json" \
--data @- <<'JSON'
{
"query": "SELECT route_template, COUNT(*) AS requests, ROUND(AVG(latency_ms), 0) AS avg_latency_ms FROM api_request_completed WHERE timestamp_utc >= now() - INTERVAL '24 hours' GROUP BY route_template ORDER BY requests DESC;"
}
JSON
チェックしてください status, data、そして key_order 空ではない結果を仮定する代わりに、フィールドを使用します。
より大きな結果をエクスポートする
非同期 Parquet エクスポートを開始します。
curl --fail-with-body \
--connect-timeout 2 \
--max-time 30 \
--request POST \
"https://api.telemetry.sh/query/async" \
--header "Authorization: ${TELEMETRY_API_KEY}" \
--header "Content-Type: application/json" \
--data @- <<'JSON'
{
"query": "SELECT * FROM api_request_completed WHERE timestamp_utc >= now() - INTERVAL '30 days' ORDER BY timestamp_utc DESC;",
"format": "parquet"
}
JSON
返されたものをポーリングする status_url 同じ認証ヘッダーを持つ。いつ query_status です completedをダウンロードしてください。 download_url。ポーリングを停止する failed 全体的な期限を強制します。
テーブルを検査して検証する
curl --fail-with-body \
--connect-timeout 2 \
--max-time 10 \
"https://api.telemetry.sh/tables/api_request_completed/schema" \
--header "Authorization: ${TELEMETRY_API_KEY}"
合成成功、失敗、再試行、およびタイムアウトのケースを送信します。ダッシュボードまたはアラートを作成する前に、フィールドのタイプ、単位、UTC タイムスタンプ、機密フィールドが存在しないことを確認してください。
再試行および終了コードのポリシー
--fail-with-body 安全な診断のために応答本文を保存しながら、HTTP エラーの場合はゼロ以外で終了します。
- 終了
6: DNS 解決に失敗しました。 - 終了
7: 接続に失敗しました。 - 終了
28: タイムアウト;サーバーはリクエストを受け入れたかもしれませんし、受け入れていないかもしれません。 - HTTP
400: リクエストを修正します。変更せずに再試行しないでください。 - HTTP
401または403: 資格情報を置き換えるか、その範囲を修正してください。 - HTTP
429,502,503、または504: 制限された指数バックオフとジッターを使用して再試行します。
同じものを再利用する event_id 論理的なイベントの場合。使用しないでください --retry-all-errors 重複配信を考慮せずに。