Node Exporter の導入と Prometheus 連携によるホスト監視構築

1. Node Exporter のデプロイ方法

Kubernetes クラスタ内の各ワーカーノードに、Node Exporter を DaemonSet またはバイナリ方式で展開します。これにより、ホストレベルのシステムメトリクス(CPU、メモリ、ディスク、ネットワークなど)を収集し、Prometheus が `/metrics` エンドポイント(デフォルトポート: 9100)経由で定期的にスクレイプできるようになります。
# バイナリダウンロードと展開(例:v1.6.1)
curl -LO https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
tar xzf node_exporter-1.6.1.linux-amd64.tar.gz -C /opt/
sudo ln -sf /opt/node_exporter-1.6.1.linux-amd64/node_exporter /usr/local/bin/node_exporter

# systemd サービス定義(/etc/systemd/system/node-exporter.service)
[Unit]
Description=Node Exporter for Host Metrics
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/bin/node_exporter \
  --web.listen-address=:9100 \
  --web.telemetry-path=/metrics \
  --collector.systemd \
  --collector.textfile.directory=/var/lib/node_exporter/textfiles

Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

サービスを有効化・起動後、ポート状態を確認します:

sudo systemctl daemon-reload
sudo systemctl enable --now node-exporter
ss -tlnp | grep :9100

2. メトリクスエンドポイントの検証

ノードの IP アドレスに対して http://<NODE_IP>:9100/metrics にアクセスすると、生の Prometheus 形式のメトリクスがテキスト形式で返されます。以下は代表的な指標カテゴリです:
  • node_boot_time_seconds:システム起動からの経過秒数
  • node_cpu_seconds_total:CPU 使用時間(mode ごと)
  • node_disk_io_time_seconds_total:ディスク I/O 時間
  • node_filesystem_avail_bytes:利用可能なファイルシステム容量
  • node_load1:1分間の平均ロードアベレージ
  • node_memory_MemAvailable_bytes:利用可能な物理メモリ量
  • node_network_receive_bytes_total:受信バイト数(インターフェース別)
  • node_time_seconds:現在の Unix タイムスタンプ
  • go_goroutines, process_resident_memory_bytes:Exporter 自身のランタイム指標

3. Prometheus サーバー側の設定変更

Prometheus の設定ファイル prometheus.yml に、Node Exporter のターゲットを追加します。複数ノードがある場合は static_configs にリスト形式で記述します。
# prometheus.yml の scrape_configs セクション内に追加
- job_name: 'host-metrics'
  static_configs:
    - targets:
        - '192.168.50.10:9100'
        - '192.168.50.11:9100'
        - '192.168.50.12:9100'
  # オプション:特定のコレクターのみ有効化(例:メモリとディスクのみ)
  params:
    collect[]:
      - meminfo
      - diskstats
      - filesystem

設定反映には、--web.enable-admin-api を有効化した上でリロードを実行します:

curl -X POST http://localhost:9090/-/reload

4. スクレイプ結果の確認

Prometheus Web UI(http://<PROMETHEUS_IP>:9090/targets)で「host-metrics」ジョブのステータスが UP であることを確認します。また、http://<PROMETHEUS_IP>:9090/graphnode_cpu_seconds_totalnode_memory_MemAvailable_bytes をクエリして、データが正しく取得されているかを検証できます。

5. コレクターのカスタマイズとフィルタリング

Node Exporter は多数のコレクターを提供しており、必要に応じて有効/無効化可能です。コマンドライン引数で制御する方法と、Prometheus 側の params による制御が併用可能です。
  • すべてのデフォルトコレクターを無効化し、必要なものだけを明示的に有効化:
node_exporter \
  --collector.disable-defaults \
  --collector.meminfo \
  --collector.diskstats \
  --collector.netdev
  • 特定のマウントポイントを除外(例:Docker や Kubernetes の一時ファイルシステム):
--collector.filesystem.mount-points-exclude="^/(dev|proc|sys|var/lib/docker|var/lib/kubelet)($|/)"
  • Prometheus 設定での指定(上記と同等の効果):
params:
  collect[]:
    - meminfo
    - diskstats
  exclude[]:
    - netdev

6. 外部テキストファイルからのカスタム指標統合

--collector.textfile.directory を指定することで、外部の `.prom` 形式ファイルから独自指標を読み込むことができます。例として、手動で生成されたメモリ使用率指標を追加します:
# /var/lib/node_exporter/textfiles/custom_mem.prom
# HELP node_custom_memory_usage_bytes Custom memory usage in bytes
# TYPE node_custom_memory_usage_bytes gauge
node_custom_memory_usage_bytes 4294967296

# HELP node_custom_memory_total_bytes Total memory capacity
# TYPE node_custom_memory_total_bytes gauge
node_custom_memory_total_bytes 1099511627776

このファイルが存在すれば、Node Exporter は自動的にその内容を /metrics に含めて公開します。

タグ: Prometheus node-exporter monitoring Kubernetes Metrics

8月19日 03:39 投稿