GH GambleHub

メトリックコレクション:Prometheus、 Grafana

メトリックコレクション: Prometheus、 Grafana

1)目的およびフレーム

メトリックループのタスクは、確実に時系列を収集して保存し、RCA、 SLOアラート、わかりやすいダッシュボードのための高速なPromQLを与えることです。基本ペア:Prometheus(スクレイプ→ストア→クエリ)とGrafana(ビジュアライゼーション、アラート、リリースアノテーション)。長いストレージとグローバルクエリの場合-Thanos/Cortex/Mimir。

2)データモデルとセマンティクス

シリーズ=メトリック名+ラベルのセット(key=value)。
タイプ:カウンター、ゲージ、ヒストグラム、要約(prod-より頻繁にヒストグラム)。

セマンティクス:
  • RED (API): 'rate'、 'errors'、' duration'(ヒストグラム)。
  • [使用]:使用率、彩度、エラー(CPU/RAM/ディスク/ネット)。
  • 命名:'namespace_subsystem_metric_unit'(例:'http_server_requests_total'、 'db_connections_current')。

アンチカーディナリティ:異なるラベル値を最小限に抑えます(ラベルにuser_id request_idはありません)。

3)露出およびサービス発見

輸出者:node_exporter、 kube-state-metrics、 cAdvisor、 DB/Queues (postgres_exporter、 redis_exporter、 kafka_exporter)。
ネイティブサービス:クライアントライブラリ(Go/Java/Node/Python)→'/metrics'。
Service Discovery: Kubernetes、 EC2/ASG、 Consul、静的ファイル。

基本的な「プロメテウス」yml'(スニペット):
yaml global:
scrape_interval: 15s evaluation_interval: 15s scrape_configs:
- job_name: 'kubernetes-nodes'
kubernetes_sd_configs: [{ role: node }]
relabel_configs:
- action: labelmap regex: __meta_kubernetes_node_label_(.+)
- job_name: 'apps'
kubernetes_sd_configs: [{ role: pod }]
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
action: keep regex: "true"
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
target_label: __metrics_path__
regex: (.+)
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_port]
target_label: __address__
regex: (.+)
replacement: $1
ポッドの注釈:
yaml prometheus. io/scrape: "true"
prometheus. io/path: /metrics prometheus. io/port: "8080"

4)ヒストグラムとレイテンシー

SLOに明示的なバケットを使用する:
  • Web/API: '10ms、 25,50,100,200,400,800,1600'
  • 支払い/支払い:5-10秒にテールを追加します。
プロムQL p95:
promql histogram_quantile(0. 95,
sum by (le) (rate(http_request_duration_seconds_bucket[5m]))
)
Exemplars(有効な場合):
promql histogram_quantile(0. 95,
sum by (le, route) (rate(traces_spanmetrics_duration_bucket{route="/withdraw"}[5m]))
)

5)録音ルール

重い要求を減らし、SLIを標準化します。

yaml groups:
- name: api_sli interval: 30s rules:
- record: job:http:success_ratio:rate5m expr: sum(rate(http_requests_total{status!~"5.."}[5m])) / sum(rate(http_requests_total[5m]))
- record: job:http:duration_p95:5m expr: histogram_quantile(0. 95, sum by (le) (rate(http_request_duration_seconds_bucket[5m])))

6) SLOおよび警報(複数の窓の焼跡)

SLO 99。9%成功したRequests/30d。

yaml groups:
- name: slo_burn rules:
- alert: ErrorBudgetBurnHighShort expr: (1 - job:http:success_ratio:rate5m) > (1 - 0. 999) 14 for: 5m labels: { severity: critical }
annotations: { summary: "Fast burn >14x for 5m" }

- alert: ErrorBudgetBurnHighLong expr: (1 - job:http:success_ratio:rate5m) > (1 - 0. 999) 6 for: 1h labels: { severity: critical }
annotations: { summary: "Long burn >6x for 1h" }
Alertmanager(簡略化):
yaml route:
receiver: pager group_by: ["service"]
receivers:
- name: pager slack_configs:
- channel: "#oncall"
send_resolved: true

7)ラベル衛生および経済

ラベル名は安定して標準化されています:'service'、 'env'、 'region'、 'route'、 'code'、 'version'。
Limit cardinality: 'route'のメトリックは'http'パターンを使用する必要があります。route'(完全なURLではありません)。
ロジックサンプリング-トレースで;メトリクス-user_idなし。
リリースプロパティ('service。version')は古いバージョンや新しいバージョンを比較するのに便利です。

8)スケーリングとHA

Prometheus-垂直およびスクレイプターゲット:
  • 2つのプロメテウス(A/B)が同じターゲットをスクレイプします(HA→アラートが複製されます)。
  • Thanos:各PrometheusへのSidecar、グローバルクエリと長期ストレージ(S3/GCS)のためのStore+Query。
  • 代替:Cortex/Mimir(リモート書き込み、マルチテナンシー、水平スケーリング)。
リモート書き込み(例):
yaml remote_write:
- url: https://mimir. example. com/api/v1/push basic_auth: { username: tenantA, password: $MIMIR_TOKEN }
ローカルTSDB保持:
yaml
--storage. tsdb. retention. time=15d
--storage. tsdb. max-block-duration=2h

9) Grafana: ダッシュボード、アラート、注釈

標準ダッシュボード:

1.プラットフォームの概要(SLO/RED、 error-budget)。

