こんにちは、てつです!
前回は、Prometheus(プロメテウス)でNode Exporterで測ったデータを可視化しました!
しかし、Prometheusで可視化されたデータは少し簡素なものでしたね。
まだ異常が出てもすぐ気づけるようなUIではなかったので、今回はGrafana(グラファナ)を導入してCPU、メモリ、ディスク、ネットワークの状況を1枚のボードに集約し、ひと目で「異常なし!」と判断できるようにしていこうと思います!
関連記事は下記に記載しておきます!


Grafanaについて
Grafanaは「翻訳家」兼「デザイナー」
第2回で導入したPrometheusは、サーバーの挙動をミリ秒単位で記録し続ける「高精度なフライトレコーダー」のような存在でしたね。
しかし、その中身は無機質なテキストデータ(数字の羅列)であり、人間が直感的に理解するのは困難ですした。
今回導入するGrafanaの役割は、その数値をリアルタイムに吸い上げ、グラフ、メーター、ヒートマップなどの「美しい視覚情報」に翻訳して1つの画面にまとめることにあります。
「Prometheus」との決定的な違い
Prometheus(プロメテウス):【データの蓄積】
- 24時間365日、サーバーのログや数値をひたすら集めて記憶する「脳(ハードディスク)」の役割です。
Grafana(グラファナ):【データの可視化】
- Prometheusが記憶した数字を美しくデザインして画面に映し出す「目(ディスプレイ)」の役割です。
なぜ分かれているのか?
「データの収集・保存」と「データの表示」を別々の専門ツールに分ける(疎結合にする)ことで、システムの負荷を下げ、万が一画面が固まっても裏側でデータを取りこぼさないという運用の安定性(可用性)を高めるプロの設計思想に基づいています。
構築ステップについて
Grafana専用のディレクトリを作る
サーバー内に専用のディレクトリ(フォルダ)を作成し、書き込み権限を調整します。
コンテナは「使い捨て」が基本です。せっかく作った美しいグラフの設定も、そのままでは再起動時に消えてしまいます。設定をサーバー側に「永続化(保存)」するための箱を用意し、Grafanaが自由に読み書きできるように「鍵(権限)」を渡す作業です。
インフラの「設計図」にGrafanaを追記する
docker-compose.yml にGrafanaの起動情報を書き込みます。
サーバーというマンションに「Grafana」という新しい住人を迎える手続きです。
「どの部屋(ポート3000)を使うか」「さっき作った倉庫(フォルダ)はどこか」を設計図に明記し、システム全体と連携させます。
データソース(Prometheus)との「開通式」
ブラウザからGrafanaにログインし、隣にいるPrometheusと接続します。
Grafanaは「表示のプロ」ですが、自分ではデータを持っていません。隣の部屋にいる「記録のプロ(Prometheus)」とパイプをつなぎ、「君が取ったデータを、僕が美しく映し出すよ」と連携させる重要なステップです。
世界中のプロが使う「デザイン(テンプレート)」の導入
ダッシュボードのID(1860)を使い、一瞬で画面を完成させます。
ゼロからグラフを描くのは時間がかかります。
Grafanaの強みである「共有文化」を活用し、世界中のエンジニアが磨き上げた「完成済みのデザイン」をインポートします。
これにより、一瞬でプロ仕様の監視画面が出来上がります。
実践編
実践編:Grafana専用のディレクトリを作る
まずは、Grafanaの設定データや作成したダッシュボードを、コンテナが再起動しても消えないように実際のサーバー側に保存する箱(ディレクトリ)を作ります。
VS Codeのターミナル(またはSSH接続した画面)で、以下のコマンドを順番に実行してください。
※前回作ったmonitoringのディレクトリ内に作ります。
cd ~/monitoring
mkdir grafana
sudo chown -R 472:472 grafana
sudo chown -R 472:472 grafana
- 何をしているか: 作成した
grafanaフォルダの所有権(読み書きの権限)を「472」という番号のユーザーに変更しています。 - なぜ必要か: DockerのGrafanaコンテナは、セキュリティを高めるために内部で「
472」という決まった番号のユーザーとして動作します。サーバー側のフォルダの持ち主をあらかじめこの番号に変えておかないと、コンテナがデータを書き込めずにエラーで立ち上がらなくなってしまうためです。
実践編:インフラの「設計図」にGrafanaを追記する
次に、前回Prometheusを追記した docker-compose.yml を開き、Grafanaの起動情報を書き加えます。
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000"
volumes:
- ./monitoring/grafana:/var/lib/grafana
restart: always
grafana:
- 何をしているか: 新しいサービス(コンテナ)の定義を開始し、名前に「grafana」と名付けています。
image: grafana/grafana:latest
- 何をしているか: 公式が提供しているGrafanaの最新版(
latest)のイメージ(金型)を使用することを指定しています。 - なぜ必要か: 自分で一からアプリを作らなくても、この1行で世界中で使われている完成されたGrafanaをそのまま持ってこられるためです。
container_name: grafana
- 何をしているか: 起動するコンテナ自体の名前に「
grafana」と固定の名称を割り当てています。 - なぜ必要か: 名前を固定しておくことで、後からDockerのコマンドで管理しやすくするためです。
ports: - "3000:3000"
- 何をしているか:
左側(実際のサーバーのポート):右側(コンテナ内部のポート)を繋ぐ玄関口を開放しています。 - なぜ必要か: Grafanaは標準で3000番のポートを使って画面を表示するため、ブラウザから
http://サーバーのIP:3000でアクセスできるようにするためです。
volumes: - ./monitoring/grafana:/var/lib/grafana
- 何をしているか: 先ほどステップ1で作ったサーバー側の
grafanaフォルダと、コンテナ内のデータ保存領域(/var/lib/grafana)を「同期」させています。 - なぜ必要か: コンテナをアップデートしたり削除したりしても、作成したグラフのデータが消えてしまわないように、実際のサーバー側にデータを安全に逃がして保存するためです。
restart: always
- 何をしているか: エラーで止まったり、サーバー自体が再起動したりした際に、自動でこのコンテナを立ち上げ直す設定です。
- なぜ必要か: 24時間365日の運用監視において、監視画面が止まったままになるリスクを排除するためです。
追記して保存したら、一つ上の階層に戻り以下のコマンドでコンテナを起動(反映)させます。
sudo docker compose up -d

