Node exporterのTextfile Collector機能を使用することで、任意の値をPrometheusで収集できます。そこで、QNAPでNode exporterが稼働するようになったのでQNAPの各ディレクトリサイズを計測して、それをPrometheusで収集できるようにします
前提
- サイズ計測対象のフォルダは/share/homes以下(ユーザーのホームディレクトリ)
構成
パス | 内容 |
---|---|
/share/homes/admin/bin/node_exporter.sh | Node exporter起動スクリプト。前回作成済み |
/share/homes/admin/bin/directory_size.sh | ディレクトリサイズ計測スクリプト |
/share/homes/admin/opt/node_exporter/textfile_collector | 計測結果置き場 |
/etc/config/crontab | QNAPのcrontab |
データ取得設定(Textfile Collector)
ディレクトリサイズ計測スクリプトが出力し、Node expoterが読み取る場所を作成する
mkdir /share/homes/admin/opt/node_exporter/textfile_collector
起動スクリプトのNode exporter起動時に--collector.textfile.directory
オプションを追加する
#!/bin/bash
DAEMON_MGR="/sbin/daemon_mgr"
NAME=node_exporter
PROG=/share/homes/admin/opt/node_exporter/node_exporter
# OPTにcollector.textfile.directoryオプションを追加
OPT="--collector.textfile.directory=/share/homes/admin/opt/node_exporter/textfile_collector"
case "$1" in
start)
mypid=`/bin/pidof $NAME`
if [ ! -z $mypid ]; then
exit 1
else
echo -n "Starting $NAME: "
$DAEMON_MGR $NAME start "$PROG $OPT &"
exit 0
fi
;;
stop)
echo -n "Stopping $NAME: "
$DAEMON_MGR $NAME stop "$PROG"
echo
;;
*)
echo "Usage: $1 start|stop"
exit 1
;;
esac
exit 0
ディレクトリサイズ計測スクリプト
prometheus-community/node-exporter-textfile-collector-scripts: Scripts for node-exporter’s textfile collectorのdirectory_size.shを参考に/share/homes/admin/bin
にdirectory_size.sh
を作成する
#!/bin/bash
echo "# HELP node_directory_size_bytes Disk space used by some directories" > /share/homes/admin/opt/node_exporter/textfile_collector/directory_size.prom.$$
echo "# TYPE node_directory_size_bytes gauge" >> /share/homes/admin/opt/node_exporter/textfile_collector/directory_size.prom.$$
du -sb /share/homes/* | /opt/bin/sed -ne 's/^\([0-9]\+\)\t\(.*\)$/node_directory_size_bytes{directory="\2"} \1/p' >> /share/homes/admin/opt/node_exporter/textfile_collector/directory_size.prom.$$
mv /share/homes/admin/opt/node_exporter/textfile_collector/directory_size.prom.$$ /share/homes/admin/opt/node_exporter/textfile_collector/directory_size.prom
HELPとTYPEは、Exposition formats | Prometheusを参考に出力値に合ったものを設定
実行権限付与
chmod +x /share/homes/admin/bin/directory_size.sh
実行確認
/share/homes/admin/bin/directory_size.sh
成功していれば、/share/homes/admin/opt/node_exporter/textfile_collector
にdirectory_size.prom
が生成され、各ディレクトリのサイズが出力されています
cat /share/homes/admin/opt/node_exporter/textfile_collector/directory_size.prom
# HELP node_directory_size_bytes Disk space used by some directories
# TYPE node_directory_size_bytes gauge
node_directory_size_bytes{directory="/share/homes/@Recycle"} 15107
node_directory_size_bytes{directory="/share/homes/admin"} 62545445
node_directory_size_bytes{directory="/share/homes/ftptest"} 26675
※古いQNAPだとsedのバージョンが古いため1行目のコマンドの出力が得られないことがありました(TS-120)その場合、Entwareをインストールして
/opt/bin/opkg update
/opt/bin/opkg install sed
とすることで、/opt/bin/sedが利用できるので、そちらで代用できます
確認
http://QNAPのIP:9100 にアクセスして、node_directory_size_bytes
の項目が出力されているか確認
cron設定
directory_size.sh
を定期実行するためCronに登録
QNAPのcrontab
は/etc/config/crontab
にあるので、それに追記
# この例では毎時0分実行
0 * * * * /share/homes/admin/bin/directory_size.sh
あとは、Prometheus経由で、Grafanaでグラフ化する