Observability(オブザビリティビリティトレースサンプリング)
1)なぜ観測可能か
観測可能性(O11y)は3つの質問に答えます:何が起こっているのか、なぜ、それを修正する方法。それは4つの信号に依存しています:- メトリクス(集計、迅速な反応);
- ログ(詳細と鑑識);
- トレース(クロスカット因果関係);
- プロファイル(prodモードでのCPU/ヒープ/ロック競合)。
キー:信号の相関+テレメトリー経済学(サンプリング、保持、圧縮)。
2)信号マップと原則
2.1 RED/USE
RED (API用):Rate (RPS)、 Errors(%5xx/4xx重要)、Duration (p50/p95/p99)。
USE(リソース用):使用率、彩度、エラー(NIC、 CPU、ディスク、キュー)。
2.2製品不変量
SLOを定義する(例:"p95 latency '/v1/payments '≤ 300ms、誤った予算0。30日で5%")。アラートは、SLOに違反または焼失した場合にのみ「叫ぶ」必要があります。
2.3コンテキスト
W3C Trace Context ('traceparent'、 'tracestate')と手荷物を実装して、それら/ビジネス属性(例えば。'tenant'、 'region'、 no PII)。
3)オブザビリティアーキテクチャ
SDK/auto-instrumentation: OpenTelemetry (OTel) in services (HTTP/gRPC/DB/clients)。
バスとしてのOTel Collector:受信→濃縮→サンプリング→エクスポート(Prometheus、 Tempo/Jaeger、 Loki/ELK、 ClickHouse)。
- メトリクス:Prometheus/Mimir/VictoriaMetrics;
- トレイル:テンポ/イェーガー/ジプキン;
- ログ:Loki/ELK/ベクトル→S3+deshevoyeストレージ;
- プロフィール:Pyroscope/Parca。
- 相関:サービスグラフ、例示、p99グラフから特定のトレースへの遷移。
4)トレース・サンプリング: 戦略
4.1ヘッドベースのサンプリング
シンプルで安価な実装(SDK/ingress)。
短所:まれなエラー/遅いクエリが見つからない可能性があります。
とき:高いRPS、厳格な予算、予測可能なシェアが必要です(例えば、1-5%)。
4.2テールベースのサンプリング
決定は、スパンの終了後にコレクターで行われます。
エラー、p99、特定のルート/テナント:異常を選択することが保証されます。
短所:バッファリング、難しく、より高価。
いつ:「意味のある」トレイルが適度なコストで必要です。
4.3結合されたモデル
グローバルヘッド1-5%、およびテールルール:「常にエラー/スロースパンを保存する」、「カナリアトラフィックの50%のサンプル」、「インシデントで支払いパスのすべてのトレースを保存する」。
5)動的サンプリングおよびテレメトリー予算
Budget-aware: hold volume ≤ N trails/min;超過した場合は、しきい値を上げます(たとえば、p99のみを選択します。5+、エラーのみ)。
ルート/テナントによるルール:重要なエンドポイント/テナント-より大きなシェアを持つ。
適応ウィンドウ:バースト→一時的にエラー/スローレートを増加させます。
Cardinality Reduction:ユーザーエージェント、IP/ASN、スカッシュスタックトレース、マスクの秘密を正規化します。
6)構成(参照)
6.1 OpenTelemetry Collector-テールサンプリング(yaml-fragment)
yaml receivers:
otlp: { protocols: { http: {}, grpc: {} } }
processors:
batch: { send_batch_size: 8192, timeout: 2s }
tail_sampling:
decision_wait: 5s num_traces: 100000 expected_new_traces_per_sec: 5000 policies:
- name: always-error type: status_code status_code: { status_codes: [ERROR] }
- name: slow-endpoints type: latency latency: { threshold_ms: 300 } # p95 цель
- name: important-routes type: string_attribute string_attribute: { key: http. target, values: ["/v1/payments", "/v1/payouts"] }
- name: tenant-eu1 type: string_attribute string_attribute: { key: tenant, values: ["eu-1"] }
- name: probabilistic-default type: probabilistic probabilistic: { sampling_percentage: 5. 0 }
exporters:
otlphttp/tempo: { endpoint: http://tempo:4318 }
prometheus: { endpoint: "0. 0. 0. 0:9464" }
service:
pipelines:
traces:
receivers: [otlp]
processors: [batch, tail_sampling]
exporters: [otlphttp/tempo]
6.2プロメテウス-例(断片)
アプリケーションで、ヒストグラムを記録するときに、'trace_id'で例題を追加します。Grafanaでは、「針」をクリックするとトレースにつながります。
yaml scrape_configs:
- job_name: api scrape_interval: 10s honor_labels: true static_configs: [{ targets: ["api:9100"] }]
exemplar_limit: 10
6.3 Loki-ログのコストを削減
ラベルは安定しているだけです('service'、 'env'、 'region'、 'route_class')。
高いcardinality (request_id、 user_id)-ペイロードで、しかしredactionと。
「成功した」InfoLogsをサンプルし、エラー/警告を保存します。
6.4 Jaeger/Tempo-保持とインデックス
生のトレイルを3〜7日間保存し、集計/対称性を長くします。
安価なストレージ(S3互換)で寄木細工/ブロックを有効にし、インデックスはコンパクトです。
7)トレースのシミュレーション
7.1ネーミングと属性
「サービス」名前'、'サービス。バージョン'、'deployment。environment'。
'http。メソッド'、'http。ルート'、'http。ターゲット'、'http。status_code'、ネット。ピア。名前'。
PIIのないビジネス属性:'tenant'、 'region'、 'payment_provider'、 'game_id'。
7.2イベントとコネクション
スパンイベント:重要なポイント(DBトランザクションの開始、リトレイ、回路オープン、キャッシュミス)。
リンク:zapros→vebkhuk/sobytiyeコミュニケーション;EDAとoutbox/inboxに便利です。
7.3つのインスタンス
レイテンシ/サイズヒストグラムに'trace_id'を使用した例を追加します。
8)メトリクス: 何とどのように
8.1テクニカル
ルート/テナント/プロバイダー(PSP、 KYC)によるRED。
その他:'db_connections_in_use'、 'http_client_in_flight'、 'queue_depth'。
安定化:リトライ、タイムアウト、回路オープン/ハーフオープン、レートリミットヒット。
Go/Java/Pythonランタイム:GCは一時停止、ヒープ、セーフポイント、GIL遅延。
8.2ビジネスメトリクス
登録/ログイン/入金/結論、変換、失敗3DS/KYC、チャージバック比。
重要な機能:タイムツーウォレット、成功率ペイアウト。
8.3カーディナリティとストレージ
明示的なバケットを持つヒストグラム(例:'[50,100,200,300,500,1000,2000] ms')。
カーディナリティの高いマーク(生のuser_id、 request_id)は避けてください-ログ/トレイルにそれらを取ります。
9)ログ: 標準と相関
フォーマット:JSON+必須キー('timestamp'、 'level'、 'message'、 'trace_id'、 'span_id'、 'service'、 'env')。
編集:マスクPAN、トークン、PII。
サンプリング: 'error/warn'の100%、 'noisy'パスの'info'の5-20%
トレースへのバインド-'trace_id'。文字列のログ→「pivot」をトレースし、その逆も同様です。
10)販売のプロファイリング
CPU/heap/alloc/lockの連続プロファイリング(Pyroscope/Parca)を有効にします。
ホットスタックとp99ピークを相関させる。7-14日のために保って下さい。
11) SLO/欠陥予算の警告
SLOアラート:「誤った予算はX%/時間よりも速く費やされます」(予測アラート)。
症状、原因ではありません:CPUではなく、クライアントレベル(RUM/edgeまたはrouteごと)に警告します。
マルチウィンドウ、マルチバーン率:1時間で2%、6時間で5%-2つの条件。
計画劣化時の沈黙:フィーチャーフラグ/カナリア時の閾値シフト。
12)費用および保持
ボリュームクォータ:トレイル≤ N TB/月、ログ-ホット3-7日、コールドS 3 30-90日、メトリクス-ダウンサンプリング(1分→5分→1時間)。
テールルールは、誤って/遅く保ち、× 10〜× 100のボリュームを減らします。
最低コスト信号-メトリック;最高の値で-「正しい」トレイルとプロファイル。
13) Antipatterns
「常に100%トレイル」→コスト、ノイズ、ブレーキの爆発。
キー/マスキングなしでフリーフォーマットでログインします。
無限ラベルメトリック(user_id/ip/full UA)。
'traceparent'/'baggage'は関連付けられません。
SLOの代わりにCPU/ヒープのアラート-利益なしでチャット「バーンズ」。
エラー優先/スローなしで「ランダム1%」サンプリング-貴重なケースを失います。
14)ダッシュボードの例(スケルトン)
APIの概要:RPS、クラス別エラーレート、レイテンシp95/p99(例:クリック可能)、トップルート。
Release/Canary:古い/新しいバージョンのメトリック、アウトリアレート、オープン回路、再試行の比較。
PSP/KYC:プロバイダによる成功率、レイテンシと失敗、支払いエラーとの相関。
Infra:リソースによる使用、キューの飽和、ネットワークの低下。
15) iGaming/Financeの詳細
クリティカルパス(預金/結論):インシデントまたは限られたウィンドウに対してのみ100%トレース。ノーマルモードでは-「すべてエラー/長いレイテンシ」。
地域/テナント:手荷物に「テナント」、「管轄」、「ブランド」を追加します。管轄によってSLOを構築します。
Antifrod/bot filter: リスクAPIソリューションのメトリックとトレース(allow/deny/challenge)、 challenge-pass-rate、 velocity-hits。
監査/コンプライアンス:PIIなしで必要最小限を保ちます。固定ログ-別の回路で。
16) Prod Readinessチェックリスト
- エンドツーエンド伝播('traceparent'、 'baggage')、ログ/メトリック/トレース相関。
- tail-sampling (errors/slow/important routs)+probabilistic defaultを持つOTel Collector。
- RED/USEメトリック、明示的なバケット、exemplars→traceへの遷移。
- SLOと誤った予算アラート(2つのタイムライン)。
- テレメトリー規制と予算;ダウンサンプリングメトリクス;ログのための冷蔵庫。
- 標準化されたJSONログ、redaction PII/secrets。
- 含まれている販売のプロファイリング;インシデントのための「ホット」スタックのダッシュボード。
- カナリアダッシュボードとバージョン比較;「盲点」なしで解放して下さい。
- Runbook:インシデントのサンプリングシェアを一時的に増やす方法。
- Attribute/label naming documentation and high-cardinality inhibition。
17) TL;DR(ドクター)
相関関係の観察を構築する:RED/USE→exemplarsメトリック→trails→logs/profiles。組み合わせたサンプリングでコストを管理:小さなヘッド%+テールルール(エラー、遅い、重要なルート/テナント)。アラート-SLOとエラー予算。保持と心臓を制御下に保ち、OTelコレクターを"中枢神経系として使用してください。"支払い/管轄経路のために-優先テレメトリーと厳格なデータ衛生。