ホーム › 記事一覧 › Prometheus + Grafanaで自宅サーバーのCPU・温度・ディスクを可視化する:node_exporterから始める

Prometheus

Prometheus + Grafanaで自宅サーバーのCPU・温度・ディスクを可視化する:node_exporterから始める

公開 2026-10-19読了 6 分

Photo: Brett Sayles / Pexels

この記事でわかること
node_exporter・Prometheus・GrafanaをDocker Composeでまとめて立て、自宅サーバーのCPU・メモリ・温度・ディスク使用率をグラフにする手順です。定番ダッシュボードの読み込みと保存期間の決め方もまとめます。

先に結論です。自宅サーバーの CPU・メモリ・温度・ディスクの推移を見たいなら、node_exporter(数値を集める)・Prometheus(ためる)・Grafana(グラフにする)の 3 つを Docker Compose でまとめて立てるのが近道です。

  • 3 つとも同じ機械に置き、Grafana の画面(3000 番)以外は外から見えないようにする
  • グラフは定番のダッシュボード(ID 1860)を読み込めば、その日のうちに一通り出る
  • 保存期間は最初に決めておく。既定の 15 日では「去年の夏と比べる」ができない

落ちてから調べるのではなく、普段の値を知っておくための仕組みです。

3 つの役割と、動かす機械

名前役割ポート
node_exporterCPU・メモリ・ディスク・温度などの数値を出す9100
Prometheus15 秒ごとに数値を取りに行き、ためておく9090
Grafanaためた数値をグラフにする画面3000

2026 年 10 月時点の版は、node_exporter が v1.12.1、Prometheus が長期サポート版の v3.13 系(2027 年 7 月末までサポート)、Grafana が 13.2 系です。Prometheus は約 6 週間ごとに新しい版が出ますが、自宅で放っておく用途なら長期サポート版のほうが更新の手間が少なく済みます。

どれも軽いソフトなので、すでに動いている自宅サーバーに同居させてかまいません。Grafana は最小でメモリ 512MB・CPU 1 コアとされています。新しく用意するなら Beelink Mini S12 Pro のような N100 のミニPC が扱いやすいです。Raspberry Pi 5 8GB でも動きますが、Prometheus は書き込みが続くので、microSD ではなく SSD から起動する構成にしておきます。

Docker Compose で 3 つをまとめて立てる

作業用のフォルダ(例:~/monitoring)に 2 つのファイルを作ります。まず prometheus.yml です。

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: node
    static_configs:
      - targets: ["127.0.0.1:9100"]

次に compose.yaml です。

services:
  node-exporter:
    image: quay.io/prometheus/node-exporter:v1.12.1
    container_name: node-exporter
    network_mode: host
    pid: host
    restart: unless-stopped
    command:
      - --path.rootfs=/host
      - --web.listen-address=127.0.0.1:9100
    volumes:
      - /:/host:ro,rslave

  prometheus:
    image: prom/prometheus:v3.13.4
    container_name: prometheus
    network_mode: host
    restart: unless-stopped
    command:
      - --config.file=/etc/prometheus/prometheus.yml
      - --storage.tsdb.path=/prometheus
      - --storage.tsdb.retention.time=90d
      - --storage.tsdb.retention.size=10GB
      - --web.listen-address=127.0.0.1:9090
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
      - prometheus_data:/prometheus

  grafana:
    image: grafana/grafana:13.2.4
    container_name: grafana
    network_mode: host
    restart: unless-stopped
    volumes:
      - grafana_data:/var/lib/grafana

volumes:
  prometheus_data:
  grafana_data:

ポイントは 4 つです。

  • network_mode: host:3 つとも機械本体のネットワークをそのまま使います。お互いを 127.0.0.1 で呼べるので、コンテナ同士のネットワークを考えずに済みます
  • 127.0.0.1 で待ち受け:Prometheus と node_exporter にはログイン画面がありません。同じ機械の Grafana から読めれば足りるので、LAN からは見えないようにします
  • /:/host:ro,rslave と --path.rootfs=/host:機械全体を読み取り専用で見せ、コンテナではなく本体のディスク使用量を数えさせる設定です。node_exporter の公式の例と同じ形です
  • Prometheus の command は先頭 2 行も書く:command を書くと既定の指定が置き換わるため、設定ファイルとデータの置き場所も省かずに書きます

docker compose up -d で起動したら、サーバーの上で取れているか確かめます。

