5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

家のネットワークを監視することにした

Last updated at Posted at 2021-08-29

家のネットワークが遅い気がする

  • ネットワークが遅い気がする.切れたりする.
    • ルータまでは接続できるがその先に行けない.
      • とりあえず監視することにした.

とりあえず監視するツールを調べた

  • Zabbix
    • 無料
    • docker image が提供されている
    • 今回は,ローカルホストから監視できると良さそう.
      • external script でもいいかも.
        • zabbix-server に speedtest コマンドインストールするのが面倒な気がしたので,今回は別イメージにした.
  • cron
    • 設定をコードに落としておきたいので,docker compose ならその配下で実行できることが望ましい.

手順 - Zabbix 起動するまで

Refers に乗せてあるものと同じだが,一応

$ cp docker-compose_v3_alpine_mysql_latest.yaml docker-compose.yaml
$ edit .env_web  # PHP_TZ=Asia/Tokyo を追加
$ docker compose up -d

これだけで,http://localhost にアクセスできるようになる.
(ログイン情報は,公式参照

とはいえ,80 番ポートを使われると面倒なので,修正.

diff --git a/docker-compose.yaml b/docker-compose.yaml
index 7eb3b1c0..7299bcac 100644
--- a/docker-compose.yaml
+++ b/docker-compose.yaml
@@ -229,8 +229,8 @@ services:
  zabbix-web-nginx-mysql:
   image: zabbix/zabbix-web-nginx-mysql:alpine-5.4-latest
   ports:
-   - "80:8080"
-   - "443:8443"
+   - "12080:8080"
+   - "12443:8443"
   volumes:
    - /etc/localtime:/etc/localtime:ro
    - /etc/timezone:/etc/timezone:ro

これで,http://localhost:12080 にアクセスできるようになる

手順 - cron を設定する

docker で cron を動かす コチラ の記事を参考にさせて頂いた.

diff --git a/docker-compose.yaml b/docker-compose.yaml
index 7299bcac..882b3aad 100644
--- a/docker-compose.yaml
+++ b/docker-compose.yaml
@@ -459,6 +459,16 @@ services:
 #    aliases:
 #     - elasticsearch

+ cron:
+  build:
+   context: cron
+  depends_on:
+   - zabbix-server
+
+
cron/Dockerfile
FROM ubuntu:20.10

RUN apt update && \
 apt install -y cron

COPY sender_speedtest.sh /usr/local/bin/
COPY speedtest /etc/cron.d/speedtest
RUN chmod 0644 /etc/cron.d/speedtest

CMD ["cron", "-f"]
speedtest
* * * * * root /usr/local/bin/sender_speedtest.sh
sender_speedtest.sh
#!/bin/bash

touch /tmp/speedtest.log /tmp/speedtest.err

date >> /tmp/speedtest.log 2>> /tmp/speedtest.err

新しいイメージを起動する

$ docker compose build
$ docker compose up -d

up だけでrecreate してくれるのね.便利…

動作確認する.ログにデータが入っていればOK.

$ docker compose exec cron bash
# tail -f /tmp/speedtest.*

手順 - zabbix send する

cron でやろうとして,よく考えたら zabbix から external script とかで取った方がいいのかも?と思ったけど,
Refers の記事によると,sender で良さそうだったので,sender にする.

まず speedtest が動くようにする
必要なソフトを cron 用イメージに追加.

  • speedtest
  • zabbix-sender
cron/Dockerfile
FROM ubuntu:20.10

RUN apt update && \
 apt install -y cron curl

RUN curl -s https://install.speedtest.net/app/cli/install.deb.sh | bash && \
 curl -LO https://repo.zabbix.com/zabbix/5.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.4-1+ubuntu20.04_all.deb && \
 dpkg -i zabbix-release_5.4-1+ubuntu20.04_all.deb && \
 rm zabbix-release_5.4-1+ubuntu20.04_all.deb && \
 apt update && \
 apt install -y speedtest zabbix-sender

COPY sender_speedtest.sh /usr/local/bin/
COPY speedtest /etc/cron.d/speedtest
RUN chmod 0644 /etc/cron.d/speedtest

CMD ["cron", "-f"]

スクリプトを修正.

sender_speedtest.sh
#!/bin/bash

SPEEDTEST_SERVER_ID=`/usr/bin/speedtest -L | grep -E "OPEN Project" | sed 's/^ *\| *$//' | cut -d " " -f 1`
if [ -z "$SPEEDTEST_SERVER_ID" ]; then
  SPEEDTEST_SERVER_ID=`/usr/bin/speedtest -L | tail -1 | sed 's/^ *\| *$//' | cut -d " " -f 1`
fi
SPEEDTEST_RESULT=`/usr/bin/speedtest --accept-license -s $SPEEDTEST_SERVER_ID -f json`

ZABBIX_SERVER=zabbix-server
ZABBIX_HOSTNAME=speedtest.net
ZABBIX_ITEMKEY=speedtest.json

/usr/bin/zabbix_sender -z $ZABBIX_SERVER -s $ZABBIX_HOSTNAME -k $ZABBIX_ITEMKEY -o "$SPEEDTEST_RESULT"

接続先に OPEN Project が居なくなったりするので,最後のを使うようにした.
それと,license にaccept しないといけないので引数に追加した.

send したり,speedtest を実行するためにネットワーク設定が必要そうだったので追加した.

diff --git a/docker-compose.yaml b/docker-compose.yaml
index 7299bcac..882b3aad 100644
--- a/docker-compose.yaml
+++ b/docker-compose.yaml
@@ -459,6 +459,16 @@ services:
 #    aliases:
 #     - elasticsearch

+ cron:
+  build:
+   context: cron
+  depends_on:
+   - zabbix-server
+  networks:
+   zbx_net_backend:
+   zbx_net_frontend:
+
+

テスト用に,1分おきにしていたのを,5分おきに修正

speedtest
*/5 * * * * root /usr/local/bin/sender_speedtest.sh

で,新しいイメージを起動する.

$ docker compose build
$ docker compose up -d

これで動いてそう.しばらく様子を見る.
(send するには,zabbix 側に trapper アイテム登録も必要なので,参考にした記事 を参照のこと

接続ができるようになるまでは,bash -x /usr/local/bin/send_spedtest.sh を実行してログを見たりしていた
結局,トラッパーアイテムのkey のタイポだったことを記載しておく

追記

  • 状況として瞬断してるようで,5分間隔だとあまりわからないことがわかった.
    • もう少し頻繁にチェックしないとわからないが,そこまですると帯域がちょっと気になっていく気がしてきた.

Refers

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?