4GPiでもMackerelでモニタしてみる

#概要

[Mechatrax社](https://mechatrax.com)の[slee-Pi2](https://mechatrax.com/products/slee-pi/)に続いて、[4GPi](https://mechatrax.com/products/4gpi/)を入手。以前開発した[slee-Pi2向けのansible playbook](https://github.com/ackcell/mechatrax-slee-Pi2-Mackerel)を拡張してみた。

#手順
先ずは、[4GPi向けのansible playbook](https://github.com/ackcell/mechatrax-slee-Pi2-Mackerel)をREADMEに従って実行します。

このplaybookにより、Mackerel.ioに、通常のシステム・メトリックスに加えて、CPU温度とslee-Pi2のVOLTAGE(電源電圧)WiFi/4GPiの電波強度をカスタム・メトリックスとして投稿するようになります。

![mackerel-raspberry-sleepi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580616/0dc1c842-7f6b-3d70-3084-b5b550a99e82.png)

![mackerel-4GPi-tweak.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580616/4ea3ddeb-e699-73eb-306a-eaf42bc32693.png)

これで問題となったのは、Mackerelではマイナス値を描画できないことでした。そこで、マイナス値になるであろうWiFi_SignalLevel 4GPi(RSQR RSRP SSNI)に関しては、+150した値をプロットするグラフをcustom.mechtrax.tweakに表示するようにしました。
これは/opt/mechtrax/sbin/customMechatrax.shのADJUST変数で処理しているので、必要に応じて手入れしてください。
また、4GPiのモデム・インデックスはINDEX変数で処理しています。
```
~# ansible-playbook -i hosts 4gpi.yml
```
これで4GPiのインストール・セットアップそしてSORACOMのSIMの設定まで行います。他社SIMを使う場合は、playbookの’nmcli'コマンドの編集もしくは、手動でnmcliを投入します。

ansible playbookで設定できたという事は、該当Raspberry piはip reachableであることが前提になります。

4GPiがつながり、IPアドレスが付与されたか確認するには、以下のコマンドをraspberry piのshellで投入します。

##コネクション確認
```
# ~# ip a show dev wwan0
4: wwan0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/none 
    inet 10.134.47.129/30 brd 10.134.47.131 scope global noprefixroute wwan0
       valid_lft forever preferred_lft forever
```

これが確認できたら、ルーティングの確認をします。

##ルーティング
```
~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.3.1     0.0.0.0         UG    303    0        0 wlan0
default         10.134.47.130   0.0.0.0         UG    700    0        0 wwan0
10.134.47.128   0.0.0.0         255.255.255.252 U     700    0        0 wwan0
192.168.3.0     0.0.0.0         255.255.255.0   U     303    0        0 wlan0
```

これから分かる事は、wlan0(Wi-Fi)とwwan0(SORACOM 4G)の経路があり、
metricが小さいwlan0(Wi-Fi)が優先的なdefault routeになることです。

つまり、このままではSORACOMからパケットは出ていかないことになります。

```
~# curl ifconfig.io
116.94.139.122
```

このIPアドレスをnslookup・whoisしてみると、LANのWi-Fiルーターに付与されたIPアドレスであり、SORACOMのIPアドレスではないことが分かります。

そこでwwan0のmetricを小さくして、SORACOM 4Gを優先的なdefault routeにします。
一旦、delしてaddします。

```shell
~# route del default gw 10.134.47.130
~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.3.1     0.0.0.0         UG    303    0        0 wlan0
10.134.47.128   0.0.0.0         255.255.255.252 U     700    0        0 wwan0
192.168.3.0     0.0.0.0         255.255.255.0   U     303    0        0 wlan0
~# route add default gw 10.134.47.130 metric 100 netmask 0.0.0.0  wwan0 
~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.134.47.130   0.0.0.0         UG    100    0        0 wwan0
default         192.168.3.1     0.0.0.0         UG    303    0        0 wlan0
10.134.47.128   0.0.0.0         255.255.255.252 U     700    0        0 wwan0
192.168.3.0     0.0.0.0         255.255.255.0   U     303    0        0 wlan0
~# curl ifconfig.io
103.67.223.47
~# 
```

これで、SORACOM 4Gへの経路がmetric 100でdefault routeになり、ifconfig.ioへのアクセスは別のIPアドレスになっているのが分かります。このIPアドレスをnslookup・whoisするとSORACOMのIPアドレスになっています。

##ルーティング設定固定

以上の設定をpermanentにするには、nmcliコマンドでも行うことができます。

```bash
~# nmcli device
DEVICE    TYPE      STATE      CONNECTION       
cdc-wdm0  gsm       connected  gsm-4gpi-soracom 
eth0      ethernet  unmanaged  --               
lo        loopback  unmanaged  --               
wlan0     wifi      unmanaged  --
~# nmcli connection show
NAME              UUID                                  TYPE  DEVICE   
gsm-4gpi-soracom  8ab4fd5c-42e9-41f5-b8d5-504a0a3c9b45  gsm   cdc-wdm0 
~# nmcli c modify gsm-4gpi-soracom ipv4.route-metric 100
~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.134.47.130   0.0.0.0         UG    100    0        0 wwan0
default         192.168.3.1     0.0.0.0         UG    303    0        0 wlan0
10.134.47.128   0.0.0.0         255.255.255.252 U     100    0        0 wwan0
192.168.3.0     0.0.0.0         255.255.255.0   U     303    0        0 wlan0
```

#備考
## wlan0
ここまでは、SORACOM経路のmetricを小さくして対応したが、逆にWiFiの経路のmetricを700より大きくする方法もありますが、その際にはdhcpcd.confにWiFiのmetricを指定することでparmanentします。

```/etc/dhcpcd.conf
interface wlan0
metric 800
```
を追加します。
## ansible-playbook
[ansible playbook](https://github.com/ackcell/mechatrax-slee-Pi2-Mackerel)のインベントリで、nmoptに"ipv4.route-metric 100"などのように指定すると、playbook実行時にmetricを指定することができます。