DHCPサーバのIPアドレス数を監視したい。
具体的には、リースしているIPアドレス数と、空いているIPアドレス数のそれぞれである。
基になるデータはdhcpd.leasesにあるのだが、そのままでは使えない。
manなど読めば分かるのだが、ここにはIPアドレスの貸与、更新、破棄が末尾にだらだらと追記されていくので、同じクライアントが複数回出てきたりする。
だからリースされたもの、空いているものを数えようとすると意外に手間取るのである。
同じ悩みを持つ方はいるようで、少し検索すると、こういったIPアドレス数を数えるスクリプトはいくつか見つかる。
調べてみた結果を記す。
なお先に結論を言っておくと、どこかの誰かが作ってくれたawkスクリプトを使用することにした。
いくつかのスクリプト
いずれも判で押したようにperlスクリプトである。
繰り返すがここにあるものは使っていない。
- DHCPstatus http://dhcpstatus.sourceforge.net/
- dhcp-leasecount http://www.net-track.ch/opensource/dhcp-leasecount/(死亡確認)
- reportdhcp.pl http://www.omar.org/opensource/reportdhcp/
DHCPstatus
面倒くさい。
サイトからファイルをダウンロードして展開するとこのように。
$ ls<br /> INSTALL README libraries.tar dhcpstatus.ini<br /> LICENSE VERSION scripts
ここにあるibraries.tarを展開すると、dhcpstatusというディレクトリが出来る。
それを/usr/local/にコピー。
つまり/usr/local/dhcpstatusというディレクトリが出来る。
さらに、dhcpstatus.iniも/usr/local/dhcpstatusの下へコピー。
そしてdhcpstatus.iniを修正
dhcpdの設定ファイル、leaseファイルの場所を指定する。
複数のサブネットを運用しているのでなければ、show_whole_subnetを1に変更
# location of the .conf file.<br /> conf_file=/usr/local/etc/dhcpd.conf<br /> leases_file=/var/db/dhcpd/dhcpd.leases<br /> show_whole_subnet=1<br />
そして実行
$ perl ./scripts/dhcpstatus<br /> Legacy library timelocal.pl will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at dhcpstatus/dhcpstatus.pm, line 26.<br /> DHCP Subnet Information
Subnet: 192.168.100.0 Netmask: 255.255.255.0<br /> IP range: 192.168.10.101 - 192.168.10.199 Router: 192.168.10.254<br /> IPs defined: 99 IPs used: 21 IPs free: 78
ベースにしているPerlが古すぎるので却下。
DHCP leasecount
こんな感じ。
$ ./dhcp-leasecount -l /var/db/dhcpd/dhcpd.leases 172.29.16.0-172.29.16.255<br /> defined(%hash) is deprecated at ./dhcp-leasecount line 100.<br /> (Maybe you should just omit the defined()?)<br /> defined(%hash) is deprecated at ./dhcp-leasecount line 102.<br /> (Maybe you should just omit the defined()?)<br /> defined(%hash) is deprecated at ./dhcp-leasecount line 104.<br /> (Maybe you should just omit the defined()?)<br /> Total available addresses: 256<br /> Active leases: 37 (14.5%)<br /> Expired leases: 75 (29.3%)<br /> Available addresses: 144 (56.2%)
なんかこれも間もなく使えなくなりそうな予感。perlスクリプト修正するのやだし。
Report DHCP
出力がhtmlなのですぐにやる気をなくした。
結局awkで。
こういうawkスクリプトを使うことにした。stackoverflow.comとかで見つけたと思う。
例えばgetDhcpStatus.shとして保存しておく。
#!/bin/sh<br /> awk '/^lease / { curlease = $2; } /^ binding state/ { lstates[curlease] = $3; } END { for (curl in lstates) { tstates[lstates[curl]]++; } for (curs in tstates) { print curs, tstates[curs]; } }' /var/db/dhcpd/dhcpd.leases
出力結果は例えば以下のように。
active; 66<br /> free; 275
うーん。minimalでよろしい。
出力をMRTGに。
でこれをMRTGに食わせる場合には、さらに以下のようなスクリプトを使ってMRTGから呼ぶ。#!/bin/sh
~/bin/mrtg/getDhcpStatus.sh | cut -f2 -d" "|head -2<br /> uptime | awk '{print $3}' | sed "s/,//"<br /> echo "leased, free IP addresses"