2021年7月31日土曜日

時系列DBにまみれる...InfluxDBの設定

今日は

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でゴー

参考リンクからコピーして中身を修正します。

  1. influxdb:latest → armv7/influxdb:latest
  2. networkを前回Prometheusで構成した既存のgrafana_frontに
  3. chronografのポート8888がIPv6のポートと当たっているので待ち受けポートを8890へ変更
  4. パスワード等は、.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

2021年7月17日土曜日

派手なdashboardに表示する

grafanaをインストールして見た目を派手に

zabbixの構築とagentをインストールしてwin10の監視、pingを使ってマイコンの監視をやってきました。見た目も重要なので、ダッシュボードを派手にするためにgrafanaを使ってみます。

インストールは、参考リンクのとおりで問題ありません。

環境

Pizero + debian

zabbix-server 4.0

インストール

参考リンクのとおり、以下の手順で問題ありません。

sudo apt-get install -y apt-transport-https
sudo apt-get install -y software-properties-common wget
wget -q -O - <https://packages.grafana.com/gpg.key> | sudo apt-key add -
echo "deb <https://packages.grafana.com/enterprise/deb> stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install grafana-enterprise

参考リンクは、64bit版のようです。これはインストールできますが、動きません。

ARMv6用のパッケージは、こちらでした。

Ubuntu and Debian(ARMv6)SHA256: d3a688fe3f7ec68bb5ca33c88af655ab53254e4fddab649a9b6f3f758b0a7341

$sudo apt-get install -y adduser libfontconfig1
$wget <https://dl.grafana.com/oss/release/grafana-rpi_8.0.3_armhf.deb>
$sudo dpkg -i grafana-rpi_8.0.3_armhf.deb

これで、deamonをreloadして、再起動すると動くはず。

きたーーーー。

デフォルトのID/PASSは、admin/adminだそうです。

zabbixをデータソースに使えるプラグインがあるそうです。それもインストールします。

#zabbixプラグインのインストール
grafana-cli plugins install alexanderzobnin-zabbix-app
#grafanaの再起動
systemctl restart grafana-server

datasourceをzibbix-serverにして、適当なdashboardをimportするとあっという間に派手な監視画面が表示できます。

今日のまとめ

視聴化の代表となっているgrafanaを使って、zabbix-serverの状況を派手に可視化する事を試してみました。一昔前なら、ライセンス料お高めのソフトを購入しないとここまでは出来なかったと思います。OSSでここまで出来るとはおどろきです。

参考リンク

garafanaインストール

Grafanaの導入メモ

zabbix pluginのインストール

Grafanaを使ってZabbixの監視画面を作成する - あきろぐ

 

2021年7月10日土曜日

Pi zero zabbix server(設定編),agent

今回は

zabbixの構築は前回まとめました。今回は、serverの設定とagentの導入です。

ようやくZabbixの設定です

初期画面からいい感じで進んでいましたが、早速DBの設定でつまづきます。

「Cannot connect to the database.」とのこと。IDやパスワードなどはあってるのですが。

/var/log/apache2
/var/log/mysql
/var/log/zabbix-server

それぞれの中身を見ながら原因探求です。

phpのmysql関連のライブラリーが入ってないようです。

/usr/share/doc/zabbix-frontend-php/README.Debianにこのように書いてありました。

Configuring the Zabbix frontend
-------------------------------

 Please point your Browser to <http://yourserver/zabbix/> in order to configure
 your zabbix-frontend. The default username is "Admin" with password
 "zabbix". To prevent other users from viewing your data, change this
 password immediately after logging in.

 If you are using PostgreSQL as a database backend please make sure that
 the 'php-pgsql' package is installed. Similarly 'php-mysql' is needed if
 you are using MySQL database backend.

$sudo apt-get install php-mysql

これで再起動するとログイン画面までたどり着きました。

user:Admin, Pass:zabbixでログインできます。ようやくここまでたどり着きました。

今度はswapが足りないようです。

