【Synology NAS向け】S.M.A.R.T.監視ツール Scrutiny 初心者向けインストールガイド
このガイドでは、Synology NASにS.M.A.R.T.監視ツール「Scrutiny」を導入する手順を、初心者の方でも迷わないように、ゼロから分かりやすく解説します。SSHコマンドや手動でのフォルダ作成は一切使用しません。
Scrutinyを導入することで、お使いのHDDやSSDの健康状態をウェブブラウザから簡単に監視できるようになり、故障の予兆を早期に発見できます。
必要なもの
- インターネットに接続されたSynology NAS
インストール手順
ステップ1: 必要なパッケージのインストール
まず、Scrutinyを動かすために必要な「Container Manager」と、設定ファイルを編集するための「テキストエディタ」をインストールします。
- DSMにログインします。
- デスクトップ画面左上の「メインメニュー」アイコン(四角が並んだアイコン)をクリックし、「パッケージセンター」を開きます。
「Container Manager」のインストール
- パッケージセンターの検索バーで「Container Manager」と入力し、検索します。
- 「Container Manager」が表示されたら、「インストール」ボタンをクリックします。
- 表示される指示に従ってインストールを完了します。(古いDSMバージョンでは「Docker」という名称の場合もあります)
「テキストエディタ」のインストール
- 同様に、パッケージセンターの検索バーで「テキストエディタ」と入力し、検索します。
- 「テキストエディタ」が表示されたら、「インストール」ボタンをクリックします。
- 表示される指示に従ってインストールを完了します。
ステップ2: Scrutinyセットアップスクリプトの実行
このステップでは、Scrutinyの実行に必要なフォルダの作成、設定ファイルの生成、そしてDockerコンテナの起動をすべて自動で行うスクリプトを実行します。
- DSMデスクトップ画面左上の「メインメニュー」アイコンをクリックし、「コントロールパネル」を開きます。
- 左側のメニューから「タスクスケジューラ」を選択します。
- 上部メニューの「作成」をクリックし、「予約タスク」 > 「ユーザー定義スクリプト」を選択します。
- 「タスクの作成」ウィンドウで、以下の通り設定します。
- 一般設定タブ:
- タスク:
Scrutiny初期設定(任意の分かりやすい名前) - ユーザー:
root(必ずrootを選択してください) - 有効: チェックが入っていることを確認します。
- タスク:
- スケジュールタブ:
- 日付: 「今日」に設定します。(一度しか実行しないため)
- 時間: 「実行」に設定します。(すぐに実行するため)
- タスク設定タブ:
- ユーザー定義スクリプト: 以下のコードブロックの内容をすべてコピーして貼り付けます。
- 一般設定タブ:
#!/bin/bash
LOG_FILE="/volume1/docker/scrutiny/.work/setup.log"
# 既存のログファイルをクリア
> "$LOG_FILE"
echo "$(date): スクリプト実行開始" | tee -a "$LOG_FILE"
LAN_IP=$(ip route get 1 | awk '{print $7}' | head -1)
echo "$(date): 検出されたLAN IP: $LAN_IP" | tee -a "$LOG_FILE"
# 必要なディレクトリを自動作成
mkdir -p /volume1/docker/scrutiny/influxdb /volume1/docker/scrutiny/.work
if [ $? -ne 0 ]; then
echo "$(date): エラー: 必要なディレクトリの作成に失敗しました。" | tee -a "$LOG_FILE"
exit 1
fi
echo "$(date): 必要なディレクトリを作成しました。" | tee -a "$LOG_FILE"
# docker-compose.yml と collector.yaml に含めるデバイスを検出
# /dev/sdX (SATA/SCSI), /dev/sataX (DSM独自のSATA), /dev/nvmeXnY (NVMeネームスペース) を対象
DEVICES_LIST=$(find /dev -maxdepth 1 -regextype posix-egrep -regex '/dev/(sd[a-z]+|sata[0-9]+|nvme[0-9]+n[0-9]+)$' | sort)
if [ $? -ne 0 ]; then
echo "$(date): エラー: デバイスの検出に失敗しました。" | tee -a "$LOG_FILE"
exit 1
fi
echo "$(date): 検出されたデバイス: $DEVICES_LIST" | tee -a "$LOG_FILE"
# 検出されたデバイスリストをログファイルに保存
echo "$(date): 検出されたデバイスリストを /volume1/docker/scrutiny/.work/dev-list.yaml に保存します。" | tee -a "$LOG_FILE"
echo "$DEVICES_LIST" | sed 's|^|- device: &|' > /volume1/docker/scrutiny/.work/dev-list.yaml
if [ $? -ne 0 ]; then
echo "$(date): エラー: デバイスリストの保存に失敗しました。" | tee -a "$LOG_FILE"
exit 1
fi
echo "$(date): デバイスリストを保存しました。" | tee -a "$LOG_FILE"
# docker-compose.yml 用のデバイスリストを生成
DOCKER_DEVICES=""
if [ -n "$DEVICES_LIST" ]; then
DOCKER_DEVICES=$(echo "$DEVICES_LIST" | awk '{print " - "$1}' | paste -sd '\n' -)
fi
# 既存の docker-compose.yml を削除して新しいものを生成
rm -f /volume1/docker/scrutiny/docker-compose.yml
if [ $? -ne 0 ]; then
echo "$(date): エラー: 既存の docker-compose.yml の削除に失敗しました。" | tee -a "$LOG_FILE"
fi
echo "$(date): docker-compose.yml を作成します。" | tee -a "$LOG_FILE"
cat > /volume1/docker/scrutiny/docker-compose.yml << EOF
version: '3.8'
services:
scrutiny:
container_name: scrutiny
image: ghcr.io/analogj/scrutiny:master-omnibus
cap_add:
- SYS_RAWIO
- SYS_ADMIN
ports:
- 6090:8080/tcp
- 8086:8086/tcp
volumes:
- /run/udev:/run/udev:ro
- /volume1/docker/scrutiny:/opt/scrutiny/config
- /volume1/docker/scrutiny/influxdb:/opt/scrutiny/influxdb
devices:
$DOCKER_DEVICES
environment:
- SCRUTINY_WEB_INFLUXDB_TOKEN=init-token
- SCRUTINY_WEB_INFLUXDB_INIT_USERNAME=scrutiny
- SCRUTINY_WEB_INFLUXDB_INIT_PASSWORD=securepass
- COLLECTOR_CRON_SCHEDULE=0 */6 * * *
- TZ=Asia/Bangkok
security_opt:
- no-new-privileges:true
restart: unless-stopped
EOF
if [ $? -ne 0 ]; then
echo "$(date): エラー: docker-compose.yml の書き込みに失敗しました。" | tee -a "$LOG_FILE"
exit 1
fi
echo "$(date): docker-compose.yml を作成しました。" | tee -a "$LOG_FILE"
# collector.yaml の内容を構築
COLLECTOR_DEVICES=""
if [ -n "$DEVICES_LIST" ]; then
for DEV in $DEVICES_LIST; do
DEVICE_NAME=$(basename "$DEV")
DEVICE_TYPE=""
if [[ "$DEVICE_NAME" =~ ^sd || "$DEVICE_NAME" =~ ^sata ]]; then
DEVICE_TYPE="sat"
elif [[ "$DEVICE_NAME" =~ ^nvme ]]; then
DEVICE_TYPE="nvme"
else
DEVICE_TYPE="unknown"
fi
COLLECTOR_DEVICES+=" - device: $DEV\n"
COLLECTOR_DEVICES+=" type: '$DEVICE_TYPE'\n"
done
fi
# collector.yaml を作成または上書き
echo "$(date): collector.yaml を作成します。" | tee -a "$LOG_FILE"
cat > /volume1/docker/scrutiny/collector.yaml << EOF
version: 1
host:
id: ""
devices:
$(echo -e "$COLLECTOR_DEVICES" | sed 's/\\//g')
EOF
if [ $? -ne 0 ]; then
echo "$(date): エラー: collector.yaml の書き込みに失敗しました。" | tee -a "$LOG_FILE"
exit 1
fi
echo "$(date): collector.yaml を作成しました。" | tee -a "$LOG_FILE"
# ヘルプファイルを生成
echo "$(date): help.txt を作成します。" | tee -a "$LOG_FILE"
cat > /volume1/docker/scrutiny/help.txt << EOF
■ Scrutiny 初期チェック
DSMのブラウザで http://$LAN_IP:6090 にアクセスしてください。
ドライブが表示されていれば成功です。
■ ディスク検出に問題がある場合 (手動での collector.yaml 編集方法)
1. DSMの「File Station」を開きます。
2. 左パネルで「docker」フォルダ -> 「scrutiny」フォルダへ移動します。
3. 「collector.yaml」ファイルを右クリックし、「テキストエディタで開く」を選択します。
4. 開いたファイルはYAML形式です。`devices:` の下に、以下の書式を参考に、検出されていないディスクの情報を追加または修正します。
- **SATA HDD/SSD (例: ドライブ1番、2番):**
- device: /dev/sata1
type: 'sat'
- device: /dev/sata2
type: 'sat'
# あるいは /dev/sda, /dev/sdb など、お使いのNAS環境で異なる場合があります
- device: /dev/sda
type: 'sat'
- **NVMe SSD (例: M.2 SSD 1番、2番):**
- device: /dev/nvme0n1
type: 'nvme'
- device: /dev/nvme1n1
type: 'nvme'
※ディスクの正確なパスは、Synologyの「ストレージマネージャー」でディスクのモデル名やシリアル番号を確認し、上記の一般的なパスと照らし合わせてみてください。
5. 編集が完了したら、テキストエディタでファイルを「保存」します。
6. DSMの「Container Manager」を開き、左メニューの「コンテナ」をクリックします。
7. リストの中から「scrutiny」コンテナを見つけて選択し、上部の「操作」ボタンから「再起動」を選択します。
8. 再度ScrutinyのURLにアクセスし、ディスクが表示されたか確認します。
■ 完了後
このhelp.txtファイルと、/volume1/docker/scrutiny/.work/setup.log があれば初期化成功です。
この「Scrutiny初期設定」のタスクは一度しか使わないため、タスクスケジューラから削除しても問題ありません。
■ 詳細なログ
スクリプトの実行ログは /volume1/docker/scrutiny/.work/setup.log に記録されています。
検出されたデバイスのリストは /volume1/docker/scrutiny/.work/dev-list.yaml に記録されています。
EOF
if [ $? -ne 0 ]; then
echo "$(date): エラー: help.txt の作成に失敗しました。" | tee -a "$LOG_FILE"
exit 1
fi
echo "$(date): help.txt を作成しました。" | tee -a "$LOG_FILE"
# Dockerコンテナを起動(または再起動)
echo "$(date): Dockerコンテナを起動(または再起動)します。" | tee -a "$LOG_FILE"
cd /volume1/docker/scrutiny && docker compose up -d
if [ $? -ne 0 ]; then
echo "$(date): 重大なエラー: Docker Composeの起動に失敗しました。" | tee -a "$LOG_FILE"
echo "$(date): 詳細については、DockerのログとContainer Managerを確認してください。" | tee -a "$LOG_FILE"
exit 1
fi
echo "$(date): Dockerコンテナが正常に起動しました。" | tee -a "$LOG_FILE"
echo "$(date): スクリプト実行完了" | tee -a "$LOG_FILE"
「OK」をクリックしてタスクを保存します。
ステップ3: スクリプトの実行と確認
- タスクスケジューラの画面で、作成したタスク「Scrutiny初期設定」を見つけて選択します。
- 上部メニューの「実行」ボタンをクリックします。
- 確認メッセージが表示されたら、「はい」をクリックして実行します。
- 数秒から数十秒待機します。
- 重要: スクリプトの実行結果は、
/volume1/docker/scrutiny/.work/setup.logファイルで確認できます。File Stationを開き、このログファイルを参照して、エラーが発生していないか確認してください。
ステップ4: Scrutinyの動作確認
ウェブブラウザを開き、アドレスバーに以下のURLを入力してアクセスします。
(192.168.1.xxxの部分は、あなたのNASの実際のLAN IPアドレスに置き換えてください。スクリプトが生成したhelp.txtにも記載されています。)
http://[あなたのNASのIPアドレス]:6090
例: http://192.168.1.185:6090
Scrutinyのダッシュボードが表示され、接続されているHDDやSSDの健康状態、温度、容量などが表示されていれば、インストールは成功です!
重要な注意事項
InfluxDBの初期パスワードについて:
上記のスクリプトでは、Scrutinyが内部で使用するデータベース(InfluxDB)の初期パスワードがsecurepassに設定されています。
- このパスワードは最低8文字以上である必要があります。
- セキュリティのため、Scrutinyのセットアップが完了した後、必ずこのパスワードを変更してください。 変更方法はScrutinyの公式ドキュメントやウェブUIの設定画面をご確認ください。
- スクリプトをコピーする際に、
SCRUTINY_WEB_INFLUXDB_INIT_PASSWORD=securepassの行のsecurepassの部分を、ご自身で考えた8文字以上の安全なパスワードに直接書き換えてから貼り付けることも可能です。その場合、書き換えたパスワードを忘れないようにメモしてください。
スクリプトは「余計なこと」をしません:
このスクリプトは、Scrutinyの動作に必要なフォルダの作成、設定ファイルの生成、Dockerコンテナの起動のみを行います。
お使いのNASの既存データや設定に影響を与えるような、Scrutinyのセットアップとは関係のない操作は一切行いませんのでご安心ください。
ヒューマンエラーを最小限に:
このガイドの指示に沿って、ステップバイステップで進めてください。
特に、タスクスケジューラの「ユーザー」をrootに設定することと、スクリプトを正確にコピー&ペーストすることが重要です。
完了後
Scrutinyが正常に動作していることを確認したら、タスクスケジューラに作成した「Scrutiny初期設定」タスクは削除して問題ありません。(タスクを右クリックして「削除」を選択)
これで、あなたのSynology NASでScrutinyを使ったディスク監視が開始されました!
コメント