AlmaLinux + MySpeedで自宅回線の速度と安定度を計測しよう

# MySpeedとは
継続的に回線速度の計測を行い最大30日間記録することで、回線状況の分析ができるツール。

https://github.com/gnmyt/myspeed

## 機能
* 速度、Pingなどの統計情報を生成できる
* cronを使ってスピードテストを自動化できる
* ひとつのインスタンスに複数のMySpeedサーバーを追加できる
* テスト時にエラーが発生したときに、メールなどでHealth Checkできる

# セットアップ
## Node.js インストール
Nodejsが必要なのでインストールします。
```
# インストール可能なバージョンの確認
$ sudo dnf module list nodejs
AlmaLinux 9 - AppStream
Name                         Stream                       Profiles                                                    Summary                                 
nodejs                       18                           common [d], development, minimal, s2i                       Javascript runtime                      
nodejs                       20                           common [d], development, minimal, s2i                       Javascript runtime

# バージョン切り替え
$ sudo dnf module reset nodejs 
$ sudo dnf module -y enable nodejs:18
依存関係が解決しました。
==============================================================================================================================================================
 パッケージ                            アーキテクチャー                     バージョン                            リポジトリー                          サイズ
==============================================================================================================================================================
モジュールストリームの有効化中:
 nodejs                                                                     18                                                                               

トランザクションの概要
==============================================================================================================================================================

# インストール
$ sudo dnf module -y install nodejs:18/common
依存関係が解決しました。
========================================================================================================================================================================
 パッケージ                           アーキテクチャー           バージョン                                                         リポジトリー                  サイズ
========================================================================================================================================================================
group/moduleパッケージをインストール:
 nodejs                               x86_64                     1:18.18.2-2.module_el9.2.0+43+3ebc9e20                             appstream                      13 M
 npm                                  x86_64                     1:9.8.1-1.18.18.2.2.module_el9.2.0+43+3ebc9e20                     appstream                     2.0 M
弱い依存関係のインストール:
 nodejs-docs                          noarch                     1:18.18.2-2.module_el9.2.0+43+3ebc9e20                             appstream                     7.6 M
 nodejs-full-i18n                     x86_64                     1:18.18.2-2.module_el9.2.0+43+3ebc9e20                             appstream                     8.5 M
モジュールプロファイルのインストール中:
 nodejs/common                                                                                                                                                         

トランザクションの概要
========================================================================================================================================================================
インストール  4 パッケージ

ダウンロードサイズの合計: 31 M
インストール後のサイズ: 168 M
パッケージのダウンロード:
(1/4): nodejs-full-i18n-18.18.2-2.module_el9.2.0+43+3ebc9e20.x86_64.rpm                                                                  12 MB/s | 8.5 MB     00:00    
(2/4): nodejs-docs-18.18.2-2.module_el9.2.0+43+3ebc9e20.noarch.rpm                                                                      8.8 MB/s | 7.6 MB     00:00    
(3/4): npm-9.8.1-1.18.18.2.2.module_el9.2.0+43+3ebc9e20.x86_64.rpm                                                                      9.0 MB/s | 2.0 MB     00:00    
(4/4): nodejs-18.18.2-2.module_el9.2.0+43+3ebc9e20.x86_64.rpm                                                                            10 MB/s |  13 MB     00:01    
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
合計                                                                                                                                     14 MB/s |  31 MB     00:02     
トランザクションの確認を実行中
...............
............
.........
......

完了しました!

$ node -v
v18.18.2
```


## MySpeed インストール
公式で全自動セットアップ用のコマンドが用意されていますが、AlmaLinuxでは利用できませんので手動インストールします。

面倒ならDockerも利用できます。

https://docs.myspeed.dev/setup/linux/

### ディレクトリ作成
```
# mkdir /opt/myspeed && cd /opt/myspeed
```
### ファイルダウンロード
https://github.com/gnmyt/myspeed/releases

