Vyatta/Vyos のコマンドインターフェース

久しぶりにLinuxのネタでも書いてみようかと。

Linux Box を Router として使うのに便利な Vyos (旧 vyatta) で、ちょいと自分たちが調べたい統計を取ろうと思い、いろいろと調べていました。

Vyos の場合、Console や SSH などでログインをすると、LinuxのBashの代わりに /bin/vbash というBashっぽいものが動き、ネットワーク機器に有りがちなコマンドインターフェースが提供されています。 このコマンドインターフェースではルータとしての機能設定や現在の状況を表示することができ、例えばshow dhcp server statistics といったコマンドを実行すれば、DHCPサーバのIPアドレス貸出数 (number of leased) が表示されます。

ちょうど監視項目として、vbash 経由で取得できる情報を使って、IPアドレス貸出数を zabbix 経由で取得したかったので、調べてみたのです。

まず show コマンドの実装がどうなっているのか調べてみたところ、こんな感じでした。

 $ type show
show is aliased to `_vyatta_op_run show'

$ type _vyatta_op_run | head -5
_vyatta_op_run is a function
_vyatta_op_run ()
{
local -i estat;
local tpath=$vyatta_op_templates;


show コマンドはBashのマクロっぽいもので実装されていますね。

次に show dhcp server statistics がどうなっているのか調べるために、Bashの実行オプションを set -x と変更して、評価されるコマンドを表示して調べてみました。


vyatta@vyatta:~$ set -x
+ return 0
++ history -a
vyatta@vyatta:~$ show dhcp server statistics
.... 中略 ....

+ eval shopt -s 'extglob;shopt' -u 'nullglob;'
++ shopt -s extglob
++ shopt -u nullglob
+ [[ -t 1 ]]
+ eval '${vyatta_bindir}/sudo-users/vyatta-show-dhcp-server.pl --show-stats'
++ /opt/vyatta/bin/sudo-users/vyatta-show-dhcp-server.pl --show-stats
+ return 0

pool pool size # leased # avail
---- --------- -------- -------
hogehage 200 4 196

++ history -a


この部分からわかったのが、 show dhcp server statisticsというコマンドを実行すると
/opt/vyatta/bin/sudo-users/vyatta-show-dhcp-server.pl --show-stats
が最後に実行されるということでした。

こんな感じにして、Vyatta/Vyos のコマンドから取得できる値をBashスクリプトにして、Zabbix agent から読み出すようにしてみます。


!/bin/bash
target="$1"
column="$2"

case "$column" in
"poolsize"|1) col=2;;
"leased"|2) col=3;;
"avail"|3) col=4;;
*)
echo "$0 (poolsize|1|leased|2|avail|3)"
exit 255
;;
esac

/opt/vyatta/bin/sudo-users/vyatta-show-dhcp-server.pl --show-stat pool="$target"|grep "^$target" | awk "{print $${col} }"


あとは /etc/zabbix/zabbix_agentd.d/userparameter_dhcpd.conf とかいうファイルに、下記内容を書いて sudo service zabbix-agent restart すればOKです。


UserParameter=service.dhcpd.leased[*],/etc/zabbix/dhcp_server_stat.sh $1 leased


引数を取るようになっているので、Zabbix のアイテム設定時のKeyのパラメータに pool名を引数として設定します。

service.dhcpd.leased[hagehoge]


あとはグラフも設定して完了っと。

コメント

このブログの人気の投稿

大型特殊自動車免許を取った時の話。

パスワードを覚えるのも無理があるから、パスワードマネージャ使いましょう。

ICOM IC-7300 と RS-BA1 Version 2 でリモート操作