自宅の愛機を24時間死活監視!Grafana+Prometheusで構築する最強のデータセンター管制室

この記事は約16分で読めます。

1. 「俺のサーバー、今どうなってる?」を可視化せよ

中継VPSとのリバーストンネルを駆使して、自宅のUbuntu上に構築したWordPress(WordOps)を本番環境として世界に公開したあの日。
そして、その裏でルーターが頑なに隠していたMAP-Eの「ポート制限」のブラックボックスを、16進数の美しいパズルから完全に解き明かした前回のハック。
自宅サーバーの「配管」と「ロジック」をすべて自分の手で掌握し、最高にスッキリした状態で安定運用を続けている今、インフラエンジニアとして次に欲しくなるのは、さらなる安心感とロマンを兼ね備えた「管制室(コックピット)」です。
本番運用が始まると、日々のアクセスや深夜の自動処理など、サーバーのリアルタイムな動きが気になってくるはず。

「今、世界中からアクセスされている俺の愛機は、裏でどれだけ頑張っているんだ?」
「バックアップが走る時間帯、メモリやディスクは限界を迎えていないか?」

サイトの健康状態を把握することは安定運用の第一歩ですが、そのためだけに毎回わざわざSSHでログインして、黒い画面で tophtop コマンドを叩き続けるのはスマートではありません。仕事中のふとした瞬間であっても、愛機の鼓動を一目で、かつグラフィカルに確認できるダッシュボードが欲しい。

そこで今回は、現代のコンテナ運用・インフラ監視における業界標準(ゴールデンコンボ)である「Prometheus(プロメテウス)」「Grafana(グラファナ)」を使い、本番サーバーに一切の無理な負荷をかけることなく、映画の管制室のような最強のリアルタイム・ダッシュボードを構築します。

2. 登場人物の整理:本番環境を絶対に重くしない「最強の3人組」

すでに本番サイトが元気に動いている自宅サーバーに、新しく監視システムを組み込むにあたって、絶対に避けなければならないのが「監視システムのせいでサーバーが重くなり、本番サイトの表示が遅くなる」という本末転倒な事態です。
今回採用する PrometheusGrafana のコンボは、Googleをはじめとする世界中のモダンなインフラ現場で採用されている業界標準の構成です。なぜこれが選ばれるのかというと、役割分担が完璧に最適化されており、本番サーバーへの負荷が極限まで低く抑えられているからです。

今回コンテナとして同時に立ち上げる「3つの登場人物」の役割を、すっきり整理しておきましょう。

① Node Exporter(現場の作業員)

サーバーの「生データ」を裏でひっそり収集する、Go言語で書かれた超軽量な常駐プログラムです。 CPU使用率、メモリ残量、ディスクの読み書き速度、そして10G回線のネットワークトラフィックといったLinuxのコアな情報を毎秒測定し、ただ静かに待機します。重い処理は一切しないため、本番サイトの邪魔を絶対にしません。

② Prometheus(定期集計するマネージャー)

Node Exporterが用意した生データを、定期的(デフォルトでは15秒に1回など)に「プル(吸い出し)」にいくタイムシリーズ(時系列)データベースです。 多くの監視システムは、データをサーバー側から「送りつける(プッシュ)」ため、アクセス集中時に監視の通信がサーバーを圧迫しがちですが、Prometheusはマネージャー側が自分のペースでデータを取りに行く「プル型」を採用しているため、本番環境のネットワークに無駄な負荷をかけません。

③ Grafana(敏腕デザイナー)

Prometheusのデータベースに溜まった膨大な「ただの数字の羅列」を読み込み、私たちが大好きなあの黒い画面、サイバーで美しいリアルタイムなグラフ(ダッシュボード)へと一瞬でビジュアライズする表現担当です。

💡 ここが本番運用の肝:
現場で泥臭く数字を測る作業員(Node Exporter)と、それを蓄積するマネージャー(Prometheus)、そして画面に描画するデザイナー(Grafana)が完全に独立して動くため、現役バリバリの本番サーバーであっても、涼しい顔をしてノーダメージで導入できる。これがこの3人組が「最強」と呼ばれる所以です。

3. 実践:Docker Composeで一発起動!最強の監視配管を組む

