OpenWRT本体にもステータス表示画面があり、リアルタイムグラフ機能等があるのですが、時系列でデータを追いたい為、Zabbixの監視対象にOpenWRTを含めることにしました。そのセットアップの備忘をご紹介します。
時系列でデータを取ることで、下記のようなメリットがあると思います。
- OpenWRTルータの負荷状態を知ることで、「買い替えの要否」の判断材料に出来る
- 一定期間のWAN側、LAN側通信量を把握しておくことで、異常な通信量UP/DOWN時に気付ける為、万が一外部から不正アクセスされ、ずっとデータを外部へ送ってしまうようなことになった場合に気付くネタとなる
- WAN側回線使用率を抑えることで、プロバイダ乗り換え時期の検討材料とできる
- 異常発生時に検知できる(Zabbixの設定で連絡する設定を入れる必要あり)
OpenWRTへのZabbix Agentoのインストール
システム>ソフトウェアより、下記の4つをインストールします。検索窓にzabbixと入れると良いです。リストが出ない場合には、Update listsをしてから対応してください。
- zabbix-agentd
- zabbix-extra-mac80211
- zabbix-extra-network
- zabbix-extra-wifi

最初は、上記だけで良いと思っていたのですが、実はコマンドラインからzabbix_agentd.confを編集する必要がありました。(昔、GUIから特定ファイルの編集が出来たような記憶があるのですが、見当たらなかったのでSSHで接続します)
SSHでOpenWRTへrootユーザーでログインします。パスワードはGUIにログインする際のAdminのパスワードです。
vi /etc/zabbix_agentd.conf
zabbix_agentd.confは以下のように編集します。
# 下記の2項目は、ZabbixServerのIPを指定します。
Server=10.1.0.100
ServerActive=10.1.0.100
# 下記は指定しなくてもOKです。OpenWRTのシステム設定にあるホスト名設定値がデフォルト値になります。
# Hostname=OpenWRT_Elecom
# zabbix agentはインストール直後は0.0.0.0:10050で起動してしまうので、
# zabbixサーバが接続してくるインターフェースでのみListenするようにします
ListenIP=10.1.0.1
上記設定が完了したら、OpenWRT上のzabbix agentdを再起動します。
# zabbix agentd 再起動
/etc/init.d/zabbix_agentd restart
ステータス>システムログを確認し、zabbix agentdが正常に起動していれば問題ありません。
daemon.warn zabbix_agentd[10031]: Got signal [signal:15(SIGTERM),sender_pid:1,sender_uid:0,reason:0]. Exiting ...
daemon.info zabbix_agentd[10031]: Zabbix Agent stopped. Zabbix 5.0.7 (revision 1b3db7f980).
daemon.info zabbix_agentd[10946]: Starting Zabbix Agent [OpenWRT_Elecom]. Zabbix 5.0.7 (revision 1b3db7f980).
daemon.info zabbix_agentd[10946]: Starting Zabbix Agent [OpenWRT_Elecom]. Zabbix 5.0.7 (revision 1b3db7f980).
daemon.info zabbix_agentd[10946]: Press Ctrl+C to exit.
daemon.info zabbix_agentd[10946]: **** Enabled features ****
daemon.info zabbix_agentd[10946]:
daemon.info zabbix_agentd[10946]: IPv6 support: YES
daemon.info zabbix_agentd[10946]: TLS support: NO
daemon.info zabbix_agentd[10946]: **************************
daemon.info zabbix_agentd[10946]: using configuration file: /etc/zabbix_agentd.conf
daemon.info zabbix_agentd[10946]: agent #0 started [main process]
daemon.info zabbix_agentd[10948]: agent #1 started [collector]
daemon.info zabbix_agentd[10949]: agent #2 started [listener #1]
daemon.info zabbix_agentd[10950]: agent #3 started [active checks #1]
# いくらかサポートしていない機能についてwarningが出ますが、こちらは一旦無視します。
daemon.warn zabbix_agentd[10950]: active check "owrt.apackages" is not supported: Unsupported item key.
daemon.warn zabbix_agentd[10950]: active check "owrt.boxid" is not supported: Unsupported item key.
daemon.warn zabbix_agentd[10950]: active check "owrt.ipackages" is not supported: Unsupported item key.
daemon.warn zabbix_agentd[10950]: active check "owrt.klogcnt[Modules linked in]" is not supported: Unsupported item key.
daemon.warn zabbix_agentd[10950]: active check "owrt.klogcnt[invoked oom-killer]" is not supported: Unsupported item key.
daemon.warn zabbix_agentd[10950]: active check "owrt.logcnt[RADIUS No authentication server configured]" is not supported: Unsupported item key.
daemon.warn zabbix_agentd[10950]: active check "wifi.channel.discovery" is not supported: Unsupported item key.
daemon.warn zabbix_agentd[10950]: active check "wifi.clients.discovery" is not supported: Unsupported item key.
daemon.warn zabbix_agentd[10950]: active check "wifi.if.discovery" is not supported: Unsupported item key.
daemon.warn zabbix_agentd[10950]: active check "wifi.neigh.discovery" is not supported: Unsupported item key.
zabbix_agentd.conf 編集後は、コミットのような指示をする必要があると思っていたのですが、再起動後も zabbix_agentd.conf の内容がそのままだったため、問題無いようでした。
ファイアウォールの設定
LAN側は全く制限をかけていない場合には無視してください。私の場合にはLAN側も許可した通信しか出来ない為、Zabbix Agent<>Zabbix Server間でやり取りする為の穴あけをしました。
通信元 | 通信先 | 通信元ポート | 通信先ポート | アクション |
OpenWRT | Zabbix Server | – | 10051 | Accept |
Zabbix Server | OpenWRT | – | 10050 | Accept |
Zabbix5.4のインストール
Zabbixのオフィシャルサイトを参考にZabbix5.4をインストールします。当方はUbuntu20.04で、ほぼオフィシャルサイトの通りインストールしているのですが、その際のコマンドを下記に記します。
一旦、DBパスワードは「cni9c8dcsA__sdfDCa_cdsa」としていますが、適当に置き換えてください。
# 事前アップデート
apt update ; apt upgrade
# Zabbix パッケージのインストール
cd /tmp
# ダウンロードするパッケージが最新か否かは、Zabbixオフィシャルサイトよりご確認ください。
wget https://repo.zabbix.com/zabbix/5.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.4-1+ubuntu20.04_all.deb
sudo dpkg -i zabbix-release_5.4-1+ubuntu20.04_all.deb
sudo apt update
sudo apt install zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-sql-scripts zabbix-agent
# MySQLでのDB、ユーザー作成とACL設定
sudo mysql
create database zabbix character set utf8 collate utf8_bin;
create user zabbix@localhost identified by 'cni9c8dcsA__sdfDCa_cdsa';
grant all privileges on zabbix.* to zabbix@localhost;
quit;
# DBデータの流し込み(30分程度かかりました)
cd /tmp
cp /usr/share/doc/zabbix-sql-scripts/mysql/create.sql.gz ./
sudo mysql zabbix < ./create.sql
# 設定ファイル編集。
sudo vi /etc/zabbix/zabbix_server.conf
# ※DBPassword=cni9c8dcsA__sdfDCa_cdsa
# を更新して保存
# 関係パッケージの再起動
sudo systemctl restart zabbix-server zabbix-agent apache2
# 自動起動するように設定。MySQLやApacheが自動起動でなければ合わせてここで設定します。
sudo systemctl enable zabbix-server zabbix-agent
上記でインストールを完了させたのち、サーバ「http://<サーバIP>/zabbix」へアクセスして、zabbixの設定を完了させてください。

