Prometheus2とGrafana6によるシステム監視 Node Exporterの情報を表示

Prometheus

今回はGrafanaを操作して監視情報を表示する。
Elastic StackのKibanaに相当する部分だけど、配布されているテンプレートをそのまま使うので難しい部分は無い筈。

Prometheusの起動確認

Prometheus 1
まず、ブラウザを起動し、http://[PrometheusのIPまたはホスト名]:9090を開く。
Prometheusの画面はこんなの。画面が出たら起動はしているので特に今は触らない。
これで終わり。ブラウザは閉じても良い。

Grafanaを操作

Grafana 1
ブラウザを起動し、http://[GrafanaのIPまたはホスト名]:3000 を開く。
ユーザー名とパスワードの画面が表示されるのでどちらも共に「admin」を入力する。
パスワードの変更を求められるので新しいパスワードを入力する。

Grafana 2
メイン画面でまずデータソースを指定する。Add data sourceをクリック。

Grafana 3
幾つかのアイコンが有る中で松明のアイコンの「Prometheus」をクリック。

Grafana 4
Prometheusと接続したいのでHTTPのURL欄に http://[PrometheusのIPまたはホスト名]:9090 を指定する。 今の時点ではそれだけを指定すれば良い筈。
左下の緑の[Save & Test]ボタンをクリック。

Grafana 5
正しく接続できれば、緑色で「Data Source is working」が表示される。

Grafana 6
左列のメニューから+のアイコンをポインタを合わせるとサブメニューが3つ表示されるのでImportをクリックする。
ここで、このブラウザは閉じないで次の工程を行う。

Grafana 7
別のブラウザでhttps://grafana.com/dashboards/1860を開く。右の方にDownload JSONというリンク(ボタンではない)があるのでクリックしてファイルをダウンロードする。

Grafana 8
Grafanaを表示したブラウザに戻り、右上の方にある緑の[Upload .josn File]ボタンをクリックする。
ダウンロードしたJSONファイルを指定する。

Grafana 9
Prometheusの項目のドロップダウンメニューで「Prometheus」 (先に指定したPrometheusデータソース)を選択する。
[Import]ボタンがくすんだ緑色から明るい緑色になって押すことができるようになるのでクリック。
準備はこれで完了。

Grafana 10
ダッシュボードを表示する。(次行)
メイン画面の左上にプルダウンメニューがあるので(メイン画面であれば「Home」という表示)、「Node Exporter Full」を選択する。
PrometheusとNode Exporter(1ホスト以上)を起動した直後であれば、すぐに確認しようとしてもグラフの枠は表示されても、中身は無い(N/A)など。
PrometheusとNode Exporter稼働から数分〜数時間待ってから表示するとグラフなどが表示される。(次)

Grafana 11
この画像はFreeBSDのホストを表示したもの。
FreeBSDの場合はそのままではメモリの状態を取得できないというかテンプレート側がLinuxホストに特化しているのでFreeBSDの情報が表示できなくてN/Aになる。他の多くの項目もNo Data pointsなどになる。何か工夫するか、他のExporterを使うのが良さそう。
ちなみにNode Exporterを複数のホストで動かしているなら左上の「Host」のドロップダウンメニューから見たいホストを選択する。

Grafana 12
これはRaspberry Pi Zero Wで動いているVolumio(公式イメージ)を表示したもの。スワップは無いのでN/Aで良いが、microSDカードのストレージの値が取れていない。

Grafana 13
先日購入したOrange Pi Zero plus (SoCがH5なシングルボードコンピュータ)とOSはDebian busterベースのArmbianを表示してみた。こちらは全ての値が取得できるみたい。
それと、1つ前の画像まではブラウザの幅を極端に狭くして表示していたので窮屈だったが、広い画面で表示すればこんな感じ。

Kibanaで24時間のグラフを表示しようとすると(データ量にも因るかもしれないけど)、表示するまで結構待たされる。それにちょこちょこエラーが出ることも。それと比べるとPrometheus + Grafanaは(まだNode Exporterを8台しか登録してないけど)かなり軽快。

