prometheus について
prometheusは、Prometheusのメトリクス運用を扱うガイドスキルで、PromQL、アラート、レコーディングルールを解説します。PrometheusやGrafanaのメトリクスを扱うユーザー向けに、分析と設定の例を示します。
主な機能
- 01PromQLセレクター、レート、集約
- 02一般的なメトリクス分析パターン
- 03アラートルールとルーティングの例
- 04レコーディングルールの設定と検証
- 05Grafana Metrics Drilldownの案内
活用シーン
- 01リクエストレートやエラーのクエリ作成
- 02Prometheusアラートの設定と検証
- 03レコーディングルールによるダッシュボード指標の事前計算
- 04PromQLを書かずにメトリクスを探索
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ grafana/ skills --skill prometheusインストール後、Claude Code で/prometheusを入力して読み込まれたか確認します。
詳細
Prometheus と Grafana によるメトリクス
ドキュメント: https://prometheus.io/docs/ | Grafana Cloud Metrics: https://grafana.com/docs/grafana-cloud/send-data/metrics/
PromQL クイックリファレンス
インスタントベクターセレクター
# By metric name
http_requests_total
# Label filter
http_requests_total{job="api-server"}
# Multiple labels (AND)
http_requests_total{job="api-server", method="GET"}
# Regex
http_requests_total{job=~"api.*", status=~"5.."}
# Negative
http_requests_total{status!="200"}
レンジベクターとレート
# Per-second rate over 5 minutes
rate(http_requests_total[5m])
# Increase over interval
increase(http_requests_total[1h])
# Instant rate (last two samples)
irate(http_requests_total[5m])
# Offset (5 minutes ago)
rate(http_requests_total[5m] offset 5m)
集計
# Sum by label
sum by (job) (rate(http_requests_total[5m]))
# Average
avg by (instance) (node_cpu_seconds_total)
# Top-K
topk(5, rate(http_requests_total[5m]))
# Histogram quantiles
histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m]))
# Count distinct
count(up{job="api"})
一般的なパターン
# Error rate percentage
sum(rate(http_requests_total{status=~"5.."}[5m]))
/ sum(rate(http_requests_total[5m])) * 100
# Saturation (CPU usage %)
100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
# Memory usage
node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes
# Predict disk full (linear extrapolation)
predict_linear(node_filesystem_free_bytes[6h], 24*3600) < 0
アラートルール
Prometheus アラートルール
groups:
- name: api_alerts
rules:
- alert: HighErrorRate
expr: |
sum(rate(http_requests_total{status=~"5.."}[5m]))
/ sum(rate(http_requests_total[5m])) > 0.05
for: 5m
labels:
severity: critical
annotations:
summary: "High 5xx error rate ({{ $value | humanizePercentage }})"
Alertmanager のルーティング
# alertmanager.yml
route:
receiver: default
group_by: [alertname, job]
group_wait: 30s
group_interval: 5m
routes:
- match:
severity: critical
receiver: pagerduty
- match:
severity: warning
receiver: slack
receivers:
- name: pagerduty
pagerduty_configs:
- service_key: "<key>"
- name: slack
slack_configs:
- channel: "#alerts"
api_url: "<webhook_url>"
- name: default
email_configs:
- to: "[email protected]"
アラート設定の検証
promtool check rules rules.yml
amtool check-config alertmanager.yml
amtool config routes test --config.file=alertmanager.yml severity=critical
記録ルール
ダッシュボードのパフォーマンス向上のため、負荷の高い PromQL を事前計算します。
groups:
- name: api_rules
interval: 1m
rules:
- record: job:http_requests:rate5m
expr: sum by (job) (rate(http_requests_total[5m]))
- record: job:http_request_duration_seconds:p99
expr: histogram_quantile(0.99, sum by (job, le) (rate(http_request_duration_seconds_bucket[5m])))
記録ルールのデプロイと検証
# 1. Validate rule syntax
promtool check rules rules/recording.yml
# 2. Reload Prometheus (after adding to rule_files in prometheus.yml)
curl -X POST http://localhost:9090/-/reload
# 3. Verify rules are active
curl -s http://localhost:9090/api/v1/rules | jq '.data.groups[].rules[] | {name, health}'
メトリクスのドリルダウン(Grafana 12+)
PromQL を記述せずに Prometheus を探索できます。メトリクスを閲覧するには、Explore > Metrics Drilldown に移動するか、<grafana-url>/a/grafana-metricsdrilldown-app を使用します。
ラベルの内訳を表示するメトリクス検索、異常検出のためのスマートなセグメンテーション、自動可視化、メトリクスから関連するログやトレースへのテレメトリのピボット機能を提供します。
リソース
コメント
Markdown 対応