Zabbixで日本語文字コードが選べない場合に実行するコマンド
sudo localedef -f UTF-8 -i ja_JP ja_JP
次に、サーバ上の各種設定のチェックが走ります。NGとなった個所があれば、その個所を修正した上で再チェックしてください。
次に、ZabbixがDBに接続するための情報をしています。当方が記載した手順通りの場合はパスワードに 「cni9c8dcsA__sdfDCa_cdsa」 を指定することになります。変更している場合にはそのパスワードを指定してください。

Zabbixサーバのホスト、ポート番号を指定します。セットアップ後に変更しても


Default time zoneに、Asia/Tokyoを選択してください。

問題なければNext Stepを押します。

下記のように、インストール成功画面が出たら、まずはZabbixのインストールは完了です。

ZabbixがOpenWRTを監視できるようにする
オフィシャルサイトにて、Zabbixテンプレートの紹介があったのですが、対応するZabbixバージョンが古いのかインポートできませんでした(エラーメッセージに従って項目追加して再度インポート⇒エラー⇒再度対策を1時間程度繰り返したのですが、中々上手くいきませんでした)。そこで各所で公開してくださっているテンプレートを片っ端から試してみたところ、こちらのテンプレートが利用可能でした。
ZabbixへOpenWRTのテンプレートを登録する
こちらより「zabbix_owrt_template.xml」をダウンロードし、それをZabbixの設定>テンプレート画面右上のインポートボタンから登録します。

インポートするファイルに、ダウンロードした「 zabbix_owrt_template.xml 」を選択してインポートします。

設定>ホストグループから「Templates/OpenWRT」を作成します。

次いで、 「Templates/OpenWRT」 にインポートしたOpenWRT用のテンプレートを括り付けておきます。

ZabbixにOpenWRTルータを登録する
OpenWRTを登録しますので、設定>ホストからホストの作成をクリックします。

