prometheus+grafanaで各種サーバとついでにQNAP NASの状態を可視化する

お仕事柄サーバの監視システムを管理、運用しているものの自鯖の監視は適当に導入したmuninやmackerelにお任せという状態だったので、きちんと1から構築してみよう、ということでprometheus+grafanaを導入しつつ、ついでに自宅に置いてるNASのメトリクス取得もやってみたら意外と簡単だったやないかい、というメモ。

三行で

  • prometheus、grafanaを管理サーバ、node_exporterを監視対象サーバでそれぞれ立ち上げ
  • prometheusの設定をちょろっと書いて
  • gradanaにログインしてdatasourceの設定を追加、適当なダッシュボードをimport

でこんな感じのダッシュボードで15秒精度のメトリクスが見れるようになり、なかなか楽しい。

f:id:egmc:20180721235623p:plain
grafana dashboard

構成

  • 監視元&監視対象 GCP上のf1-microなサーバ(ubuntu xenial)
  • 監視対象:さくらVPSサーバ(CentOS)
  • 監視対象:QNAP NAS(TS-220、QTS)

GCP上にprometheusを立ててグローバル越しにnode_exporterを導入したサーバを監視対象にしていく感じで。 デーモン化はsupervisorに任せる方針。

各種設定

node_exporter

バイナリ落としてきて適当に配置して起動するだけ。 config的なものとは特になく、collectorの追加オプションがあるだけなので好みで入れる。 何も指定しなくてもデフォルトで結構取ってくれる。

[program:node_exporter]
command=/usr/local/node_exporter/node_exporter
user=monitor
autorestart=true

雑にsupervisorでデーモン化する 起動後に9100ポートにアクセスして諸々取れてることを確認。

prometheus

バイナリ落としてきて適当に配置してprometheus.yml書くだけ ほかは特にいじらず(おもむろにscrape_configs->static_configsで対象のホスト名:9100を並べていけばOK。

job_nameはgrafanaダッシュボード設定時にラベル合わせればなんでもいいんだけどnode_exporter使うダッシュボードはjob=nodeというラベルを期待してる空気を感じたのでそんな感じにしておくと楽やも。

[program:prometheus]
command=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml
directory=/usr/local/prometheus
user=monitor
autorestart=true

雑にsupervisorでデーモン化する 起動後に9090ポートにアクセスし、適当なクエリを投げ、各ホストからメトリクスが取得できラベルが付与されてることを確認。

grafana

Installing on Debian / Ubuntu | Grafana Documentation

を眺めつつaptで。 3000ポートで起動するのでログインしてdata sourceにprometheusを追加。

であとは適当なダッシュボードを

Grafana Dashboards - discover and share dashboards for Grafana. | Grafana Labs

から探してきてインポートする。 今回はNode Exporter Full 0.16を拝借してみた。

インポートしたダッシュボードで表示されないメトリクスはnode_exporter側でrenameされてたりするので合わせたりする必要があるが大体いい感じに表示される。

https://github.com/prometheus/node_exporter/releases

Many metrics have been renamed/modified to include base units, for example node_cpu is now node_cpu_seconds_total.

とかこういうの。

なおnode_exporterもgrafanaもprometheusもdockerイメージが提供されてるのでそっちを使うのもよさげ。

NASも監視してみる

手持ちのQNAP NASはTS-220というモデルでQTSというLinuxベースのNAS用OSが稼働しており、ここからも各種メトリクスを取得してみる。

f:id:egmc:20180721232649p:plain

(標準のビューでもCPU、メモリ使用率、トラフィック、温度等はなんとなく見れてアプリからも確認できるのでこれはこれでいいのだけど)

TS-220のCPUはMarvell6282(ARMv5)1.6Ghz、でnode_exporterのリリースページをおもむろに覗きにいくとlinux-armv5なバイナリが既に用意されているのでこれを落としてきて起動するだけでイケる。お手軽ですね。 デーモン化はひとまずおいといて、雑にscreen貼って起動しっぱなしにしているが、QTSも/etc/init.d/以下に起動スクリプト置けばイケるはずなのでそのうち対応。

NASは自宅のネットワーク内にいるので9100宛のTCP通信を

  • ルータ側でポートマッピングを行ってNASの9100へ
  • かつインターネット側からのアクセスを監視元のIPに制限(いちおう)

な設定でアクセスできるように。

自宅のインターネット回線は特に固定IPというわけではないので、今回はQNAPが提供するDDNS的なサービス(myqnapcloud)を利用しつつ、自分の管理ドメインから適当にCNAMEを設定して名前解決を行うようにしてみた。

grafanaのビューでみるとこんな感じ。

f:id:egmc:20180721232837p:plain f:id:egmc:20180721232854p:plain

MacのTime Machineバックアップが走ってるときなどはそれなりに書き込みが走ったりするので、ガリガリやってる内訳が観測できて結構楽しい。