今後は違うExporterを使って他の情報も取得したい。それとNode Exporterも素のデータだけでなく他も取れるものは取らせてみたい。

関連記事:

Prometheus2とGrafana6によるシステム監視 FreeBSDにインストール

Prometheus

この2年ほど、自分のシステムの監視にElastic Stackを使ってきた。Elastic Stackはおおよそやりたいことは好きに出来て本当に素晴らしいのだが、業務用のシステムで使うのならともかく個人レベルのシステムで使うにはあきらかにオーバースペックだし管理も大変。ElasticsearchやKibanaを動かすホストが貧弱だと表示が遅くて目も当てられない。そして環境依存的にソフトウエアのパッケージの更新が大変になる。なによりも、FreeBSDのports/pkgのサポートがバージョン6.5で停まっている。(更新が無い方が手間に苦しめられなくて済むのではあるが)

で、もっと簡単でシステムリソースの状態をササッと見れる程度のシステム監視ツールは無いかしらと思って探していたら、Prometheusというものが見つかった。試してみて良さそうだったら乗り換えようかしら?
ちなみに、この10年だとCacti, Observium, LibreNMSを導入しています。

インストール

PrometheusとGrafanaのどちらも他のソフトウエアへの依存が少ないので嬉しい。
2019年8月時点ではFreeBSD用にPrometheusには1系と2系のports/pkgがあるが、今回は新しい2系をインストールする。 また、Grafanaは無印(1系)から6系までのports/pkgがあるが、今回は新しい6系をインストールする。

# cd /usr/ports/net-mgmt/prometheus2
# make install

# cd /usr/ports/www/grafana6
# make install
/etc/rc.conf (2行追加)
1
2
prometheus_enable="YES"
grafana_enable="YES"

Prometheusの設定

/usr/local/etc/prometheus.yml (編集)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
global:
  # scrape_interval:     15s  #サンプルでは15秒になっているが、デフォルトの1分に変更にするためコメント化
  # evaluation_interval: 10s # サンプルでは10秒になっているが、デフォルトの1分に変更にするためコメント化

scrape_configs:
  - job_name: 'prometheus' #Prometheus用の名前を付ける(変更不要)
  static_configs:
    - targets: ['localhost:9090']   #IPアドレスまたはホスト名をPrometheusのサーバのものにする

  - job_name: 'node_exporter' #node_exporter用を追加する
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9100']  #node_expoterのIPアドレスまたはホスト名 ポートは9100
基本的にはサンプル設定に10〜13行目を追加するだけ。
最後の1行のターゲットはnode_expoterをインストールしたホスト分だけ記述する。- targets: ['localhost:9100', '192.168.0.1:9100']のような感じ。
YMLファイルは行頭の字下げに意味があるので揃える位置に注意。

サービス起動

# service prometheus start
# service grafana start
サーバー側はこれだけ。

エージェント node_exporter

ここでは、Prometheusにシステム情報を送る側(Prometheusによってシステム情報を取られる側)要するに監視対象側に仕込むソフトウエアをエージェントとする。
まずは、Prometheusサーバが動いているホストにエージェントをインストールして動かす。他のホストはこれに倣う。
インストールするのは豊富なexporterの中でもよく使われるnode_exporter。依存関係は少ないがビルドするにはGo言語が必要。個人的にはGoはあまり好きじゃない。Goでビルドするのが嫌ならPrometheus公式で配布しているビルド済みバイナリを使う手もある。(後述)

FreeBSDの場合

 # cd  /usr/ports/sysutils/node_exporter
 # make install
または、pkgでインストールする
# pkg install node_exporter
 
/etc/rc.conf (1行追加)
node_exporter_enable="YES"

起動オプションは/usr/local/etc/rc.d/node_exporterを見て必要に応じて/etc/rc.confに追記する。

node_exporterの起動
# service node_exporter start

node_exporterの動作確認
node_exporterが出力するメトリクスを確認する場合はブラウザを起動し、http://[node_exporterのIPまたはホスト名]:9100 を開く。