それでは、本番環境のUbuntuサーバーに監視システムをデプロイしていきましょう。
すでにWebサイト(WordOpsなど)やSSHなどが稼働している本番サーバーです。既存のシステムを巻き添えに落とすことだけは絶対に避けるため、公式推奨の最も安全な手順でDockerを導入し、ポート競合を回避しながら配管を組みます。

STEP 1: UbuntuにDocker(最新版)をインストールする

前回のWordOps構築では、10G回線のポテンシャルを1ミリも無駄にしないよう、ホストのUbuntu上に直接NginxやPHP環境を構築する「ネイティブ環境」を採用しました。

今回の監視システム(Prometheus/Grafana)も同じようにホストに直接インストールすることは可能ですが、本番環境のライブラリやパッケージを汚したくはありません。そこで今回は、「本番のWordPress環境(WordOps)とは完全に隔離された安全なコンテナ宇宙」をサーバー内に作るため、まずはDocker本体(Docker Engine)とDocker Composeプラグインを公式リポジトリから最新版で導入します。

Bash
# 1. パッケージインデックスを更新し、必要なツールを導入
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg

# 2. Dockerの公式GPG鍵を追加
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# 3. リポジトリをAPTソースに登録
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 4. インストールを実行
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 5. 現在のユーザーをdockerグループに追加
sudo usermod -aG docker $USER

ここで一度サーバーにログインし直すか、newgrp docker コマンドを実行してグループ設定を反映させておきましょう。

Prometheusが繋がらない時に知っておきたい「コンテナ宇宙」の話

Dockerコンテナを使うとき、私たちはホストマシン(Ubuntu)の中に「完全に隔離された安全なコンテナ宇宙」を創り出しています。
初学者がよくやるミスとして、設定ファイルに localhost:9100 と書いてしまう罠があります。しかし、コンテナ宇宙の住人(Prometheusなど)にとっての localhost は「自分自身のコンテナ」だけです。外の世界(ホストマシン)のことは1ミリも知りません。
だからこそ、外の世界の複雑なファイアウォール(UFW)や既存のネットワーク法律に邪魔されないよう、コンテナ宇宙の中だけの専用ルート(Dockerのブリッジネットワーク)を作り、お互いをコンテナ名(node-exporter:9100)で呼び合う構成にするのが、最も安全で壊れない最強の正攻法になります。

STEP 2: 監視用の設計図(docker-compose.yml)を配置する

Dockerの準備が整ったら、監視システム専用の作業ディレクトリを作成して設定ファイルを配置します。

Bash
mkdir -p ~/monitoring
cd ~/monitoring

docker-compose.yml を新規作成して下記のコードをコピペします。

YAML
version: '3.8'

services:
  node-exporter:
    image: prom/node-exporter:latest
    container_name: node-exporter
    restart: unless-stopped
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    command:
      - '--path.procfs=/host/proc'
      - '--path.sysfs=/host/sys'
      - '--path.rootfs=/rootfs'

  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    restart: unless-stopped
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - prometheus_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    restart: unless-stopped
    ports:
      - "3000:3000"
    volumes:
      - grafana_data:/var/lib/grafana
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=your_secure_password_here

volumes:
  prometheus_data:
  grafana_data:

STEP 3: Prometheusの設定ファイル(prometheus.yml)を作成する

同じディレクトリ(~/monitoring)に、prometheus.ymlを新規作成して下記のコードをコピペします。
Prometheusが自分自身(ホスト上のNode Exporter)を見に行くための設定ファイルとなります。

YAML
global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'ubuntu-server'
    static_configs:
      - targets: ['node-exporter:9100']

STEP 4: ポートの競合チェック&起動!

この設定を起動する前に、以下の標準ポートがすでに本番環境で使われていないか、念のため最終確認(ヨシ!)をしておきましょう。

  • 9100番(Node Exporter)
  • 9090番(Prometheus)
  • 3000番(Grafana)

通常のWordOps(80/443など)や標準のSSH(22など)とは一切被らない高層階のポートを選んでいるため、基本的にはそのまま安全に相乗りできるはずです。

⚠️ セキュリティ注意:不要なポートは閉じよう!
今回設定したポートのうち、外部(インターネット)からアクセスできるようにファイアウォール(UFW等)やVPSのコントロールパネルで解放していいのは 3000(Grafana)だけ です。
9090(Prometheus)や 9100(Node Exporter)は、Dockerの内部ネットワーク(コンテナ宇宙)だけでお互いに通信できているため、外に向けて開ける必要は一切ありません。安全のために必ず閉じておきましょう。