pi@pizero:/etc $ swapon -s
Filename                                Type            Size    Used    Priority
/var/swap                               file            102396  102372  -2

参考リンクのとおり100Mから512Mへ増やしました。

pi@pizero:/etc $ swapon -s
Filename                                Type            Size    Used    Priority
/var/swap                               file            524284  0       -2

監視対象にAgentを導入します

win10にzabbix-agentをインストールして監視してみます

試しにWin10にagentをインストールしてみます。参考リンクのとおりにやれば問題ありません。Win10のfirewallはポート10050と10051が解放されていなので設定が必要です。

あとは、zabbixのダッシュボードに監視対象ホストを追加します。agentからは各種情報がレポートされるのでどの値をダッシュボードに表示させるのか選ぶ必要があります。

マイコンの監視はどうするか

非力なOSの無いプロセス1個のマイコンの監視はどうするか。先人の知恵を探っていると、

  1. プログラム内に簡易snmpを埋め込む
  2. プログラム内にzabbix agent senderを埋め込む

いずれもプログラム内にコードを埋め込んで、一定時間毎にserverにデータを送信する仕組みです。これでもいいのですが、マイコン内の情報を吸い出せるわけではないので、自分で体温計で熱を測ってメールで医者に送って記録してもらう感じです。

医者が聴診器を当ててもしもしする方法としては、pingによる応答を記録するような監視が可能です。というか、これしかないです。esp32は、WiFi接続してるとICMPにも応答します。ただし、消費電力下げるためにDeepSleepしてるとWiFi機能もオフになるので反応しません。引き続き試しながら進めていきたいと思います。

今日のまとめ

先週構築したzabbix serverの設定とWin10にagentをインストールして、監視の状況を確認しました。引き続きマイコンの監視をどうするのか試行錯誤進めていきたいと思います。

参考リンク

swap領域の拡張

Raspberry Pi のスワップ領域拡張 - Qiita

esp32のzabbix-agent

Zabbix Share - Zabbuino

Win10にzabbix-agentをインストールする

Windows10にZabbix Agentをインストールする

Win10のfiwewallの設定

Zabbix による Windows マシンのエージェント監視 ~ 1. エージェントのインストール ~

zabbix-serverの監視対象の追加

監視対象の追加

 

2021年7月3日土曜日

Pi zero+zabbix server(構築編)

今回は

M5stackのmqtt送信を試験していますが、不定期で送信停止状態になってることがあります。何が原因なのか調べるためにzabbixで監視したいというのがとっかかりです。ちゃちゃっとdockerで構築のつもりが...

Pizeroの準備

Pizeroは、半年ほど温度湿度センサーの値をambientへ送り続ける役目で連続運用してました。たまにapt updateしましたが、基本放置。久しぶりにupdateしてdockerをインストールしようとするも、errorが大盛です。やりたくないけど、SDカードをフォーマットして再構築です。

Pizeroは、ご存じのとおりUSBがマイクロ、HDMIもminiとアダプターが必要なので、出来ればキーボードや画面を接続せずに再設定したいところ。

「Pizero 配線レスインストール」など、いい感じの先人はいますが、簡単にはいかず。結局、キーボードと画面接続して、再設定完了です。

dockerとdocker-composeの設定

Pizeroは、debian 32-bitです。dockerのインストールは簡単です。参考リンクにあるスクリプトを動かせば、以下のとおり設定完了です。時間もそうかかりません。

Client: Docker Engine - Community
 Version:           20.10.7
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        f0df350
 Built:             Wed Jun  2 11:57:27 2021
 OS/Arch:           linux/arm
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.7
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       b0f5bc3
  Built:            Wed Jun  2 11:55:25 2021
  OS/Arch:          linux/arm
  Experimental:     false
 containerd:
  Version:          1.4.6
  GitCommit:        d71fcd7d8303cbf684402823e425e9dd2e99285d
 runc:
  Version:          1.0.0-rc95
  GitCommit:        b9ee9c6314599f1b4a7f497e1f1f856fe433d3b7
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

 docker-composeは、$sudo apt-get install docker-composeです。

pi@raspberrypi:~/docker $ docker-compose -v
docker-compose version 1.21.0, build unknown

ユーザーpiのpermission問題等を片付けて、dockerの動作確認です。

pi@pizero:~/docker $ docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (arm32v5)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 <https://hub.docker.com/>

For more examples and ideas, visit:
 <https://docs.docker.com/get-started/>

 

おーー。ちゃんと動いてます。

この調子でzabbixもちゃちゃっといきましょう。参考リンクのとおり進めます。

pi@pizero:~ $ docker run --name zabbix-appliance -t -p 10051:10051 -p 80:80 -p 443:443 -d zabbix/zabbix-appliance:latest
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm/v6) and no specific platform was requested
c5e82cf34de3b3d1202c469ca27acff11d01836c8ea234974acbe1f51fa3474b

そういうことね、64bit用でしたか。残念。はぁ~。

dockerよりapt-getでしょ

気を取り直してdockerに固執せず、pkgをインストールしてみます。必要なのは、以下のの2つのようです。

  1. zabbix-server-mysql
  2. zabbix-frontend-php

pizeroの状況もモニタするために、以下もインストールします。

  1. zabbix-agent

pkgをインストールしただけ動きません。参考リンクのとおりmysqlに手動でDBの設定が必要です。MySQLにZabbixデータベースを作成します。

# mysql -uroot
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
mysql> exit
 

初期スキーマとデータをインポートします。

# cd /usr/share/zabbix-server-mysql/
# mysql -uroot zabbix < schema.sql
# mysql -uroot zabbix < images.sql
# mysql -uroot zabbix < data.sql
 

順調かと思ってるとここで止まります。 

pi@pizero:~/docker/zabbix $ mysql -uroot zabbix < schema.sql
ERROR 1118 (42000) at line 1278: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.
 

mysql(mariaDB)のバージョンによって解決方法が違うようです。schema.sqlの先頭に以下の2行を入れると解決できました。

SET GLOBAL innodb_default_row_format='dynamic';
SET SESSION innodb_strict_mode=OFF;
 

ここまでたどり着くのは長かったです。mysqlもはまりどころ満載でした。無事DBは構成できました。あと少しです。このモジュールを入れます。

$sudo apt-get install libapache2-mod-php

このコマンドを打つと、zabbix-frontend-php関連のconfをapache2のモジュールフォルダーにリンクを張ってくれます。

$sudo a2enconf zabbix-frontend-php

ようやくこの画面にたどり着きました

ブラウザーからhttp://IP_address/zabbixをたたくと、このように設定画面に移行します。

dockerで15分と妄想してましたが、がっつり週末をかかりました。やってみるといろいと勉強にはなります。このように考えないと心が折れそうです。これからZabbixの使い方を勉強します。

インストールの振り返り

Pizeroは、シングルコアでarmv6と世代が古いためVScodeが使えません。最近はVScodeと拡張機能におんぶにだっこでしたが、久しぶりのCLIは手間と時間がかかります。昔はこれしかなかったのでカチカチコマンド叩いてました。emacs+lispに乗り換えた時、ちょっと便利になったと思いましがVScodeはそれ以上です。

ここまでのまとめ

Pizeroにzabbix-serverをインストールしました。dockerでちゃちゃっとはいかず、pkgを入れてDBの構成や細かな設定が必要でした。先人の知恵は、zabbix,DB,phpのバージョンが異なるネタが各種あるので、選別する必要があります。それがわかるまで結構時間を要しました。次は、使い方を勉強したいと思います。

参考リンク

pizero doker

Raspberry Pi Zero WでDockerを使う - みーのぺーじ

zibbix

DockerのZabbixをRaspberry Pi上で運用する

Zabbix 5.0 LTSをコマンド2つで構築する - Opensourcetechブログ

zabbixをpkgインストール

Zabbix Documentation 5.4

ページ引っ越しました

このページは、以下に引っ越しました。内容も逐次移行中です。引き続きよろしくお願いします。  https://hkaji.github.io →こちら