orangepi-win(armbian x64)を監視用ダッシュボードにするために色々とインストールを行う。
arm64用のパッケージが古かったり提供されてなかったりで色々と面倒。
監視用ダッシュボード
grafanaを使用してウェブブラウザで各種メトリクスデータをグラフ表示するもの。
メトリクスデータは以下のものを収集。
- システムのメトリクスデータ
- 外部Webサービスの応答速度
- websocketやweb apiで収集したセンサー値など
1番、2番に関してはprometheusを使用して収集する。それぞれnode_exporter、blackbox_exporterが追加で必要になる。
3番は、node-redを使用してデータフローを作成して対応する。メトリクスデータの保存にはinfluxdbを使用。
以下、必要となるソフトウェアのインストール方法をメモしていく。
node-redデータフローの内容やgrafanaダッシュボードの作り方は記載しない。
influxdb
https://www.influxdata.com/
influxDBは時系列データの扱いに特化したデータベース。
時系列データベースとして採用例が多いgraphiteより後発のもの。
インストールはaptで素直に入る。
ついでにnode-redからの書き込み用のデータベースを作成しておく。
$ sudo apt install influxdb influxdb-client
$ influx
> create database things
http apiで更新可能のためか、簡易なWebUIが付属している。
http://127.0.0.1:8083prometheus
https://prometheus.io/prometheusはpull型のサーバー監視ツール。k8s環境で使われることが多い印象。
arm64版のパッケージがレポジトリに登録されていないのでインストールは少し面倒。
公式サイトからバイナリを入手してインストールする必要がある。
$ wget https://github.com/prometheus/prometheus/releases/download/v2.2.1/prometheus-2.2.1.linux-arm64.tar.gz
$ sudo tar xvfz prometheus-2.2.1.linux-arm64.tar.gz -C /opt
$ cd /opt
$ sudo ln -s prometheus-2.2.1.linux-arm64/ prometheus
$ sudo vi /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
User=root
Group=root
Type=simple
ExecStart=/opt/prometheus/prometheus --config.file /opt/prometheus/prometheus.yml
[Install]
WantedBy=multi-user.target
$ sudo systemctl daemon-reload
$ sudo systemctl enable prometheus
また、prometheusではメトリクスデータの収集に各種exporterが必要。
システムメトリクスの収集はnode_exporter
、外部サービスの死活監視はblackbox_exporter
を使用する。
これらも同じようにインストール。手順はほぼ一緒なので省略。
インストールが完了したら、/opt/prometheus/prometheus.yml
を編集してjobを登録する。
...
scrape_configs:
...
- job_name: 'node_exporter'
static_configs:
- targets: ['localhost:9100']
- job_name: 'blackbox_http'
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- http://example.com
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 127.0.0.1:9115
最後にsystemdで自動起動を有効にする。
$ sudo systemctl daemon-reload
$ sudo systemctl enable prometheus
$ sudo systemctl enable node_exporter
$ sudo systemctl enable blackbox_exporter
node-red
https://nodered.org/
node-redはビジュアルデータフロープログラミングツール。
"mqttでセンサーデータを受信、influxdbへ保存"みたいなことがマウスでポチポチするだけで出来あがる。
nodejs製のWebアプリなので、インストールにはnpmを使用する。また、daemon化にはpm2を使用した。
$ sudo npm install -g --unsafe-perm node-red
$ sudo npm install -g pm2
プロセス構成を作成してsystemdへ登録する。
$ sudo su
$ pm2 start node-red
$ pm2 save
$ pm2 startup
WebUIはポート1880番を使用。
http://127.0.0.1:1880
WebUIにアクセスし、node-red-contrib-influxdb
を設定から追加。
その後、マウスでポチポチしてデータフローを組み上げる。
例えば、以下のようなデータフローを作成する。
websocket接続 -> 受信データのフィルタと成形 -> influxdbへ追加 定期実行 -> httpリクエスト -> レスポンスデータのフィルタと成形 -> influxdbへ追加
grafana
https://grafana.com/
grafanaはwebブラウザ向けのデータビジュアライゼーションツール。kibanaからフォークして誕生した。
ストレージにinfluxdbやprometheusが使用可能。
aptリポジトリ版はUIが壊れた(アイコンが表示されない)不具合のある旧版なので公式パッケージを使用。
$ wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana_5.0.4_amd64.deb
$ sudo dpkg -i grafana_5.0.4_amd64.deb
一旦、homepathを指定して起動してやる。
$ sudo grafana-server -homepath /usr/share/grafana
自動起動を有効にする。
$ sudo systemctl enable grafana-server
WebUIはポート3000番を使用。
http://127.0.0.1:3000
初期アカウントはユーザー、パスワード共にadmin
。
メニューのData Sources
からinfluxdbとprometheusを追加しておく。
Type: InfluxDB Url: http://localhost:8086 Type: Prometheus Url: http://localhost:9090
その後、こちらもマウスでポチポチしてダッシュボードを作成していく。
公開されているものをインポートしてから調整していくと少しは楽できる。
結構大掛かりになったが、以上でセットアップは完了。
メトリクスデータが僅かなこともあって、非力なorange-piでも一応は動作しているが、それなりに負荷はかかっているよう(特にinfluxdb)なので、そのうち破綻しそうな気はする。