curl -s http://127.0.0.1:9100/metrics | grep -E "node_hwmon_temp_celsius|node_thermal_zone_temp"
curl -s http://127.0.0.1:9090/api/v1/targets | grep -o '"health":"[a-z]*"'

1 行目で温度の行が出て、2 行目が "health":"up" なら、集める・ためるまでは動いています。

ufw を有効にしているなら、Grafana の 3000 番だけを LAN に開けます(sudo ufw allow from 192.168.1.0/24 to any port 3000 proto tcp)。Forgejo など別のソフトがすでに 3000 番を使っているときは、Grafana に環境変数 GF_SERVER_HTTP_PORT=3001 を足して番号をずらします。

Grafana でグラフを出す:定番ダッシュボードと自分用の 4 枚

ブラウザで http://サーバーのIPアドレス:3000 を開き、ユーザー名 admin・パスワード admin でログインします。最初にパスワードの変更を求められるので、ここで必ず変えます。

続けて、データの取り出し先を登録します(表記は版によって多少違います)。

  1. 「Connections」→「Data sources」→「Add new data source」で「Prometheus」を選ぶ
  2. URL に http://127.0.0.1:9090 を入れて「Save & test」を押す

グラフは一から作らなくてもかまいません。「Dashboards」→「New」→「Import」で ID に 1860 を入れ、先ほどのデータソースを選ぶと、定番の「Node Exporter Full」が読み込まれます。CPU・メモリ・ディスク・ネットワークの大半はこれで見られます。

ただ、項目が多すぎて毎日眺める画面には向きません。私なら、次の 4 枚だけを並べた自分用のダッシュボードを別に作ります。

見たいものPromQL(Grafana のクエリ欄に入れる式)
CPU 使用率(%)100 - avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100
メモリ使用率(%)100 * (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)
ディスク使用率(%)100 * (1 - node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"})
温度(℃)ミニPC は node_hwmon_temp_celsius、ラズパイは node_thermal_zone_temp

温度は機種によってセンサーの数も名前も違います。Intel のミニPC では、chip というラベルに coretemp を含む系列が CPU、nvme を含む系列が SSD であることが多いので、node_hwmon_temp_celsius{chip=~".*coretemp.*"} のように絞ると見やすくなります。

ディスクを食わせない保存期間と、2 台目の追加

Prometheus の保存期間は、何も指定しないと 15 日です。夏の温度を翌年と比べるには足りないので、上の例では retention.time=90d にし、retention.size=10GB で容量の上限も付けています。両方を指定すると、先に届いたほうの条件で古いデータから消されます。

必要な容量は、公式ドキュメントでは「保存する秒数 × 毎秒のサンプル数 × 1 サンプルあたり 1〜2 バイト」で見積もれるとされています。node_exporter 1 台で 2,000 系列と仮定すると、15 秒ごとなら毎秒約 133 サンプルで、90 日なら約 2GB が目安です。系列の数は機械によって違うので、1 週間ほど動かしてから docker system df -v でボリュームの増え方を見て調整します。

ラズパイや NAS など 2 台目も見たいときは、その機械に node_exporter を入れ、prometheus.yml の targets に足します。Raspberry Pi OS なら sudo apt install prometheus-node-exporter で入り、9100 番で待ち受けます。

      - targets: ["127.0.0.1:9100", "192.168.1.20:9100"]

書き換えたら docker compose restart prometheus で読み込み直します。2 台目の 9100 番は LAN に開くので、ルーターで家の外へ転送しないでください。

1〜2 週間眺めて普段の値が分かったら、Grafana のアラート機能で「ディスク使用率 85% 超え」のような通知を足すと、落ちる前に気づけるようになります。

まとめ

  • node_exporter(集める)・Prometheus(ためる)・Grafana(見せる)の 3 つを Docker Compose で 1 台にまとめる
  • 3 つとも host ネットワークにし、Prometheus と node_exporter は 127.0.0.1 だけで待ち受ける
  • Grafana は初回ログインで admin のパスワードを変え、ID 1860 のダッシュボードを読み込む
  • 毎日見るのは CPU・メモリ・ディスク・温度の 4 枚に絞る
  • 保存期間は既定の 15 日から延ばし、容量の上限も一緒に付ける

運営者が作った Excel テンプレートを BOOTH で配布しています。IT 資産管理台帳(無料 Lite 版あり) / IT 資格の学習管理シート

部長(本業: IT インフラ) 家でも同じことをして遊んでいます。記事は実機で試してから書き、失敗もそのまま載せます。