DSM に Node Exporter Full をインストールする方法 | モニタリングダッシュボード構築ガイド

DSM に Node Exporter Full をインストールする方法 | モニタリングダッシュボード構築ガイド

1. 事前準備

DSM (Synology DiskStation Manager) 上で Node Exporter、Prometheus、Grafana を使用してモニタリングダッシュボードを構築する前に、以下の準備を行います。

1.1 Docker を有効化

  • DSM の「パッケージセンター」から「Docker」をインストールし、起動します。
  • DSM の「Docker」→「概要」で「ステータス」が「実行中」になっていることを確認します。

1.2 ポートの競合確認

既存のコンテナが使用しているポートを確認します。以下のコマンドを実行してください。

docker ps -a

想定されるポート割り当て例:

  • synology-monitoringalhazmy13):ポート 3003(Grafana のデフォルトと仮定)。
  • node-exporter:9101 番。
  • node-exporter-prometheus:9091 番。

このマニュアルでは、Node Exporter(9101)、Prometheus(9091)、Grafana(3004)を使用し、競合を回避します。

1.3 ネットワークの準備

専用ネットワークを作成して、他のコンテナと分離します。以下のコマンドでネットワークを確認・作成します。

docker network ls | grep node-exporter-net

ネットワークが存在しない場合、新規作成します。

docker network create --subnet=192.168.50.0/24 node-exporter-net

2. Node Exporter のインストール

Node Exporter はシステムメトリクス(CPU、メモリ、ディスクなど)を収集するツールです。以下に DSM でのインストール手順を示します。

2.1 Node Exporter コンテナの作成

以下のコマンドで Node Exporter を起動します。ポート 9101 を使用します。

docker run -d \
  --name node-exporter \
  --network node-exporter-net \
  --ip 192.168.50.2 \
  -p 9101:9100 \
  --restart always \
  prom/node-exporter:latest \
  --path.rootfs=/host \
  --path.procfs=/host/proc \
  --path.sysfs=/host/sys \
  --collector.filesystem.ignored-mount-points="^/(sys|proc|dev|host|etc)($$|/)" \
  --collector.filesystem.ignored-fs-types="^(sysfs|procfs|autofs|binfmt_misc|cgroup|configfs|debugfs|devpts|devtmpfs|fusectl|hugetlbfs|iso9660|mqueue|overlay|tmpfs)"

2.2 動作確認

  • コンテナが起動しているか確認:
    docker ps -a | grep node-exporter
  • ログを確認:
    docker logs node-exporter

    期待される出力例:
    level=info ts=... msg="Starting node_exporter" version=...
    level=info ts=... msg="Listening on :9100"

  • メトリクスが取得できるか確認:
    curl http://localhost:9101/metrics

    メトリクスデータ(例: node_cpu_seconds_total など)が表示されれば成功です。

3. Prometheus のインストール

Prometheus は Node Exporter からメトリクスを収集し、データを保存・提供します。以下に DSM でのインストール手順を示します。

3.1 Prometheus の設定ファイル作成

sed を使用して設定ファイル(prometheus.yml)を作成します。

mkdir -p /volume1/docker/prometheus
echo "" > /volume1/docker/prometheus/prometheus.yml
sed -i '1i global:' /volume1/docker/prometheus/prometheus.yml
sed -i '2i \  scrape_interval: 15s' /volume1/docker/prometheus/prometheus.yml
sed -i '3i \  evaluation_interval: 15s' /volume1/docker/prometheus/prometheus.yml
sed -i '4i ' /volume1/docker/prometheus/prometheus.yml
sed -i '5i scrape_configs:' /volume1/docker/prometheus/prometheus.yml
sed -i '6i \  - job_name: \'node-exporter\'' /volume1/docker/prometheus/prometheus.yml
sed -i '7i \    static_configs:' /volume1/docker/prometheus/prometheus.yml
sed -i '8i \      - targets: [\'192.168.50.2:9100\']' /volume1/docker/prometheus/prometheus.yml

ファイルの内容を確認します。

cat /volume1/docker/prometheus/prometheus.yml

3.2 Prometheus コンテナの作成

以下のコマンドで Prometheus を起動します。ポート 9091 を使用します。