2.RouteによるAPI (RPS/5xx/p95、比較'バージョン')。

3.K8sクラスタ/ノード(コントロールプレーン、彩度)

4.DB/キャッシュ/キュー (lag/locks/hit ratio/backlog)

5.Per-Release (before/after、 CIからアノテーションをリリース)。

Grafanaアラート:PromQLでトリガーします。、通話中の回転、ミュート時「リリースウィンドウ」。

注釈:CIは'commit'、 'imageを持つリリースイベントを追加します。tag'、パイプラインへの参照。

10) Kubernetes: 何を測定するか

Control-plane: 'apiserver_request_total'、 etcd leader/fsync、スケジューラ待ち時間。
ワークロード:再起動、'container_cpu_cfs_throttled_seconds_total'、 OOM、保留中/Evicted、 PDB違反。
ネットワーク:ドロップ、conntrack、 'kube-proxy'エラー。
クォータ/リミット:リクエストとリミット、HPA/VPA、ノード飽和。

11) DB/キャッシュ/キュー: キー信号

PostgreSQL/MySQL: 'connections'、 'locks'、 'deadlocks_total'、 'xact_commit/rollback'、レプリケーションラグ。
Redis:ヒット比、'evictions'、レイテンシ'instantaneous_ops_per_sec'。
Kafka/RabbitMQ:消費者の遅れ、unacked、 ISR、ディスク使用量。

PromQLの例:
promql
Queue backlog sum by (topic) (kafka_consumergroup_lag)> 1000

Postgres replication lag max(pg_replication_lag_seconds) > 2

12)安全および複数のテナント

Prometheus/GrafanaへのRBAC、 datasource-permishens。
ingress/betweenコンポーネントのTLS/mTLSチェーン。
テナントの分離:Cortex/Mimirの独立したPrometheusまたはテナントラベル;シリーズおよび要求の限界。
アラート/通知の秘密-禁止(PIIではなくチケットIDを使用)。

13)リリースおよび自動ロールバックとの統合

SLOルール→AnalysisTemplate (Argo Rollouts)またはCI-gate。
バーンアラートがトリガーされると-pause/rollback canary;log/annotation-リリースへのリンク。
ラベル'version'による安定版とカナリア版の比較。

14)典型的なエラー(アンチパターン)

ラベルの制御されていないカーディナリティ(user_id、 URL。完全な、動的キー)。
'env'ラベルなしで同じクラスタでprodとstageをミックスします。
RED/USEのないゲージだけ;p95/p99ヒストグラムなし。
SLO→noiseにバインドせずにハードウェア上のアラート。
生産インシデントでの録音ルールの欠如→「重い」要求。
リリースアノテーションがない→変更や劣化を比較するのが難しい。

15)実装チェックリスト(0-45日)

0-10日

ノード/kube-state/cAdvisorエクスポート;サービス内の'/metrics'

基本的なRED/USEダッシュボード;標準的なヒストグラムのバケツ。
CIからのリリースアノテーションを含める。

11-25日

SLIのための記録規則;マルチウィンドウバーンアラート。
HA Prometheus(ダブルスクレイプ)、GitOps設定のバックアップ。
Alertmanager: routes/quiet mode/on-callローテーション。

26-45日

Thanos/Cortex/Mimirの長期貯蔵のリモート・ライト。
カーディナリティの最適化、シリーズ制限、要求。
SLOゲートリリースと自動ロールバック統合。

16)成熟度の指標

主なサービスのRED/USEカバレッジ≥ 95%です。
「heavy」 PromQLを実行する平均時間<2 s (p95)レコーディングルールによる。
有用な/騒々しい警報の比率は>3:1です。
Cardinality under control:クラスタごとの<10Mアクティブバッチ、スパイクなし。
Grafanaでは100%のリリースが注釈され、前後の相関メトリックが表示されます。

17)便利なスニペット

バージョン別の安定性とカナリア比較

promql histogram_quantile(0. 95,
sum by (le, version) (rate(http_request_duration_seconds_bucket{version=~"stable    canary"}[5m]))
)

ルートによる5xxエラー

promql topk(5,
sum by (route) (rate(http_requests_total{status=~"5.."}[5m]))
)

コンテナCPU彩度

promql rate(container_cpu_cfs_throttled_seconds_total[5m]) > 0. 1

トラックとのメトリクス関係(Exemplars有効)

promql sum (rate (http_request_duration_seconds_bucket[5m])) by (le) # clickable to the track

18)結論

Prometheus+Grafanaは、メトリクスのデファクトスタンダードです。意味論と規律の勝利:RED/USE、きちんとしたラベル、SLOのヒストグラム、レコーディングルール、SLOアラート。HAと長期的なストレージ、リリースアノテーション、自動ロールバックとの統合を追加します。また、迅速でスケーラブルで経済的なメトリックループがあり、販売における意思決定を支援します。

Contact

お問い合わせ

ご質問やサポートが必要な場合はお気軽にご連絡ください。いつでもお手伝いします!

Telegram
@Gamble_GC
統合を開始

Email は 必須。Telegram または WhatsApp は 任意

お名前 任意
Email 任意
件名 任意
メッセージ 任意
Telegram 任意
@
Telegram を入力いただいた場合、Email に加えてそちらにもご連絡します。
WhatsApp 任意
形式:+国番号と電話番号(例:+81XXXXXXXXX)。

ボタンを押すことで、データ処理に同意したものとみなされます。