Prometheus:メトリックの収集
(セクション: 技術とインフラ)
概要
Prometheusは、HTTP上でターゲットをスクレイピングし、TSDBにシリーズを格納し、PromQLで集計をカウントし、Alertmanagerを介してアラートをトリガーします。iGamingの場合、これはSLOアプローチ(RED/USE、ビジネス支払い指標)、高速p95/p99診断、および自動ソリューション(フリーズ/ロールバック)の基礎です。
1)データモデルとカーディナリティ
メトリック:'name {label1=」v1」、 label2=」v2」} value@timestamp'。
Cardinality=すべてのユニークなラベルセットのパワープロダクト。主要な費用要因。
- 'service'、 'env'、 'region'、 'instance'、 'pod'、 'container'、 'version';
- ドメイン:'route'、 'psp'、 'tenant'(注意!)、'game_provider'。
- 'user_id'、 'session_id'、 random/high cardinal値を入れることはできません。
2)指標の種類
Counter-成長するだけ(例えば'http_requests_total')。
ゲージ-瞬時の値('queue_depth'など)。
ヒストグラム/サマリー-レイテンシ分布。prod-ヒストグラム('histogram_quantle()'とexemplarsをサポート)。
ネイティブヒストグラムは、精度を向上させ、サイズを保存する可変バケットです(利用可能な場所を含む)。
go var httpLatency = prometheus. NewHistogramVec(
prometheus. HistogramOpts{
Name: "http_request_duration_seconds",
Help: "HTTP latency",
Buckets: prometheus. DefBuckets ,//or custom
},
[]string{"route","method"},
)
3)輸出業者と何を測定するか
サービス:コード(Go/Java/Node/Python用SDK)、 RED APIメトリック、ビジネスメトリック(支払い変換)。
システム:node_exporter、 cAdvisor/kubelet。
サードパーティ:DB/キャッシュ (mysqld_exporter、 postgres_exporter、 redis_exporter)、 NGINX/HAProxy、 Kafka/RabbitMQ。
OTelメトリクス:OpenTelemetry Collector→Prometheus Remote WriteまたはPrometheus-receiver→を使用して共通のスタックを作成します。
4)スクレイプとリラベル: ターゲットを接続する方法
基本的な「プロメテウス」yml'
yaml global:
scrape_interval: 15s evaluation_interval: 15s external_labels:
env: "prod"
region: "eu-west"
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['10. 0. 1. 10:9100','10. 0. 1. 11:9100']
- job_name: 'payments-api'
metrics_path: /metrics scheme: https tls_config:
ca_file: /etc/ssl/ca. crt cert_file: /etc/ssl/tls. crt key_file: /etc/ssl/tls. key relabel_configs:
- source_labels: [__address__]
regex: '(.):\d+'
target_label: instance replacement: '$1'
Kubernetesプロメテウス演算子
手動scrape_configsの代わりにServiceMonitor/PodMonitorを使用します。
yaml apiVersion: monitoring. coreos. com/v1 kind: ServiceMonitor metadata: { name: payments-api }
spec:
selector: { matchLabels: { app: payments-api } }
namespaceSelector: { matchNames: [ "prod" ] }
endpoints:
- port: metrics interval: 15s scheme: http relabelings:
- action: replace targetLabel: service replacement: "payments-api"
注釈K8s(演算子なし、簡略化)
yaml metadata:
annotations:
prometheus. io/scrape: "true"
prometheus. io/port: "9102"
prometheus. io/path: "/metrics"
5)貯蔵: TSDB、 WALおよび保持
WAL (Write-Ahead Log)→再起動からの迅速なリカバリ。
圧縮:ブロック圧縮、ディスク/CPUの節約。
保持:7-30日の熱いデータを保って下さい;長期-移動(スケーリングを参照)。
- 「--storage」tsdb。保持しています。時間=15d'
- 「--storage」tsdb。max-block-chunk-segment-size'
- ドライブ:速いSSD/NVMe;不必要にネットワークボリュームを回避します。
6) PromQL: 基礎と頻繁なパターン
レート/irate
promql rate(http_requests_total{route="/deposit"}[5m])
エラーと成功率
promql sum(rate(http_requests_total{status=~"2.. 3.."}[5m]))
/ sum(rate(http_requests_total[5m]))
p95レイテンシ
promql histogram_quantile(0. 95,
sum by (le, route) (rate(http_request_duration_seconds_bucket[5m]))
)
キュー/彩度
promql max(queue_depth{queue="withdrawals"}) by (region)
7)録音ルールとパフォーマンス
前もって重い表現を考え、シリーズとして保存してください。
yaml groups:
- name: api. rules interval: 30s rules:
- record: job:http:request_duration_seconds:p95 expr:
histogram_quantile(0. 95,
sum by (le, job) (rate(http_request_duration_seconds_bucket[5m])))
- record: job:http:success_ratio expr:
sum(rate(http_requests_total{status=~"2.. 3.."}[5m]))
/ sum(rate(http_requests_total[5m]))
プラス:高速ダッシュボード、Prometheus CPUへの負荷が少ない。
8)アラートを送信するSLO(燃焼率)
バーンレートアラート(マルチウィンドウ、マルチバーン)
yaml groups:
- name: slo. payments rules:
- alert: PaymentsSLOFastBurn expr: (1 - job:http:success_ratio{job="payments-api"}) > (1 - 0. 999) 14 for: 5m labels: { severity: "page" }
annotations:
summary: "SLO fast burn"
runbook: "https://runbooks/payments/slo"
- alert: PaymentsSLOSlowBurn expr: (1 - job:http:success_ratio{job="payments-api"}) > (1 - 0. 999) 6 for: 1h labels: { severity: "ticket" }
Alertmanager:サービス/リージョンルーティング、重複抑制、ChatOps。
9)痕跡およびログとの相関
例題を有効にする:ヒストグラムバケットで'trace_id'をクリックできます。
メトリックに「release compare」のラベル'service'、 'version'、 'region'を入れます。
ダッシュボードで-リリースアノテーション(Git SHA/version)。
10)スケーリングおよび長期貯蔵
フェデレーション:上部Prometheusは下から集計されます(ジョブ/ラベルフィルタによる)。
リモート書き込み:長期ストレージバックエンド/クラスタ(Thanos/Cortex/Mimir)に行を送信します。
長所:無限保持、水平スケーリング、グローバルビュー。
短所:操作が難しい、コスト。
機能によるシャーディング:システムメトリクス、ビジネス、セキュリティのための個別のインスタンス。
11)安全性
Prometheus ↔/Alertmanager/remote_writeターゲット間のTLS/mTLS。
/targetsとAPIの基本/トークン認証(プロキシゲートウェイの前)。
RBAC: UI/シリーズへのアクセスをロールごとに制限します。プライベートラベルを非表示にします。
PII衛生:メトリックでPIIを記述しないでください。ハッシュ/エイリアスを使用します。
12) Kubernetesプラクティス
Prometheus Operator: CRD (ServiceMonitor、 PodMonitor、 Alertmanager、 Prometheus)。
kube-state-metrics+cAdvisor→クラスタの全体像。
Tainingsとresources:監視用の専用ノード;CPU/RAMの制限。
ノイズ低減:「生産」名前空間のラベルセレクター、可能な限りパディングscrape_interval。
13)ビジネスメトリクスと製品
Платежи: 'payments_success_total {psp、 currency}'、 'payment_conversion_ratio'、 'ttw_seconds_histogram'。
ゲームのアクティビティ:ベット/分、ゲージとしてセッションを保持、ドロップオフ時にエラー。
リスク/詐欺:速度異常/地理のトリガー。別にロギング、メトリクス-集計。
14)コストとパフォーマンス(FinOps)
カーディナリティ(新しいラベルを追加する前のタグレビュー)を制御します。
非クリティカルターゲットのヒストグラム/レアエクスポート→'scrape_interval'のサンプリング。
長期的なストレージ・バックエンドでのダウンサンプリング。
ダッシュボードキャッシングとレコーディングルールへの幅広い依存。
15)「ファストスタート」の例"
アプリケーションでのREDエクスポート(Python)
python from prometheus_client import Counter, Histogram, start_http_server reqs = Counter('http_requests_total','', ['route','method','status'])
lat = Histogram('http_request_duration_seconds','', ['route','method'])
start_http_server(8000)
def handle(req):
with lat. labels(req. route, req. method). time():
status = app(req)
reqs. labels(req. route, req. method, str(status)). inc()
return status
しきい値アラートp95
promql alert: HighLatencyP95 expr: histogram_quantile(0. 95,
sum by (le, service) (rate(http_request_duration_seconds_bucket[5m]))) > 0. 25 for: 10m labels: { severity: "page", service: "api" }
16)実装チェックリスト
1.基本メトリック(RED/USE)とドメインメトリックのセットを定義します。
2.カーディナリティによるラベルとガイドのコーディネート。
3.スクレイプ/ServiceMonitor、 TLS/mTLS、リラベルを設定します。
4.キーパスと例題のヒストグラムを含める。
5.p95、成功率、ビジネス集計の記録ルールを作成します。
6.SLOアラート(バーンレート)を入力し、Alertmanagerを応援します。
7.ダッシュボードを上げる:サービスマップ、リリースの比較、支払い。
8.フェデレーション/remote_writeと保持について決定します。
9.アクセス制限(RBAC)、 PIIの不在を確認します。
10.ランブックとゲームデイチェックを有効にします。
17)アンチパターン
カーディナリティが高いラベル(user/session/request_id)。
キーSLOのヒストグラムの代わりに要約→'histogram_quantle'はありません。
フィルタリング/回転→コストとノイズの増加なしに「すべての行」をスクラッチします。
SLO→alert-phatigのない生のメトリックに関するアラート。
録音ルールの欠如→「重い」ダッシュボード。
TLS/mTLSのないメトリクスを信頼する→なりすまし/漏洩のリスク。
概要
Prometheusは、正確なヒストグラム、安定した集計、SLOアラートのクリア、マルチリージョンマップへのスケーリングなど、iGamingプラットフォームの目標バインドの可視性を提供します。ラベルの規律、正しい録音ルール、トレース/ログリンク、思慮深いストレージアーキテクチャは、ピーク時でも迅速なリリースと予測可能なp99を提供します。