docker run -d \
  --name node-exporter-prometheus \
  --network node-exporter-net \
  --ip 192.168.50.3 \
  -p 9091:9090 \
  --restart always \
  -v /volume1/docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
  prom/prometheus:latest

3.3 動作確認

  • コンテナが起動しているか確認:
    docker ps -a | grep node-exporter-prometheus
  • ログを確認:
    docker logs node-exporter-prometheus

    期待される出力例:
    level=info ts=... msg="Starting Prometheus" version=...
    level=info ts=... msg="Server is ready to receive web requests."

  • Prometheus UI にアクセス:

    ブラウザで http://:9091 にアクセスします(例: http://192.168.1.10:9091)。

    検索バーに up{job="node-exporter"} を入力し、実行します。結果が 1 であれば成功です。

4. Grafana のインストールと設定

Grafana はメトリクスを可視化するツールです。以下に DSM でのインストール手順を示します。

4.1 Grafana コンテナの作成

以下のコマンドで Grafana を起動します。ポート 3004 を使用し、競合を回避します。

docker run -d \
  --name grafana \
  --network node-exporter-net \
  --ip 192.168.50.4 \
  -p 3004:3000 \
  --restart always \
  -v /volume1/docker/grafana:/var/lib/grafana \
  grafana/grafana:latest

4.2 Grafana の初期設定

  • ブラウザで http://:3004 にアクセスします(例: http://192.168.1.10:3004)。
  • 初回ログイン:
    • ユーザー名:admin
    • パスワード:admin
    • 新しいパスワードを設定します。

4.3 データソースの追加

  • Grafana の左メニューから「Connections」→「Data Sources」を選択。
  • 「Add data source」をクリックし、「Prometheus」を選択。
  • 以下を設定:
    • Name:Prometheus
    • URL:http://192.168.50.3:9090
  • 「Save & Test」をクリック。「Data source is working」と表示されれば成功です。

4.4 Node Exporter Full ダッシュボードのインポート

  • 「Dashboards」→「Import」を選択。
  • 「Dashboard ID」に 1860(Node Exporter Full の公式 ID)を入力。
  • 「Load」をクリック。
  • 「Prometheus」データソースを選択し、「Import」をクリック。
  • ダッシュボードが表示され、メトリクスが可視化されていれば成功です。

5. 動作確認

すべての設定が完了したら、以下の手順で動作確認を行います。

5.1 コンテナの状態確認

docker ps -a

node-exporter(9101)、node-exporter-prometheus(9091)、grafana(3004)が Up 状態か確認します。

5.2 ネットワーク設定の確認

docker network ls | grep node-exporter-net

node-exporter-net ネットワークが存在するか確認します。

5.3 ダッシュボードの確認

ブラウザで http://:3004/d/rYdddlPWk/node-exporter-full?orgId=1&refresh=1m にアクセスします。メトリクス(CPU、メモリ、ディスクなど)が表示されているか確認します。

6. 競合回避のための注意点

他のコンテナやサービスとの競合を防ぐための注意点を以下に示します。

6.1 ポートの競合

synology-monitoring がポート 3003 番を使用しているため、Grafana には 3004 番を割り当てています。必要に応じてポート番号を変更してください(例: 9102、9092)。

6.2 ネットワークの分離

node-exporter-net ネットワークを使用し、固定 IP(192.168.50.2, 192.168.50.3, 192.168.50.4)を割り当てて IP 衝突を防ぎます。

6.3 リソースの競合

メモリ使用率(16.4%)、CPU 使用率(2.7%)が低いことを確認済みです。不要なコンテナを停止してリソースを効率化してください。

7. トラブルシューティング

問題が発生した場合の解決方法を以下に示します。

7.1 Node Exporter が起動しない

  • ログを確認:
    docker logs node-exporter
  • ポート 9101 が競合している場合、別のポート(例: 9102)に変更して再起動します。

7.2 Prometheus がメトリクスを収集しない

  • 設定ファイル(prometheus.yml)の targets を確認。
  • Prometheus UI で up{job="node-exporter"}1 か確認。