なお、node_expoterは基本的にLinuxの情報を取るために作られたようで仕組み的に(標準では存在し無い)/procなどが無いFreeBSDでは取れる情報が限られる。boottime, cpu, exec, filesystem, loadave, meminfo, netdev, unameの8項目が基本? そのままではメモリの使用情報が取れないのがちょっと残念。

Linuxでパッケージありの場合

例えばパッケージの管理システムがaptなら以下。

$ apt-cache search prometheus     #「prometheus」という名前でパッケージを探す
中略
prometheus-node-exporter - Prometheus exporter for machine metrics       ←リストの中から見つける
中略
$ sudo apt install prometheus-node-exporter   #インストール
$ sudo  systemctl enable prometheus-node-exporter  #サービス有効化
Synchronizing state of prometheus-node-exporter.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable prometheus-node-exporter
$ sudo service prometheus-node-exporter start  #起動

Linuxでパッケージ無しの場合

Raspberry Pi Zeroで動くVolumioにもnode_exporterを入れてみた。

Twitterなどを見るとVolumioというOSだと思っている人がいるみたいだけど実体はDebian Linux。なので全然特別なものじゃない。で、パッケージ管理システムはaptが使えるが、標準リポジトリにはPrometheus関係は無さげ?
さらに、Volumioを汚染されたたり壊されたりしたくないので様々なパッケージを突っ込んでビルドするのも避けたい。
なのでPrometheusのウェブサイトからビルド済みのバイナリファイルを貰ってくる。

ブラウザでhttps://prometheus.io/download/を開き、ページ上部近くにある「Architecture」プルダウンメニューからarmv6を選んでからスクロールしてnode_exporterのファイルリンクをクリックする、またはリンクURLをコピーしてwget等で取得する。
(Raspberry Pi Zero WはARMv6用のバイナリの方が良いみたい。一応ARMv7用も試してみたがRaspberry Pi Zeroでは動かなかった。Raspberry Pi 2あたりだとARMv7用の方が良い?)

$ wget https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-armv6.tar.gz
$ tar zxvf node_exporter-0.18.1.linux-armv6.tar.gz
$ cd node_exporter-0.18.1.linux-armv6
$ sudo chown root:root node_exporter
$ sudo mv node_exporter /usr/bin/
v0.18.1は2019年8月現在にPrometeus公式でリンクされているバージョン。
/lib/systemd/system/node-exporter.service (新規作成)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
[Unit]
Description=Prometheus exporter for machine metrics
Documentation=https://github.com/prometheus/node_exporter

[Service]
Restart=always
User=prometheus
EnvironmentFile=/etc/node-exporter
ExecStart=/usr/bin/node_exporter $ARGS
ExecReload=/bin/kill -HUP $MAINPID
TimeoutStopSec=20s
SendSIGKILL=no

[Install]
WantedBy=multi-user.target
/etc/node-exporter (新規作成 手動インストールで上のEnvironmentFileで指定したファイル)
または
/etc/default/prometheus-node-exporter (編集 パッケージの場合はこちらが多いかしら?)
1
2
3
ARGS="--collector.diskstats.ignored-devices=^(ram|loop|fd)\d+$ \
      --collector.filesystem.ignored-mount-points=^/(sys|proc|dev|run)($|/) \
      --collector.textfile.directory=/tmp"

または、最初はARGS=""だけでも良い。
逆に要らない情報は出力したくないなら上の例のようなのや、一部のコレクタを停止させるために--no-collector.nfsd --no-collector.nfs のようなの(これはNFS|NFSdコレクタを停止)を追加する。

ユーザー追加
$ sudo useradd prometheus
有効化
$ sudo systemctl enable node-exporter.service
$ sudo service node-exporter start

これでシステム情報を収集(node_exporter)し、情報を蓄積(Prometheus)し、表示(Grafana)するという3つの役割が揃った。
次回はGrafanaを操作して監視情報を表示する。

「やはり裏切ったのかメーテル、この母を。
   お前に全てを与えて、安らかに眠りにつこうとしている、この母を。」

それはプロメシューム・・・

