Part 6-1. Prometheus と Grafana 連携
はじめに
Prometheus はメトリクスを効率的に収集・保存しますが、それだけではデータの価値を十分に引き出せません。ダッシュボードで可視化し、人間が一目で状況を把握できる形にすることが、実務運用では重要です。その役割を担うのが Grafana です。
Prometheus はデータの「収集と保管」を、Grafana はそのデータの「表示と分析」を担当すると考えるとわかりやすいでしょう。Grafana には Prometheus、InfluxDB、Elasticsearch など様々なデータソースを接続できますが、Prometheus メトリクスの可視化では、最も自然で強力な組み合わせになります。
このセクションでは、Grafana を初めて使う方を想定し、Prometheus との接続方法からダッシュボード構築まで、段階的に学びます。
Grafana データソースの設定
ステップ1: Grafana へのアクセス
Grafana はデフォルトで http://localhost:3000 で起動します。ブラウザでこのアドレスにアクセスすると、ログイン画面が現れます。初期ユーザー名・パスワードは admin / admin です(本番環境では必ず変更してください)。
ログイン後、ホーム画面が表示されます。左側メニューの「Configuration」または歯車アイコンから「Data Sources」を選択します。
ステップ2: データソース追加画面へ移動
「Data Sources」ページでは、既に接続されているデータソース(あれば)が一覧表示されます。右上の「Add data source」ボタンをクリックします。
データソースタイプを選ぶ画面が現れるので、リストから「Prometheus」を探して選択します。Prometheus は高い人気度のため、検索窓に「prom」と入力すれば、すぐに候補が出てきます。
ステップ3: Prometheus 設定値の入力
データソース設定フォームが開きます。主な設定項目は以下の通りです。
Name にはデータソースの識別名を入力します。複数の Prometheus インスタンスを接続する場合は、「prod-prometheus」「staging-prometheus」など、環境を区別できる名前が便利です。
URL には、Prometheus が稼働しているアドレスを入力します。デフォルトは http://prometheus:9090 です(ローカルテスト環境なら `
Scrape interval と Query timeout の設定も重要です。Scrape interval はデフォルト 15 秒で、Prometheus が Grafana からのクエリに応答するまでの待機時間を示しています。ネットワーク遅延が大きい場合は、これを 30 秒程度に増やすとよいでしょう。Query timeout はデフォルト 10 秒で、クエリの最大実行時間を指します。複雑なクエリを実行する場合は、これを 30~60 秒に設定することもあります。
その他の設定項目(認証、プロキシ等)は、本番環境での セキュリティ要件に応じて調整します。
ステップ4: 接続確認
フォーム下部の「Save & test」ボタンをクリックします。「Data source is working」というメッセージが表示されれば、接続成功です。これで Grafana から Prometheus への通信が確立しました。
ダッシュボード設計のガイドライン
初心者向けの「最小限ダッシュボード」
ダッシュボード構築は、最小限から始めることをお勧めします。最初は 3~5 個のパネル(グラフやメトリクス表示要素)で十分です。
典型的な最小限ダッシュボードの構成は以下の通りです。
- 行1: ホストの稼働台数(Stat パネル)と、全体的なアラート状態(Gauge パネル)
- 行2: CPU 使用率(TimeSeries パネル、複数ホスト重ね合わせ)
- 行3: メモリ使用率(TimeSeries パネル)と、ディスク使用量(Gauge パネル)
- 行4: ネットワークトラフィック(TimeSeries パネル)
このような構成なら、30 分程度で基本的なダッシュボードが完成します。運用チームが毎日チェックするべき情報に絞られており、ノイズが少ないため、判断が素早くできます。
ダッシュボード構築の段階的アプローチ
ダッシュボード構築を段階的に進めることで、チーム全体の理解が深まり、メンテナンスもしやすくなります。
段階1: 基本メトリクス → ホスト CPU、メモリ、ディスク、ネットワークなど、全てのシステムで共通となる、確認すべき項目を追加
段階2: アプリケーション固有メトリクス → 実装したアプリケーションが公開しているメトリクスを追加(HTTP リクエスト数、データベース接続プール数等)
段階3: カスタマイズと最適化 → 特定の業務シーンに合わせたダッシュボード作成、複数チーム間での共有
この流れで進めれば、ダッシュボードの有用性が段階的に高まり、運用チームからの信頼も得られやすいでしょう。
よくあるレイアウトパターン
1行1メトリクス型 は、パネル幅を広くして、大きなグラフを表示するスタイルです。細かい変動を見たい場合に向いています。
2~3列配置型 は、1行を複数カラムに分け、複数の小さなパネルを並べるスタイルです。概観を素早く把握したい場合に適しています。
階層化型 は、セクション(例:ホスト監視、アプリケーション監視)ごとに行を分け、論理的に整理するスタイルです。スケールしても見やすさが保たれます。
自分たちのチーム文化と見易さのバランスで、最適なレイアウトを選んでください。
パネルタイプの選択と活用
Grafana には、複数のパネルタイプが用意されており、どのタイプを選ぶかで、視認性と分析効率が大きく変わります。以下の比較表を参考に、適切なパネルを選択してください。
| パネルタイプ | 主な用途 | 推奨メトリクス例 | PromQL 例 |
|---|---|---|---|
| TimeSeries | 時系列データの推移を見たい | CPU使用率、メモリ、リクエスト数 | rate(http_requests_total[5m]) |
| Stat | 現在値を数字で確認したい | アラート数、稼働台数、エラー率 | count(up==1) |
| Gauge | 正常範囲内か直感的に判断したい | ディスク使用率(%)、メモリ(%) | (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100 |
| Table | 複数メトリクスをホスト別に比較したい | ホスト別リソース、ステータス一覧 | {job="node"} or {job="app"} |
| Pie chart | 全体に占める割合を見たい | アラート分類、ステータス分布 | count by (severity) |
TimeSeries パネル は最も一般的で、CPU 使用率やメモリ使用量の推移を見るのに向いています。複数のメトリクスを重ねて表示し、相関を分析することも簡単です。
Stat パネル は、単一の数値を大きく表示します。「現在のアラート数は 5 件」といった、現在の状態を素早く確認したいときに重宝します。
Gauge パネル は、円形のゲージで数値を表示し、正常範囲(緑)と危険範囲(赤)を色分けできます。ディスク使用率が 90% に達していないか、一目で確認できます。
Table パネル は、複数ホストのメトリクスを行列形式で表示します。ホスト数が多い場合、一覧で比較したいなら、このパネルが最適です。
Pie chart パネル は、カテゴリー別の割合を円グラフで表示します。例えば、エラーログの種類別分布を見たいときに使えます。
Grafana 設定のコツ
よくある設定ミス
Prometheus URL の間違い が最も多いミスです。ローカル環境では ` で良いのですが、Docker コンテナ環境では、Prometheus コンテナへのアドレスが異なる場合があります。「Data source is not working」というエラーが出た場合は、URL を確認してください。
スクレイプ間隔の設定ミス も起こりやすいです。Prometheus の実際のスクレイプ間隔(例:15 秒)と、Grafana の設定が異なる場合、ダッシュボードの表示がぎくしゃくすることがあります。両者を統一するか、Grafana を明示的に 30 秒にするなど、調整が必要です。
パフォーマンス調整のポイント
クエリのシンプル化 がパフォーマンス向上の鍵です。複雑な PromQL(例:複数の PromQL 関数を組み合わせたもの)は、実行時間が長くなります。可能なら、Prometheus の recording rules を使って、あらかじめ集計したメトリクスをクエリした方が高速です。
レンジクエリの時間範囲を制限 することも重要です。ダッシュボードで1年分のデータを表示しようとすれば、クエリが遅くなります。ダッシュボードの目的(リアルタイム監視なら過去 24 時間、トレンド分析なら過去 30 日)に応じて、時間范囲を適切に設定しましょう。
ダッシュボードの自動更新間隔 も調整が必要です。デフォルトでは数十秒ごとにクエリが実行される場合があり、Prometheus に負荷をかけることになります。運用目的に応じて、1 分~数分の更新間隔に設定するとバランスが取れます。
関連記事
- 前の記事: Part 6. Prometheus 統合とベストプラクティス - 統合概要
- 次の記事: Part 6-2. Prometheus 連携ツール(Loki, Tempo, Thanos, Cortex)
- 関連: Part 3-3. Grafana ダッシュボード構築(より詳細な PromQL 活用)