ここまで来たら、ブラウザで「サーバーIP:3000」を検索してみましょう!

こんな感じでログイン画面が表示されるはずです!ここまで来たら次に移ります。
実践編:データソース(Prometheus)との「開通式」
現在は「表示デザイナー(Grafana)」が起動しただけの状態です。
隣の部屋にいる「記録係(Prometheus)」とパイプラインを結び、データを吸い上げられる状態にします!
初期ログイン
Email or username に admin と入力します。
Password に も admin と入力し、Log in をクリックします。
※初回ログイン時に新しいパスワードを設定する画面が出ますので、ご自身で管理できる安全なパスワードに変更してください!
データソース設定画面へ移動
ログイン後のホーム画面が表示されたら、左側メニューにある三本線アイコン(メニューバー)を展開し、Connections(接続設定) > View configured data sources(データソース)の順番にクリックします。

Prometheusを選択
画面中央下の青いボタン Add data source をクリックします。

連携できるツール一覧が表示されるので、一番上の方にある Prometheus を選択(クリック)します。

接続情報の入力
設定項目の内、Connection グループにある URL という入力欄を探してください。
初期状態では http://localhost:9090 などが入っていますが、ここを完全に消去し、以下のように書き換えます。
http://prometheus:9090

テストと保存
画面を一番下までスクロールし、Save & test(保存とテスト)という青いボタンをクリックします。

画面に緑色のチェックマークと共に 「Successfully queried the Prometheus API.」 とポップアップが表示されれば、開通式は無事完了です。

なぜ localhost ではなく prometheus で繋がるのか?
何をしているか:
URLのホスト名部分に、実際のIPアドレスや自分のPCを指すlocalhostではなく、コンテナ名のprometheusを直接入力しています。
なぜ必要か(Dockerの強力なロジック):
Docker Composeの仕組みでは、同じ設定ファイル(docker-compose.yml)の中に記載されたコンテナ同士は、自動的に「仮想的な内部ネットワーク」を構築して共有します。
この内部ネットワークの中では、コンテナ名(container_name: prometheusで指定した名前)がそのままサーバーの住所(ドメイン名)として機能するため、IPアドレスが将来的に変わっても設定を書き換える必要がない、非常に堅牢でスマートな連携方法となるのです。
実践編:世界中のプロが使う「デザイン(テンプレート)」の導入
いよいよ最終仕上げです。プロが作成し、世界中でデファクトスタンダード(事実上の標準)として使われているダッシュボードの設計図を一瞬でインポートします。
1.インポート画面へ移動
- 左側メニューを展開し、
Dashboardsをクリックします。 - ダッシュボード一覧画面の右側にある
Newボタン(下矢印付き)をクリックし、展開されたメニューからImportを選択します。

2.テンプレートIDの入力
Import via grafana.comと書かれた入力欄(テキストボックス)に、世界共通のテンプレートIDである以下の数字を入力します。
テンプレートID:1860

3.データソースの紐付けと実行
- 設計図の読み込みが成功すると、ダッシュボードの名前(初期値:Node Exporter Full)などが表示されます。
- 一番下の青い
Importボタンをクリックします。

以下のような画面が表示されれば成功です!

この近未来のコックピットのような洗練されたダッシュボード画面こそが、Grafanaの真骨頂です!
CPU使用率(0.9%)やRAM使用率(17.3%)が美しいメーターで可視化され、下のタイムラインにも過去からの推移がしっかりと描画されていますね。
これで【初心者向け自宅サバ監視入門:第3回】の構築フェーズはすべて完了です!
まとめ
今回の第3回では、第2回で導入したPrometheusの蓄積データとGrafanaを連携させ、ブラックボックスになりがちだった自宅サーバーの「完全な可視化」に成功しました。
最後に、今回私たちが手に入れた技術的・戦略的なアドバンテージを振り返ります。
1. 「インフラを透明化する」ということの価値
これまでは、サーバーの調子を知るために毎回黒い画面(CUI)でコマンドを打つ必要がありました。Grafanaを導入したことで、ブラウザを開くだけで「1秒で状況を把握できる」データ駆動型の運用環境が整いました。
2. 世界中の知恵(テンプレート)をレバレッジする戦略
今回はテンプレートID「1860」を活用し、世界中のプロが磨き上げたデザインを一瞬でインポートしました。 「基礎的な構築(車輪の再発明)には時間をかけず、既存の優れた資産を借りて最速でビジネス・運用の実用フェーズへ移行する」という、現代のエンジニアリングにおいて最も重要な合理性を実践できたことも、今回の大きな成果です。
3. 次なるステップへ:可視化の先にある「攻めの運用」
健康状態が見えるようになった今、次に何をすべきでしょうか?
それは、「画面を見なくても、異常があればシステムが勝手に教えてくれる環境」の構築です!
次回は、このGrafanaやPrometheusのデータをトリガーにして、サーバーの危機(リソース枯渇など)を自動検知し、Slackへ即座にアラートを送る「自動通知(アラートマネジメント)編」へ進みます!
「数字を見る」フェーズから、「数字にシステムを監視させる」フェーズへでお会いしましょう!
ここまでご精読ありがとうございました!


コメント