
Glafanaのようなスタイリッシュなダッシュボードを備えた、 リアルタイムモニタリング ツールである Netdata を OpenWRT に導入、手作業でLuCIへも組み込んでみました。
Netdata
OpenWRTの解説動画でよく登場するこの洗練されたダッシュボードは、Netdataと呼ばれるリアルタイムモニタリングツールで、OpenWRTのみならず広範なLinuxシステムで利用可能です。

図1.Netdataダッシュボード
OpenWRTへパッケージから導入
OpenWRTではパッケージが利用可能なので、インストールはとても簡単(以下、FriendlyElec NanoPi R2Sを例に進めます。R2S関連記事はこちら)。
1 2 3 4 5 6 7 8 9 10 |
_______ ________ __ | |.-----.-----.-----.| | | |.----.| |_ | - || _ | -__| || | | || _|| _| |_______|| __|_____|__|__||________||__| |____| |__| W I R E L E S S F R E E D O M ----------------------------------------------------- OpenWrt 21.02.2, r16495-bf0c965af0 ----------------------------------------------------- # opkg update # opkg install netdata |
インストールを終えたら、ブラウザでOpenWRTルータのアドレスを19999番ポートで開くだけ。
1 |
http://XXX.XXX.XXX.XXX:19999/ |

図2.Netdata(ライトテーマ)
画面はデフォルトで2秒毎にデータが更新され、その項目もシステム諸情報からインターフェイスなど多岐にわたります。
この類のリッチなモニタリングツールでは、どうしてもリソースの消費具合がが気になるところ。Netdata表示更新中にターミナルでプロセスを確認すると、NetdataのCPU使用率は1%、メモリは40MB程度を消費していました。

図4.Netdataのプロセス
CPU4コア、RAM1GBのNanoPi R2Sでは問題有りませんが、ハードウェアによっては無視できないリソース消費かもしれません。インストール前にハードウェアリソースの余剰具合を確認するか、常用しないのであれば必要な時にだけサービスを稼働させるという手もあります。

図5.サービスの起動停止と再起動
LuCIへの組み込み
このままではOpenWRTのLuCIからNetdataのページへ辿れず、URLのカスタムポート番号を思い出せる自信も無いので、こちらの記事を参考にNetdata用ページをLuCIへ新設し、メニューへ組み込んでみます(鳴謝!)。
ターミナルからOpenWRTシステムへ入ったらまず、 /usr/lib/lua/luci/controller/netdata.lua と言うファイルを以下の内容で新規作成します(これが追加されるメニューに)。
1 2 3 4 5 |
module("luci.controller.netdata", package.seeall) function index() entry({"admin","status","netdata"},template("netdata"),_("NetData"),10).leaf=true end |
1 2 3 4 |
# ls -l /usr/lib/lua/luci/controller/ drwxr-xr-x 2 root root 4096 Aug 9 16:15 admin -rw-r--r-- 1 root root 158 Aug 22 21:24 netdata.lua -rw-r--r-- 1 root root 1850 May 16 01:15 ocserv.lua |
そして /usr/lib/lua/luci/view/netdata.htm を新規作成し、その中に次のhtmlを記すことで、iframeの中にNetdataページを呼び出すよう仕向けます。
1 2 3 4 5 6 7 8 9 |
<%+header%> <div class="cbi-map"> <h2 name="content"><%=translate("NetData")%></h2> <iframe id="netdata" style="width: 100%; min-height: 1200px; border: none; border-radius: 3px;"></iframe> </div> <script type="text/javascript"> document.getElementById("netdata").src = "http://" + window.location.hostname + ":19999"; </script> <%+footer%> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# ls -l /usr/lib/lua/luci/view/ drwxr-xr-x 3 root root 4096 Aug 22 20:40 admin_status drwxr-xr-x 2 root root 4096 Jul 11 16:12 cbi -rw-r--r-- 1 root root 562 Aug 1 17:59 csrftoken.htm -rw-r--r-- 1 root root 229 Aug 1 17:59 empty_node_placeholder.htm -rw-r--r-- 1 root root 393 Aug 1 17:59 error404.htm -rw-r--r-- 1 root root 346 Aug 1 17:59 error500.htm -rw-r--r-- 1 root root 798 Aug 1 17:59 footer.htm -rw-r--r-- 1 root root 1559 Aug 1 17:59 header.htm -rw-r--r-- 1 root root 210 Aug 1 17:59 indexer.htm -rw-r--r-- 1 root root 353 Aug 22 21:04 netdata.htm -rw-r--r-- 1 root root 1653 May 16 01:15 ocserv_status.htm -rw-r--r-- 1 root root 2296 Aug 1 17:59 sysauth.htm drwxr-xr-x 3 root root 4096 Jun 15 10:27 themes -rw-r--r-- 1 root root 223 Aug 1 17:59 view.htm |
LuCIのウェブサービスを再起動し、ブラウザでページを読み直すとメニューの Status 項に NetData が追加されました(もし反映されない場合は、一度ログアウトしてからログインし直しましょう)。
1 |
# /etc/init.d/uhttpd restart |

図6.LuCIへ組み込んだNetdata
こうして作成した2つのファイルが今後のシステムアップグレード時に復元出来るよう、バックアップの対象に加えておきました(OpenWRTにおけるバックアップ設定に関する記事はこちら)。

図7.バックアップターゲットへ追加
このNetdataはローカルで完結するモニタリングツールなので、ネットワーク外からアクセスするにはルータのファイヤウォールに穴を開ける必要があります。
そこでいずれは、PrometheusやInfluxDB、Grafanaといった流行りのツールを駆使して、時系列DBとダッシュボード部をインターネット上に配する手法に、挑んでみたいと思います。