今日は
zabbix監視を始めて以来、時系列データの監視にのめり込み、Prometheus環境の構築でニンマリ。これは、docker-composeで構築できたので、そう労力はかからず。M5stackの内部情報の監視は出来たものの、mqttプログラムとの同居が難しい感じ。ということで、M5stackの内部情報をpushで受け取ってくれるものを探していると、InfluxDBを使うとできそうだと先人の知恵。
今回もdocker-composeでお気軽構築を目指したいと思います。
構成
この図のようにdockerに頼り切って構成したいと思います。
準備
pi_zeroには、dcokerとdocler-composeは、インストール済みです。pi_zeroは、VScodeでremote接続できないので、手動でいきます。
そうは問屋が...
毎度のことですがdocker問屋は、なかなか一発で卸してくれません。在庫がないとか、発注伝票が違うとかしょっちゅうです。pi_zeroの公式armv6イメージはカタログにないそうで。あーーそうですか。自作物がアップロードされていましたが動きません。
pi_zeroはあきらめて、pi4bで確認します。pi4bには、Prometheusが動いていますが同居してもまだリソースは大丈夫そうです。
構成を再検討
armv6イメージ無い問題のためarmv7環境のpi4bに構築します。ポートが当たらないように、新たな構成図です。
ようやくdocker-compse.ymlでゴー
参考リンクからコピーして中身を修正します。
- influxdb:latest → armv7/influxdb:latest
- networkを前回Prometheusで構成した既存のgrafana_frontに
- chronografのポート8888がIPv6のポートと当たっているので待ち受けポートを8890へ変更
- パスワード等は、.envから読み込む
修正したものは、参考リンクへ張っておきます。
設定ファイルの作成
${HOME}/docker/influxdbで、設定ファイルの作成が必要です。
# docker run --rm arm32v7/influxdb influxd config > influxdb.conf
# docker run --rm arm32v7/telegraf telegraf config > telegraf.conf
mysqlと同様にDBの作成等面倒な作業が必要です。RDBとほぼ同じなSQL作業です。user追加等をいろいろと先人の知恵を拝借しました。この辺は、Prometheusの方がお気軽な感じです。
chronografって何?
これまでは、httpのpostでDBの作成やuser管理が出来たようですが、セキュリティな観点からか専用のchronografと言うパッケージから管理ができるようです。DBの視覚化と管理ツールです。grafanaほどの派手さはありません。dashboardもちまちま設定しないといけないのでちょっと面倒です。
garafanaのdashboardから見てみると
grafana+influxDB+telegrafと検索すると、サンプルは沢山あります。DLが多いdashboard(ID:1443)をimportするとこのような画面になります。
今日のまとめ
時系列DBのInfluxDBと関連ソフトウェアtelegraf,chronografを構築設定しました。pi4bの監視ができていることまでは確認出来ました。telegrafの使い方をもう少し勉強してUDPデータを受け取れるように変更し、M5stackの監視が出来るのか確認していきたいと思います。
参考リンク
raspi docker influxDB
Running influxdb on Raspberry Pi using Docker compose
esp32 telegraf arduino code
How to send sensor data to InfluxDB from an Arduino Uno | InfluxData
telegraf UDP listener
Telegraf Socket Listener Input Plugin | Blog | InfluxData
influxDB+telegraf+chronograf docker-compse.yml (.envが必要です)
version: "3"services:
influxdb:
image: arm32v7/influxdb:latest
container_name: influxdb
restart: always
env_file:
- .env
networks:
- prometheus_front
ports:
- "8086:8086"
volumes:
- $HOME/docker/influxdb/data:/var/lib/influxdb
- $HOME/docker/influxdb/influxdb.conf:/etc/influxdb/influxdb.conf:ro
- $HOME/docker/influxdb/init:/docker-entrypoint-initdb.d
environment:
- INFLUXDB_ADMIN_USER=${INFLUXDB_USERNAME} # sourced from .env
- INFLUXDB_ADMIN_PASSWORD=${INFLUXDB_PASSWORD} # sourced from .env
telegraf:
image: telegraf:latest
restart: always
container_name: telegraf
networks:
- prometheus_front
volumes:
- $HOME/docker/influxdb/telegraf.conf:/etc/telegraf/telegraf.conf:ro
chronograf:
container_name: chronograf
restart: always
image: chronograf:latest
ports:
- "8890:8888"
depends_on:
- influxdb
networks:
- prometheus_front
environment:
- INFLUXDB_URL=http://influxdb:8086 # needs to match container_name
- INFLUXDB_USERNAME=${INFLUXDB_USERNAME} # sourced from .env
- INFLUXDB_PASSWORD=${INFLUXDB_PASSWORD} # sourced from .env
networks:
prometheus_front:
external: true