SpeedTest CLI結果をZabbixで定期観測する（Raspberry Pi3B+）

# 概要
住んでいるマンションで標準提供されているインターネットサービスの「通信速度」が予想以上に低速で、この通信速度の推移を計測していたのですが、これを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/ )で計測してました。

https://dev.classmethod.jp/articles/202110-continuous-speedtest-with-mackerel/

が、自宅のラズパイの計測をしているだけ（いわゆる1台の監視）なのに、月1833円を払うのは流石にないな、、、ということで、2週間のトライアル期間を終えてフリーで使うことを決めたんです。

![st001.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/df44d083-71ef-dcbd-dc0d-40d0b08183a5.png)

ところが、、、思った以上にフリー版だと制限があって（単に自分が比較表をしっかりみてなかっただけ）、このままでは計測になってないなということから、代替手段を考えることにしました。

- 主な制限事項
    - カスタムダッシュボードが使えない（bpsではなくBpsで計測されるのでbps変換がカスタムダッシュボードではできる）
    - 表示期間が1日（24H）しかできない

致命的だったのは、表示期間1日という制限。
これ、表示は1日。というのが、週や月では見れないけど、日付を変えれば昨日や一昨日が見れると思っていたんですが、そうではなくDBに記録されるのが1日分しかしないということのようで、一日区切り（つまり最大47時間59分間）が見れるのかと思ったら、きっちり24時間しかみれない。
現在時刻からー24時間しかみれないのだ、、、、。

# 早速Zabbix版を作る
■Zabbix
https://www.zabbix.com/jp

ひとまず、ラズパイなので、こんな構成でやってみる
![st002.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/f0247121-85c7-30d0-1c51-8f0919298b22.png)

## 手順１：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
```

## 手順２：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
```
<font color=red>★追記
ローカル内でサーバを立てていると、iPhoneやiPadなどからアクセスするとZabbixのログインページではなくApache2のデフォルトページが表示されることがあります。
原因は、IPv4ではなくIPv6でアクセスするため、上記の設定ではIPv6のアクセスに応答できません。
そこで、下記のように設定を変更します。</font>
```
pi@raspberrypi:~ $ sudo vi /etc/zabbix/nginx.conf

# listen 80;
　↓
listen 80;
listen [::]:80;
```
<font color=red>これで、IPv6でも応答します。
あとは、nginxを再起動します。</font>
```
pi@raspberrypi:~ $ sudo systemctl reload nginx 
```
<font color=red>----追記ここまで----</font>


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
```

## 手順３：Zabbixフロントエンドの設定をする
Webブラウザを開いて、「http://raspberrypi.local 」へアクセスします。

![st003.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/a434376e-3dca-b524-eacf-8daa77c600d0.png)

後は、Zabbixの手順書（ https://www.zabbix.com/documentation/6.0/en/manual/installation/frontend ）を読みながら進めます。

![st004.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/2779e146-a824-5f0c-4795-cc2afde42f7b.png)
![st005.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/8978ee60-61d1-a5da-22cf-dce8b5de5785.png)
![st006.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/d97ee4fc-3f91-83e3-a344-5c2f826ad492.png)
これで、設定は終了です。
![st007.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/399d468f-d688-41fb-29c1-3d2aa3248e9c.png)

早速、Zabbixへログインしようと、、、、と思ったら、ID/PWが一致しない人、、、、
よく読もう。
![st008.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/c6647cee-53be-0f0d-9b19-f975d5d7d9cd.png)

## 手順４：Zabbixに日本語表示を・・・・
Zabbixへログインします。

ぎゃぁ！
![st009.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/1fa8c33d-c437-db32-ff7b-f308e0c3ebaf.png)

当然、あるだろうと思っていたLocaleもないのか、、、、

しょうがない。追加しよう。
まずは、Locale情報をインストールする
```
pi@raspberrypi:~ $ sudo dpkg-reconfigure locales
```
まずは、en_US。（あれ、en_GBはもともと入ってたのか・・・）
![st011.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/258486bf-fe37-d71d-149c-98c5bc9d6744.png)

せっかくなので、日本語も入れておく
![st010.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/07226ae1-eb6f-a0d8-6c8a-c7f82142afc1.png)

で反映。
![st012.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/4a2e65b9-40ca-f92c-af4a-56486c3e6e7d.png)

そしてラズパイを再起動する
で、再度Zabbixのページへアクセスして、左側のメニューの「User settings」-「Profile」と選択し、「Language」から「j_JP」を選択して更新すると、日本語になります。

![st013.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/732c560b-4e70-3ca6-3ad5-b8667ed9f45c.png)

## SpeedTest CLIをインストールする
■SpeedTest CLI
https://www.speedtest.net/ja/apps/cli

RaspbianにインストールするSpeedtest CLIは「armhf」用が必要なので、下記からDLします。
![st014.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/22341629-b090-3858-4420-d5d3b49c8542.png)

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用に作ります。

「設定」から「ホスト」を選択し、右側に表示されたホストの設定画面の右上から「ホストの作成」をクリックします。
![st015.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/7d88f198-3eef-0711-185f-0128014d9ac6.png)

「ホスト名」には適当な名前をつけます。
「グループ」も必須になっているので「選択」ボタンを押して、適当に（いいのか？）選びます。
そして「追加」ボタンをクリック！
![st016.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/5e397808-7f68-31dc-15fd-3e70624617f1.png)

続いて、「アイテム」を追加します。
「アイテム」の追加は、下記のリンクをクリックして、開いた画面の右上から「アイテムの追加」です。

![st017.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/821156b0-1ce8-30b5-cb2c-a4449e781363.png)

あとは、参考サイト（ https://devlog.arksystems.co.jp/2021/03/23/14553/ ）を見ながら、追加していけばOKです。
![st018.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/0a54013a-12bb-5ffa-e3d4-75a904c8ec80.png)
一旦、これくらいアイテムとして追加しました。

グラフは、Download/Upload/Packet Loss/Latencyの4つをひとまず表示してます。
![st019.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/316a01f8-755a-f0e2-0962-8425f40aab54.png)

## 最後に
気になったので、修正しておきます。
そう、この豆腐。

![st020.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/980ad728-bd4d-0b0b-0aa4-bcf15252c423.png)

ん～、やりたいこと全部書いてあるサイトみつけたので貼っておきます。
■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');
```

表示を確認します。
![st021.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/7befd4d1-78f3-52a3-49cb-83bbb0394f7a.png)

おぅいえぃ！

さて、これでしばらく観察しよう。