関連記事:

Orange Pi Zero Plusが届いた

Orange Pi Zero Plus

今回購入したシングルボードコンピュータはOrange Pi Zero PlusでSoCがH5でメモリが512MB。基板の大きさが4.5cm x 4.8cm。USBやLANコネクタの出っ張りも入れれば4.5cm x 5.2cm。2年前あたりにたくさん記事を書いたNanoPi NEO2と似たスペックだけど僅かに大きい。(NanoPi NEO2は基板が4cm x 4cm)
全然新製品でも何でもない。NanoPi NEO2と同世代の筈なので2年ほど前からある。最初はSoCがH3のモデルもあったようだが、現在はH5版のみが販売されている。
そして、Orange Pi Zero Plusには無線LANが付属する。この製品は日本の技適は取得していないので日本国内では無線LANを使ってはいけない点に注意。(この記事の最後の方に対策)
Orange Pi Zero Plus最大の利点は性能の割にとにかく安いこと。NanoPi NEO2が現在は値下げされてようやくUS$19.99だが、高い頃は$25とかもっとだっけ?それが、Orange Pi Zero PlusはUS$15ということでNanoPi NEO2の25%引きという安さ。
ただし、電波対策グッズを持っていなくてそれらも購入するとそんなに変わらないことになるかも。

姉妹モデルというか大きさだけ同じでほぼ他人モデルにOrangePi Zero Plus 2というのがあるが、こちらは有線LANが無くて代わりにHDMIと8GBのEMMCメモリとカメラ用のCSI端子が付いている。あと、Bluetoothにも対応。EMMCが付いている分なのかお値段は少し高め。基板直付けのEMMCってあまり嬉しくないんだけどなぁ。技適無いから日本国内ではネットワーク使えないという点に注意。

Orange Pi Zero Plus 1
OrangePiの公式サイトから販売ページのリンクを開くとAliExpressに飛ばされる。だから、Orange Piは基本的にAliExpressで購入ということになるみたい。
注文から少し日数がかかって12日で到着。送料が528円なのでちょっと納得できないかも。
ただ、今回は珍しく箱が全く潰れていない。いつも箱モノはグッシャグシャなのに。

Orange Pi Zero Plus 2
ダンボール箱の中にはさらに小さな白箱が入っている。白箱が中に入っているのはNanoPi NEOシリーズも同じだけど、Orange Piの箱の方がだいぶ安っぽい。

Orange Pi Zero Plus 3
中身は静電気防止袋で密封されたOrange Pi Zero Plusの基板と折りたたまれた説明書1枚。

Orange Pi Zero Plus 4
基板はこんなの。NanoPi NEO2とよく似ている。黒いケーブルで排気管みたいなのが繋がっているのがWi-Fiアンテナ。
で、NanoPi NEO/NEO2は熱を出すSoCが基板の裏側にあるので、熱伝導テープやパッドで適当な大きさのヒートシンクを貼り付けるだけで冷却できるのだが、Orange Piシリーズは何でかSoCが基板の表側(他の大きな部品が並んだ側)にあるのが困りモノ。上の画像の黒いチップで「H5」と書いてあるのがSoC。

Orange Pi Zero Plus 5
ネットワークコネクタとUSBコネクタの側。並びがNanoPi NEO/NEO2とは逆。

Orange Pi Zero Plus 6
基板の裏側。上の画像では白いシールが写っているが、とても軽く貼ってあるだけなので、勝手に剥がれてくる。凸凹の基板に貼り直すのもどうかなと思ったのでネットワークコネクタの上面に貼った。(後の画像ではその状態)