当方は、OpenWRTのIPは10.1.0.1なので、その指定をして、ホスト名には「OpenWRT上設定しているホスト名」を指定しています。赤字としている箇所は大事で、指定しているホスト名がDNSで解決できないと、OpenWRTエージェント側で下記のエラーが出ました。
OpenWrt zabbix_agentd[2907]: no active checks on server [10.1.0.100:10051]: host [OpenWRT_Elecom] not found

次に、テンプレートタブで、下記パッケージを指定します。

Zabbix agent/Zabbix agent activeは、「Templates/Modules」の下にあります。

OpenWRT用のテンプレートは、先ほどインポートしたテンプレートとなります。手順通りにしていれば、Templates/OpenWRTの下にあると思います。

ZabbixにOpenWRTが登録されたことの確認
監視データ>ホスト画面を開き、OpenWRTルータが登録されていることを確認します。エージェントの状態が「不明」の場合、少し待ってみてください。ずっと不明だった場合には、設定ミスの可能性が高いです。

解析データや障害、グラフが見れるので、確認してみてください。データがたまってから見た方が面白い為、30分程度放置してからの方が、グラフの描画されていると思います。

ちなみに、私の環境はVLANを導入している為、VLAN毎に下記のようにグラフ描画されていました。
(VLAN1の流入が多いのは、VLAN4の監視カメラデータをVLAN1上のサーバへ常時送っている為です)

微調整:取得できない項目は無効にする
少し動かしてみると、ZabbixServerのテンプレートに定義されているが、Zabbix Agent側にその項目が無くて取得できない項目がOpenWRT側のログに「~~~の値はサポートしていないので取れません」と出ます。Zabbixがデータを取ろうとアクセスするたびにメッセージに出力される為、結構邪魔なメッセージです。
環境によるのかもしれませんので、対象の確認方法と無効化方法をご紹介させていただきます(試行錯誤した結果をまとめたものなので、対処方法等間違っていたらコメントいただければ幸甚です)。
メッセージの例
zabbix_agentd[2913]: active check "owrt.apackages" is not supported: Unsupported item key.
zabbix_agentd[2913]: active check "owrt.boxid" is not supported: Unsupported item key.
zabbix_agentd[2913]: active check "owrt.ipackages" is not supported: Unsupported item key.
zabbix_agentd[2913]: active check "wifi.channel.discovery" is not supported: Unsupported item key.
zabbix_agentd[2913]: active check "wifi.clients.discovery" is not supported: Unsupported item key.
zabbix_agentd[2913]: active check "wifi.if.discovery" is not supported: Unsupported item key.
zabbix_agentd[2913]: active check "wifi.neigh.discovery" is not supported: Unsupported item key.
zabbix_agentd[2913]: active check "owrt.klogcnt[Modules linked in]" is not supported: Unsupported item key.
zabbix_agentd[2913]: active check "owrt.klogcnt[invoked oom-killer]" is not supported: Unsupported item key.
zabbix_agentd[2913]: active check "owrt.logcnt[RADIUS No authentication server configured]" is not supported: Unsupported item key.
Zabbix Server側で対応する項目の見つけ方
メッセージ中のダブルクォーテーションで囲まれた「owrt.apackages」のキーワードで、ダウンロード、インポートしたテンプレートのXMLファイルを検索すると、下記のような感じでZabbix Server上の設定値名が分かります。
<name>Available packages</name>
<type>7</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>owrt.apackages</key>
Zabbix Server側で対応する項目の無効化方法
設定>テンプレート>Template Openwrtから、アイテム、グラフを開き、その中にある該当項目を無効化します。
トラブルシューティング
今回、OpenWRTにzabbixのパッケージがあったので、導入すればすぐにZabbix Serverからデータが取れるものとばかり思っていたのですが、結構躓き、ログを確認して対処を繰り返しました。その時のナレッジを共有致します。
問題 | 原因 | 対処 |
no active checks on server [10.1.0.100:10051]: host [OpenWRT_Elecom] not foundのエラーメッセージが出る | Zabbix Agentのホスト名指定が間違っているため、Zabbix Agentが正常に起動していません | zabbix_agentd.confを修正します。特にホスト名で指定しているOpenWRTホスト名とそのIPは、Zabbix Server側の設定、Zabbix Agent間で統一させてください。 |
何時までたってもエージェントの状態が不明のまま | OpenWRTのテンプレートだけ指定した場合に発生しました。 | Zabbix Agentのテンプレートも併せて指定します。 |
同上 | OpenWRT、ないしはZabbix Server側のiptables設定が間違っている | Zabbixが使用しているポートを許可します。切り分けの為であれば、OpenWRT<>Zabbix Server間は一旦フルオープンにして切り分けるのも有効かと思います。 |
他に問題点があればコメントからご連絡いただければ、出来る範囲でご回答させて頂きます。