2018-06-03

node-red + influxdb + prometheus + grafanaでorange-pi-winへダッシュボードを作る

orangepi-win(armbian x64)を監視用ダッシュボードにするために色々とインストールを行う。
arm64用のパッケージが古かったり提供されてなかったりで色々と面倒。

監視用ダッシュボード

grafanaを使用してウェブブラウザで各種メトリクスデータをグラフ表示するもの。

メトリクスデータは以下のものを収集。

  1. システムのメトリクスデータ
  2. 外部Webサービスの応答速度
  3. websocketやweb apiで収集したセンサー値など

1番、2番に関してはprometheusを使用して収集する。それぞれnode_exporter、blackbox_exporterが追加で必要になる。
3番は、node-redを使用してデータフローを作成して対応する。メトリクスデータの保存にはinfluxdbを使用。

以下、必要となるソフトウェアのインストール方法をメモしていく。
node-redデータフローの内容やgrafanaダッシュボードの作り方は記載しない。

※センサーデータの配信サーバーデバイスを自作してやろうという変人は著作のこちらも参考にどうぞ。 esp8266向けのhttp/websocket apiサーバーです。

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:8083

prometheus

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)なので、そのうち破綻しそうな気はする。

都会派のカメはヒキガエルと言うそうです