RTX1200 から直接 prometheus 形式でメトリクスを取得できる Lua スクリプトを書いた。
prometheus + grafana のセットアップ (Ubuntu 16.04.4 LTS) | tech - 氾濫原 自宅 raspberrypi への prometheus セットアップとリモートの prometheus との連携 | tech - 氾濫原 とやってきて、自宅内のメトリクスを grafana で表示できるようにしたので、自宅のルーターの RTX1200 のメトリクスをとるようにした。
RTX1200 はユーザー Lua を実行できる環境があり、そこそこ高級なことができる。TCP サーバは簡単に立てられる。HTTP サーバはないが、不特定多数のリクエストを受けるものでもないので、自力で簡単なものを実装した。
Luaスクリプト
https://github.com/cho45/rtx1200_exporter/blob/master/rtx1200_exporter.lua
エンコーディングが sjis なのが注意点。9100 を listen している。IPv6 を listen する方法はないっぽいので、必ず IPv4 でアクセスする必要がある。
出力サンプル
メトリクス名が prometheus のベストプラクティスから外れてるのは、もともと SNMP でとっていた値があるため。
というか SNMP ではとれるけど Lua からは直接とることのできないメトリクスがあるのでちょっと困る。 Lua から自分向けに SNMP 使えばとれると思うが今回やっていない。
# Collecting metrics... # TYPE yrhCpuUtil5sec gauge yrhCpuUtil5sec 3 # TYPE yrhCpuUtil1min gauge yrhCpuUtil1min 2 # TYPE yrhCpuUtil5min gauge yrhCpuUtil5min 2 # TYPE yrhInboxTemperature gauge yrhInboxTemperature 46 # TYPE yrhMemoryUtil gauge yrhMemoryUtil 24 # TYPE ifOutOctets counter # TYPE ifInOctets counter ifOutOctets{if="1"} 51255053848 ifInOctets{if="1"} 8057224805 ifOutPkts{if="1"} 43465561 ifInPkts{if="1"} 27396255 ifOutOctets{if="2"} 8411163805 ifInOctets{if="2"} 52401299138 ifOutPkts{if="2"} 25933809 ifInPkts{if="2"} 42718551 ifOutOctets{if="3"} 0 ifInOctets{if="3"} 0 ifOutPkts{if="3"} 0 ifInPkts{if="3"} 0 # TYPE ipSession counter ipSession{proto="v4"} 59 ipSession{proto="v6"} 35 # TYPE ipChannel counter ipChannel{proto="v4"} 59 ipChannel{proto="v6"} 35
Lua のデバッグ方法
いまいちベストのデバッグ方法がわからないが、以下のような手順でやった。
以下の upload.sh を保存するたびに実行
#!/bin/sh
PASS=adminpass
cat <<EOF | tftp 192.168.0.1
put rtx1200_exporter.lua /rtx1200_exporter.lua/$PASS
quit
EOF
telnet 繋ぎっぱなしで以下を手動で実行
terminate lua all lua /rtx1200_exporter.lua show status lua