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]

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

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください