概要
住んでいるマンションで標準提供されているインターネットサービスの「通信速度」が予想以上に低速で、この通信速度の推移を計測していたのですが、これをZabbixで自前に管理しようというのが、本件です。
前提条件
- Raspberry Pi 3B+
- Raspbian(bullseye)
pi@raspberrypi:~ $ sudo cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 11 (bullseye)"
NAME="Raspbian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
前置き
実は、速度計測は、下記の記事を参考にMackrel( https://ja.mackerel.io/ )で計測してました。
が、自宅のラズパイの計測をしているだけ(いわゆる1台の監視)なのに、月1833円を払うのは流石にないな、、、ということで、2週間のトライアル期間を終えてフリーで使うことを決めたんです。
ところが、、、思った以上にフリー版だと制限があって(単に自分が比較表をしっかりみてなかっただけ)、このままでは計測になってないなということから、代替手段を考えることにしました。
- 主な制限事項
- カスタムダッシュボードが使えない(bpsではなくBpsで計測されるのでbps変換がカスタムダッシュボードではできる)
- 表示期間が1日(24H)しかできない
致命的だったのは、表示期間1日という制限。
これ、表示は1日。というのが、週や月では見れないけど、日付を変えれば昨日や一昨日が見れると思っていたんですが、そうではなくDBに記録されるのが1日分しかしないということのようで、一日区切り(つまり最大47時間59分間)が見れるのかと思ったら、きっちり24時間しかみれない。
現在時刻からー24時間しかみれないのだ、、、、。
早速Zabbix版を作る
■Zabbix
https://www.zabbix.com/jp
手順1:MySQLをインストールする(ラズパイなのでMariaDB)
※すでにインストール済みの人は不要です。
pi@raspberrypi:~ $ sudo apt install mariadb-server
インストールが済んだら、セキュリティだけ確保します。
pi@raspberrypi:~ $ sudo /usr/bin/mysql_secure_installation
そして、MariaDBを起動します。
pi@raspberrypi:~ $ sudo systemctl start mariadb.service
手順2:Zabbixをインストールする
基本的には、Zabbixのインストール手順説明の通りでOKです。
Zabbixリポジトリをインストールする
pi@raspberrypi:~ $ sudo wget https://repo.zabbix.com/zabbix/6.0/raspbian/pool/main/z/zabbix-release/zabbix-release_6.0-2+debian11_all.deb
pi@raspberrypi:~ $ sudo dpkg -i zabbix-release_6.0-2+debian11_all.deb
pi@raspberrypi:~ $ sudo apt update
Zabbixサーバー、フロントエンド、エージェントをインストールします
pi@raspberrypi:~ $ sudo apt install zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent
初期データベースを作成する
pi@raspberrypi:~ $ sudo mysql -uroot -p
MariaDB> create database zabbix character set utf8mb4 collate utf8mb4_bin;
MariaDB> create user zabbix@localhost identified by '(パスワード)';
MariaDB> grant all privileges on zabbix.* to zabbix@localhost;
MariaDB> quit;
Zabbixサーバーホストで初期スキーマとデータをインポートします。新しく作成したパスワードを入力するように求められます。
pi@raspberrypi:~ $ sudo zcat /usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz | mysql -uzabbix -p zabbix
設定した「(パスワード)」を入力する
Zabbixサーバー用にデータベースを設定する
pi@raspberrypi:~ $ sudo vi /etc/zabbix/zabbix_server.conf
# DBPassword=password
↓
DBPassword=password
Zabbixフロントエンド用にPHPを設定する
pi@raspberrypi:~ $ sudo vi /etc/zabbix/nginx.conf
# listen 80;
# server_name example.com;
↓
listen 80
server_name raspberrypi.local
★追記
ローカル内でサーバを立てていると、iPhoneやiPadなどからアクセスするとZabbixのログインページではなくApache2のデフォルトページが表示されることがあります。
原因は、IPv4ではなくIPv6でアクセスするため、上記の設定ではIPv6のアクセスに応答できません。
そこで、下記のように設定を変更します。
pi@raspberrypi:~ $ sudo vi /etc/zabbix/nginx.conf
# listen 80;
↓
listen 80;
listen [::]:80;
これで、IPv6でも応答します。
あとは、nginxを再起動します。
pi@raspberrypi:~ $ sudo systemctl reload nginx
----追記ここまで----
Zabbixサーバーとエージェントのプロセスを開始します
pi@raspberrypi:~ $ sudo systemctl restart zabbix-server zabbix-agent nginx php7.4-fpm
pi@raspberrypi:~ $ sudo systemctl enable zabbix-server zabbix-agent nginx php7.4-fpm
手順3:Zabbixフロントエンドの設定をする
Webブラウザを開いて、「http://raspberrypi.local 」へアクセスします。
後は、Zabbixの手順書( https://www.zabbix.com/documentation/6.0/en/manual/installation/frontend )を読みながら進めます。
早速、Zabbixへログインしようと、、、、と思ったら、ID/PWが一致しない人、、、、
よく読もう。
手順4:Zabbixに日本語表示を・・・・
Zabbixへログインします。
当然、あるだろうと思っていたLocaleもないのか、、、、
しょうがない。追加しよう。
まずは、Locale情報をインストールする
pi@raspberrypi:~ $ sudo dpkg-reconfigure locales
まずは、en_US。(あれ、en_GBはもともと入ってたのか・・・)
そしてラズパイを再起動する
で、再度Zabbixのページへアクセスして、左側のメニューの「User settings」-「Profile」と選択し、「Language」から「j_JP」を選択して更新すると、日本語になります。
SpeedTest CLIをインストールする
■SpeedTest CLI
https://www.speedtest.net/ja/apps/cli
RaspbianにインストールするSpeedtest CLIは「armhf」用が必要なので、下記からDLします。
DLしてきた「ookla-speedtest-1.1.1-linux-armhf.tgz」を解凍して、/ur/binに配置します。
pi@raspberrypi:~ $ sudo tar -xzvf ookla-speedtest-1.1.1-linux-armhf.tgz
pi@raspberrypi:~ $ sudo mv speedtest* /usr/bin/
これでSpeedTest CLIの配置完了です。
pi@raspberrypi:~ $ /usr/bin/speedtest
Speedtest by Ookla
Server: Cloudflare - Osaka (id = 48296)
ISP: NTT
Latency: 17.44 ms (3.37 ms jitter)
Download: 250.11 Mbps (data used: 254.7 MB )
Upload: 76.62 Mbps (data used: 133.6 MB )
Packet Loss: Not available.
Result URL: https://www.speedtest.net/result/c/be38028d-e738-450b-84ec-cb4abca57b77
ZabbixとSpeedTest CLIを連携する
参考:Zabbixで自宅のインターネット回線速度を監視する – Speedtest CLI
https://devlog.arksystems.co.jp/2021/03/23/14553/
まずは、Speedtestの通信先を設定します
pi@raspberrypi:~ $ /usr/bin/speedtest -L
Closest servers:
ID Name Location Country
==============================================================================
48296 Cloudflare Osaka Japan
6527 kdatacenter.com Seoul South Korea
48292 Cloudflare Seoul South Korea
8407 Allied Telesis Capital Corporation Sagamihara Japan
6087 Allied Telesis Capital Corporation Fussa-shi Japan
30230 Lequios Naha City Japan
21118 GLBB Japan Naha Japan
44285 Active Style Inc Naha Japan
31181 Allied Telesis Capital Corp. Okinawa Japan
44988 Misaka Network, Inc. Tokyo Japan
続いて、Zabbix_Senderをインストールする
pi@raspberrypi:~ $ sudo apt install zabbix-sender
pi@raspberrypi:~ $ which zabbix_sender
/usr/bin/zabbix_sender
実行するShと、定期実行するshを作成する。
実行するshellスクリプト
pi@raspberrypi:~ $ vi zabbix_sender_speedtest.sh
スクリプトはこんな感じ。(Mackerel版でServerのIDを固定していたので、こっちも同じにしている)
#!/bin/bash
SPEEDTEST_RESULT=`/usr/bin/speedtest -f json -p no -s 14623`
ZABBIX_SERVER=127.0.0.1
ZABBIX_HOSTNAME=speedtest.net
ZABBIX_ITEMKEY=speedtest.json
/usr/bin/zabbix_sender -z $ZABBIX_SERVER -s $ZABBIX_HOSTNAME -k $ZABBIX_ITEMKEY -o "$SPEEDTEST_RESULT"
一応、実行権限を付与する
pi@raspberrypi:~ $ chmod +x zabbix_sender_speedtest.sh
そして、定期実行のスクリプト
pi@raspberrypi:~ $ sudo vi /etc/cron.d/zabbix-speedtest
中身はこんなの
SHELL=/bin/sh
PATH=/usr/bin
*/5 * * * * root cd /home/pi && ./zabbix_sender_speedtest.sh
これで、5分おきにZabbixへ送ってくる
Zabbix側の待ち受け
Zabbix側に勝手に送っても受け取れないので、処理できるようにします。
もともとZabbixのServerと同居する状態なので、Host情報が同じです。
なので、ホストもSpeedtest用に作ります。
「設定」から「ホスト」を選択し、右側に表示されたホストの設定画面の右上から「ホストの作成」をクリックします。
「ホスト名」には適当な名前をつけます。
「グループ」も必須になっているので「選択」ボタンを押して、適当に(いいのか?)選びます。
そして「追加」ボタンをクリック!
続いて、「アイテム」を追加します。
「アイテム」の追加は、下記のリンクをクリックして、開いた画面の右上から「アイテムの追加」です。
あとは、参考サイト( https://devlog.arksystems.co.jp/2021/03/23/14553/ )を見ながら、追加していけばOKです。
一旦、これくらいアイテムとして追加しました。
グラフは、Download/Upload/Packet Loss/Latencyの4つをひとまず表示してます。
最後に
気になったので、修正しておきます。
そう、この豆腐。
ん~、やりたいこと全部書いてあるサイトみつけたので貼っておきます。
■Raspberry Pi 【Zabbix編】グラフの文字化けを解消する方法
https://www.ingenious.jp/articles/howto/zabbix-howto/zabbix-graph-garbled/
pi@raspberrypi:~ $ sudo apt list | grep ipafont
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
fonts-ipafont-gothic/stable 00303-21 all
fonts-ipafont-mincho/stable 00303-21 all
fonts-ipafont-nonfree-jisx0208/stable,oldstable 1:00103-7 all
fonts-ipafont-nonfree-uigothic/stable,oldstable 00203-26 all
fonts-ipafont/stable 00303-21 all
pi@raspberrypi:~ $ sudo apt install fonts-ipafont-gothic
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
(省略)
pi@raspberrypi:~ $ sudo ln -s /usr/share/fonts/opentype/ipafont-gothic/ipagp.ttf /usr/share/zabbix/assets/fonts/ipagp.ttf
pi@raspberrypi:~ $ sudo vi /usr/share/zabbix/include/defines.inc.php
82行目と127行目付近
define('ZBX_GRAPH_FONT_NAME', 'graphfont');
define('ZBX_FONT_NAME', 'graphfont');
↓
define('ZBX_GRAPH_FONT_NAME', 'ipagp');
define('ZBX_FONT_NAME', 'ipagp');
おぅいえぃ!
さて、これでしばらく観察しよう。