Orange Pi Zero Plus 7
H5はPCのCPUやGPUほどはアッチッチになるわけではないが、それでも無冷却で使えるというものではない。そこでヒートシンク等を付けることになるのだが、前述のように基板の大きな部品のある側に冷却の必要があるSoCが付けられていると、その周りの部品が邪魔で冷却に困ってしまう。
そこで、購入したのが熱伝導パッドの代わりとなる熱伝導ブロック。というか、銅の塊。銅は熱伝導性能が高いのでアルミブロックよりお薦め。で、貴金属ではないので値段も安め。AliExpressでも探したが、程よい大きさのものが無かったので国内で調達。
購入したのはヨドバシの通販サイトで売られていた「光 CZ23 [銅サイコロ 20x20x20mm]」でお値段が購入時385円(送料無料)。ただし、購入時は在庫無しの「お取り寄せ」だったため注文から配達まで1週間かかった。それでも取り寄せで1週間なら速いと思うけど。

Orange Pi Zero Plus 8
熱伝導テープ(両面テープのようなもの)をSoC に貼ってから銅ブロックを上から押し付けるとこんな感じ。 銅ブロックの底面が20x20mmでSoC 14 x 14mmに貼るので当然はみ出る。隣には多少熱を出すネットワークチップとメモリチップがあるのでその上に銅ブロックがはみ出るのは構わない筈。ただし、ネットワークチップは僅かにSoCのチップより厚さがあるのであまりに薄手の熱伝導テープだとチップの段差で銅ブロックがSoCに密着しない。今回は運良く熱伝導テープの厚さのおかげでチップの段差が埋まる形になった。なお、熱伝導テープという両面テープは接着力がアホみたいに高いので、貼って上から圧力をかけたらもう普通の力では剥がれない、というかチップが基板から剥がれる可能性があるから剥がそうとしちゃダメ。そこだけ本当に注意。

Orange Pi Zero Plus 9
銅ブロックは熱伝導は良いけど熱を逃がすには表面積が狭すぎるので放熱部が必要。普通はある程度の大きさのヒートシンクを付けることになる。銅ブロックとヒートシンクも熱伝導テープで貼る。仮止めならCPU用のようなグリスを使う。
写真のはH5の発熱に対してはヒートシンクが大きすぎるかも。

Orange Pi Zero Plus 10
昔使ってた2Uサーバの趙薄型CPU冷却ファンについていたヒートシンク部分だけ。これが大きさとしては良さげだけど屋外でこの脆そうな冷却フィンはどうかしら。考え中。
合わせて先日AliExpressで購入した16GBのmicroSDカードと左の黒いのがダイソーの2.1AのUSBのACアダプタ。
この構成で使うつもり。

Orange Pi Zero Plus 11
ところで、Orange Pi Zero Plusには無線LANが付いている。しかし、最初にも書いたけどこの製品は技適は通っていないので無線LANは使っちゃダメ。今回は有線LANを使うつもりだけど、たとえそのつもりであっても、電源を入れて使うともしかしたらお漏らしがあるかもしれない。個人でこっそりでもアウト。ましてブログで書くのに何も対策無しだとネットの技適警察の人から怒られてしまう。
そこで、最初から付いている外付けアンテナを外した。上の写真の1番下。(でも、これだけじゃダメ)
以前にRaspberry Pi Zeroに外付けアンテナを付けた際にも登場したIPX端子とSMA端子の変換ケーブルを用意。(意外とよく使うのでストックしている)それが写真の左上からUになっているケーブル
そして、中段の左側に写っている金色の栓みたいなのがSMA端子用のダミーロード(終端抵抗)。
ダミーロードは中に抵抗が入っていて電波を出す筈の高周波信号のエネルギーを熱に変換するもの。対応する出力や周波数がいろいろあるのでWi-Fiに合うものを付ける。インピーダンスも種類がある。今回はケーブルもダミーロードも一般的な50Ωで統一している。 Wi-Fi用なので写真のように小さな栓のようなものだが、出力の大きい送信機用だったりすると巨大な放熱器付きの金属の塊のようなもの(高価)だったりする。Wi-Fiなら出力が微小で熱くもならないので小型で安価、100円程度からある。
ちょっとしたものだけど、これを付けると電波のお漏らしもないので技適警察の人にも叱られない。

今回はまだOSの準備が出来ていないので動かすところまでやってない。NanoPi NEO/NEO2ではArmbian (Debian)を使ってたのでOrange Pi Zero PlusでもArmbianを使うことになるかしら?