から最新版のMySpeedをダウンロードして/opt/myspeedに配置し、展開します。

```
# unzip MySpeed-*.zip && rm MySpeed-*.zip
```

### Nodeモジュールインストール
```
# npm install
```

### 実行
デーモンを登録します。
``` /etc/systemd/system/myspeed.service
[Unit]
Description=MySpeed
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/node server
Restart=always
# \/ It is strongly recommended to create your own user here
User=root
Environment=NODE_ENV=production
# \/ Specify your installation location here
WorkingDirectory=/opt/myspeed 

[Install]
WantedBy=multi-user.target
```

`systemd`を再起動し、デーモンを起動します。
```
# systemctl daemon-reload
# systemctl enable --now myspeed

# systemctl status myspeed
● myspeed.service - MySpeed
     Loaded: loaded (/etc/systemd/system/myspeed.service; enabled; preset: disabled)
     Active: active (running) since Tue 2024-01-30 23:06:16 JST; 38s ago
   Main PID: 101187 (node)
      Tasks: 11 (limit: 3355442)
     Memory: 39.0M
        CPU: 1.391s
     CGroup: /system.slice/myspeed.service
             └─101187 /usr/bin/node server

 1月 30 23:06:16 HOSTNAME systemd[1]: Started MySpeed.
 1月 30 23:06:17 HOSTNAME node[101187]: Successfully connected to the database file
 1月 30 23:06:21 HOSTNAME node[101187]: Integration "discord" loaded successfully
 1月 30 23:06:21 HOSTNAME node[101187]: Integration "gotify" loaded successfully
 1月 30 23:06:21 HOSTNAME node[101187]: Integration "healthChecks" loaded successfully
 1月 30 23:06:21 HOSTNAME node[101187]: Integration "telegram" loaded successfully
 1月 30 23:06:21 HOSTNAME node[101187]: Integration "webhook" loaded successfully
 1月 30 23:06:21 HOSTNAME node[101187]: Server listening on port 5216
```

## 起動後のセットアップ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532025/bdf8e9c6-132e-3bfe-d0ab-7640725d0af8.png)

`Ookla`のスピードテストサービスを利用しますので、利用規約やプライバシーポリシーを読んで同意します。

### 測定用サーバー変更
初期設定ではウラジオストクサーバーですので、最寄りのサーバーに変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532025/6f41f3ec-a740-1bac-6b03-3d07b6498e2c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532025/f00b09f8-f202-04f4-411c-1c2182c04577.png)

### 測定頻度設定
測定する頻度を選択できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532025/79304f7d-afef-6e05-aa07-03401faa4548.png)

基本的には`Default`で良いと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532025/5bfe5e92-184f-f559-41cc-5061c81a6970.png)

### 測定結果表示範囲
測定結果の表示期間を設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532025/6981541a-a80e-7ae2-746f-8f8511eb2cb9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532025/d83bc728-cbdd-352d-8e03-002b1c2492da.png)

こちらも`Default`で良いと思います。

### 測定結果閾値設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532025/b21a38eb-fa03-535c-58dd-c7352dd42304.png)

`Optimal ping`/`Optimal up-speed`/`Optimal down-speed`を変更することで、結果表示画面で`良好`として表示される数値の閾値を設定できます。


## 手動測定
このボタンで手動測定ができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532025/07e0d9d6-f39a-7493-7833-266865078386.png)

## 画面切り替え
`Switch View`をクリックすると、レイアウトを切り替えられます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532025/652031eb-0911-a3f9-e4eb-e9922f1d71e8.png)

### 統計モード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532025/4efdef2d-a99f-c218-e25a-d07fd503b64b.png)

### 詳細表示モード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532025/7e695a6a-3ef7-640d-8dc0-4e728ee10098.png)

# おわり
放っておけば計測結果がたまっていると思います。

参考:

https://gigazine.net/news/20240128-myspeed/