ストーリー
高橋アーキテクトがGrafanaのダッシュボードを表示した。折れ線グラフ、ゲージ、ヒートマップが並んでいる。
Grafanaとは
Grafanaは、メトリクス・ログ・トレースを統合的に可視化するオープンソースのダッシュボードツールです。
graph TD
subgraph Grafana
D1["Dashboard<br/>API"]
D2["Dashboard<br/>Infra"]
D3["..."]
end
subgraph "Data Sources"
Prom["Prometheus"]
Loki["Loki"]
Jaeger["Jaeger"]
CW["CloudWatch"]
end
Prom --> Grafana
Loki --> Grafana
Jaeger --> Grafana
CW --> Grafana
ダッシュボード設計の原則
1. レイヤー構造
graph TD
L1["Level 1: サービス概要ダッシュボード<br/>全サービスの健全性を一覧表示<br/>異常があるサービスを赤で表示"]
L2["Level 2: サービス詳細ダッシュボード<br/>特定サービスのREDメトリクス<br/>エンドポイント別のパフォーマンス"]
L3["Level 3: デバッグダッシュボード<br/>個別リクエストのトレース<br/>ログの詳細検索"]
L1 --> L2 --> L3
2. REDダッシュボードの構成
// サービスダッシュボードに含めるべきパネル
interface ServiceDashboard {
// Row 1: 概要(ステータスパネル)
overview: {
currentStatus: 'Stat panel - UP/DOWN';
uptimePercent: 'Stat panel - 99.95%';
activeAlerts: 'Stat panel - 0 alerts';
};
// Row 2: Rate(リクエスト率)
rate: {
requestsPerSecond: 'Time series - rate(http_requests_total[5m])';
requestsByEndpoint: 'Time series - sum by (path) (rate(...))';
};
// Row 3: Errors(エラー率)
errors: {
errorRate: 'Time series - エラー率の推移';
errorsByType: 'Pie chart - エラーコード別の割合';
recentErrors: 'Table - 直近のエラーログ';
};
// Row 4: Duration(レスポンスタイム)
duration: {
latencyPercentiles: 'Time series - P50, P90, P99';
latencyHeatmap: 'Heatmap - レスポンスタイムの分布';
};
// Row 5: インフラ
infrastructure: {
cpuUsage: 'Time series - CPU使用率';
memoryUsage: 'Time series - メモリ使用量';
podCount: 'Stat panel - 稼働Pod数';
};
}
Grafanaパネルの種類と使い分け
| パネルタイプ | 用途 | 適したデータ |
|---|---|---|
| Time Series | 時系列データの推移 | リクエスト率、エラー率 |
| Stat | 単一の数値を大きく表示 | 現在のリクエスト数/秒、稼働率 |
| Gauge | メーター表示 | CPU使用率、メモリ使用率 |
| Bar Chart | カテゴリ別の比較 | エンドポイント別エラー数 |
| Heatmap | 2次元の密度分布 | レスポンスタイムの分布 |
| Table | 一覧表示 | 直近のエラーログ、Top Nクエリ |
| Alert List | アラート一覧 | 発火中のアラート |
ダッシュボードのJSON定義(抜粋)
{
"dashboard": {
"title": "Order Service - RED Metrics",
"panels": [
{
"title": "Request Rate",
"type": "timeseries",
"targets": [
{
"expr": "sum(rate(http_requests_total{service=\"order-service\"}[5m]))",
"legendFormat": "Total RPS"
}
],
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 0 }
},
{
"title": "Error Rate (%)",
"type": "timeseries",
"targets": [
{
"expr": "sum(rate(http_requests_total{service=\"order-service\",status=~\"5..\"}[5m])) / sum(rate(http_requests_total{service=\"order-service\"}[5m])) * 100",
"legendFormat": "Error Rate %"
}
],
"fieldConfig": {
"defaults": {
"thresholds": {
"steps": [
{ "color": "green", "value": 0 },
{ "color": "yellow", "value": 1 },
{ "color": "red", "value": 5 }
]
}
}
},
"gridPos": { "h": 8, "w": 12, "x": 12, "y": 0 }
},
{
"title": "Latency Percentiles",
"type": "timeseries",
"targets": [
{
"expr": "histogram_quantile(0.50, sum(rate(http_request_duration_seconds_bucket{service=\"order-service\"}[5m])) by (le))",
"legendFormat": "P50"
},
{
"expr": "histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket{service=\"order-service\"}[5m])) by (le))",
"legendFormat": "P99"
}
],
"gridPos": { "h": 8, "w": 24, "x": 0, "y": 8 }
}
]
}
}
ダッシュボード設計のベストプラクティス
| プラクティス | 説明 |
|---|---|
| 最も重要な情報を上部に | スクロールせずに全体像を把握できる |
| 色を意味づけに使う | 緑=正常、黄=警告、赤=異常 |
| テンプレート変数を活用 | サービス名やNamespaceをドロップダウンで切り替え |
| リンクでドリルダウン | 概要→詳細→ログへとナビゲーション |
| 適切な時間範囲 | デフォルトは直近1時間、障害時は拡大 |
| SLO基準線を表示 | 閾値ラインで目標値を可視化 |
まとめ
| ポイント | 内容 |
|---|---|
| Grafana | メトリクス・ログ・トレースの統合可視化ツール |
| ダッシュボード設計 | レイヤー構造(概要→詳細→デバッグ) |
| REDダッシュボード | Rate, Errors, Durationを中心に構成 |
| ベストプラクティス | 重要情報を上部、色の意味づけ、ドリルダウン |
チェックリスト
- Grafanaの役割と主要なパネルタイプを理解した
- REDダッシュボードの構成を設計できる
- PromQLを使ったパネルクエリを書ける
- ダッシュボード設計のベストプラクティスを把握した
次のステップへ
次は「アラート設計のベストプラクティス」を学びます。メトリクスに基づく効果的なアラートの設計方法を見ていきましょう。
推定読了時間: 30分