7.3 Grafana でダッシュボードが表示されない

  • データソースの URL(http://192.168.50.3:9090)を確認。
  • ログを確認:
    docker logs grafana

8. 雑記:Node Exporter を DSM にインストールする際の注意喚起(公開情報に基づく)

インストール時の問題と解決の経過

8.1.1 初期問題(システムの不安定化)

  • DSM 上でシステムが不安定になる問題が発生。
  • ログに DoSmartFirmAndSerialRead エラーが記録されており、ディスクへのアクセス失敗が原因と判明。
  • ディスクの SMART 情報に異常は見られなかった。

8.1.2 原因特定

  • DSM の HDD ハイバネーション設定
    • DSM のデフォルト設定で「HDD ハイバネーション」が有効になっており、ディスクがスピンダウンするタイミングでアクセスが試みられ、エラーが発生。
    • 頻繁なスピンダウンとスピンアップがシステムに負荷をかける可能性が指摘された。
  • DSM の環境特有の問題
    • DSM 環境では、システムメトリクスの収集(Node Exporter など)が通常の Linux 環境と異なる場合がある。適切なオプション設定が必要。

8.1.3 対策と結果

  • HDD ハイバネーションの設定変更
    • DSM の「コントロールパネル」→「ハードウェアと電源」→「一般」→「HDD ハイバネーション」を無効化、または時間を延長(例: 60分)することで、エラーの再発を防止。
    • 設定変更後のログ確認(/var/log/messages)でエラーが解消されたか確認が必要。
  • メトリクスの収集設定:
    • Node Exporter のオプション(--path.rootfs=/host, --path.procfs=/host/proc, --path.sysfs=/host/sys)を設定し、DSM 環境で正しいメトリクスを取得。
    • 不要なファイルシステム(sysfs, procfs など)を除外する設定(--collector.filesystem.ignored-*)を追加。
  • ダッシュボードの動作確認:
    • Node Exporter Full ダッシュボードでメトリクス(CPU、メモリ、ディスク)が正しく表示されることを確認。
    • ダッシュボード上で Busy Iowait のピークが減少するか確認し、HDD ハイバネーションの影響をモニタリング。

DSM 上で Node Exporter を動作させるための条件(公開情報に基づく)

8.2.1 DSM のバージョン

  • DSM 7.x 以降を推奨。DSM 7.2.2 で動作確認済み。
  • 古い DSM バージョンでは Docker やメトリクス収集に互換性の問題が生じる可能性あり。

8.2.2 Docker のインストール

  • DSM の「パッケージセンター」から Docker をインストールし、動作確認が必要。
  • Docker コンテナの実行権限(/var/run/docker.sock など)が適切に設定されていることを確認。

8.2.3 ポートの管理

  • Node Exporter(9101)、Prometheus(9091)、Grafana(3000 番台)を使用。
  • 他のコンテナやサービス(例: DSM の Web インターフェースが使用する 5000/5001 番)と競合しないように注意。
  • 必要に応じてポート番号を変更(例: Grafana を 3004 番に設定)。

8.2.4 ネットワークの分離

  • 専用ネットワーク(例: node-exporter-net)を作成し、他のコンテナと分離。
  • 固定 IP を割り当て、IP 衝突を防ぐ(例: 192.168.50.2, 192.168.50.3, 192.168.50.4)。

8.2.5 ディスクアクセスの最適化

  • DSM の「HDD ハイバネーション」設定を確認し、無効化または時間を延長。
    • コントロールパネル → ハードウェアと電源 → 一般 → HDD ハイバネーション。
  • ディスクアクセスエラーが発生する場合は、ログ(/var/log/messages)で確認。

8.2.6 リソースの確認

  • メモリと CPU の使用率を確認し、余裕がある状態で運用。
    • 例: メモリ使用率 16.4%、CPU 使用率 2.7% で安定動作を確認。
  • 不要なコンテナやサービスを停止し、リソースを効率的に使用。

8.2.7 ファイル作成ツール

  • DSM 環境では nano が利用できない場合があるため、sedecho を使用して設定ファイルを作成。
    • 例: sed を使用して prometheus.yml を一行ずつ挿入。

注意喚起(公開情報に基づく)

  • HDD ハイバネーションの影響
    • DSM のデフォルト設定で HDD ハイバネーションが有効になっている