準備ができたら、以下のコマンドで一発起動します!

Bash
docker compose up -d

コンテナが3つとも Up になれば、本番サーバーを一切重くすることなく、裏側で強力な監視の配管が100%開通します。

4. 視覚化パズル:Grafanaに「魂」を吹き込む(Dashboard ID: 1860 の魔法)

3つのコンテナが「Started」になったら、あとはブラウザからこの管制室にアクセスするだけです。

グラフをイチからポチポチ作っていく必要はありません。Grafanaの世界には、有志が作った最強のテンプレートを「IDひとつで一瞬でコピーできる」という神機能が存在します。

STEP 1: Grafanaの管制室にログインする

ブラウザを開き、あなたのサーバーのIPアドレス(または宅内LAN内のプライベートIP)に、Grafanaの標準ポート「3000番」をつけてアクセスします。

Plaintext
http://<あなたのサーバーIP>:3000

ログイン画面が表示されるので、初期設定を入力します。

  • User: admin
  • Password:docker-compose.ymlGF_SECURITY_ADMIN_PASSWORD に設定した強固なパスワード)

STEP 2: データソース(Prometheus)を接続する

起動直後のGrafanaはまだ「空っぽのデザイナー」です。相方のPrometheusから数字を吸い出せるように接続してあげましょう。

  1. 画面左側のメニュー、またはトップ画面から 「Connections」→「Data sources」 を選択します。
  2. 「Add data source」 ボタンを押し、一覧から 「Prometheus」 を選択。
  3. 設定画面の「Connection」URL欄に、以下を入力します。
Plaintext
http://prometheus:9090
  1. 画面最下部の 「Save & test」 をクリック!

STEP 3: Dashboard ID 「1860」の魔法を発動する

ここからが本番です。Linuxサーバー監視における世界標準の超傑作テンプレート「Node Exporter Full (Dashboard ID: 1860)」をインポートします。

  1. 画面左上(または右上)の「+」アイコン、もしくはメニューから 「Dashboards」 を開き、「New Dashboard」→「Import Dashboard」 を選択します。
  2. 「Find and import dashboards」 という入力欄が出てくるので、そこに魔法の数字 1860 を入力し、右側の 「Load」 ボタンを叩きます。
  3. テンプレートの情報が自動で読み込まれるので、一番下の「Prometheus」というプルダウンメニューから、先ほどステップ2で登録したデータソース(Prometheus)を選択します。
  4. 最後に 「Import」 ボタンをポチッと押すと……。

🚀 データセンター管制室、完全覚醒。

おめでとうございます!画面が切り替わった瞬間、あなたの目の前には、このような最高にサイバーな黒い画面が広がっているはずです。

  • ウニウニとリアルタイムに波打つCPU使用率のグラフ
  • 現在の空き容量が一目でわかるメモリのロードマップ
  • 10G回線が叩き出しているネットワークトラフィックのイン・アウトメーター
  • ディスクのI/Oシーク速度の生データ

これらが、15秒に1回(Prometheusの設定通り・変更可)、完璧なリアルタイム性を持って同期し始めます。 まさに、自宅の愛機が「企業のガチなデータセンターの管制室」へと進化した瞬間です。

6. 結論:愛機の鼓動を感じろ。24時間死活監視がもたらす圧倒的な安心感

これであなたのUbuntuサーバーは、ただ裏で黙々と動く黒箱ではなく、「いつでも鼓動と健康状態を視覚的にアピールしてくれる相棒」へと進化しました。

  • 10G回線のフルパワー確認: 大容量ファイルを転送した瞬間、Network Traffic Basic のグラフが跳ね上がる快感。
  • 負荷の早期発見: WordOps上のサイトへのアクセス急増時、CPU BasicMemory Basic の色が変わって一目で異常を察知。
  • ストレージの死活監視: Disk Space Used が限界を迎える前に、ディスクの赤信号に気づける安心感。

Docker Composeで組まれているため、今後サーバーを引っ越す時もこのフォルダごと持っていけば一瞬で同じ管制室が再現できます。

これにて「Ubuntu 10G環境 監視サーバー構築ハック」完了です!

管理人
管理人

このサイバーなメーター群を眺めながら、ニヤニヤする至高の時間をお楽しみください!
お疲れ様でした!!

コメント

タイトルとURLをコピーしました