◆ 目的
オープンソースのDNSキャッシュサーバとして利用されている
unboundの統計情報をzabbixで描く。
dnsクライアントからzabbix_senderを使ってzabbixサーバへ結果を送りつける。
zabbixサーバ側の設定は終わっているものとする。
◆ 統計ツール
【グラフ描画ツール概要】
テンポラリファイルとしてキー名+値のファイルを自動作成する。
(/usr/local/dns/tmp/unbound.stats ファイル例)
total.num.queries 180983
total.num.cachehits 156961
・
・
・
time.now 1363833601.385187
time.up 10774139.658005
・
・
・
mem.total.sbrk=15507456
mem.cache.rrset=4878710
・
・
・
histogram.000000.000000.to.000000.000001 2877
histogram.000000.000001.to.000000.000002 0
・
・
・
num.query.type.A 144542
num.query.type.PTR 912
・
・
・
これをzabbix_senderでzabbixサーバへ送りつけるだけである。
ツール内抜粋。
ツール内抜粋。
awk '{print "- unbound."$1" "$2;}' $STATS | $SENDER -vv -s $HOST -z $SERVER -p $PORT -i - > $LOG 2>&1
上のファイルは$STAT変数に入る。
【事前準備】
下のようなファイルを手動で用意しておく。
unboundの統計結果には下記をキーとするクエリとアンサ結果が
現れてくるまでは出力はされない。
ただし、グラフを描く際は明示的に0として記録しておきたい。
そのために利用するファイルである(※1で利用する)。
# vi /usr/local/dns/conf/unbound_stats.cfg
num.query.type.A
num.query.type.PTR
num.query.type.DS
num.query.type.MX
num.query.type.NS
num.query.type.SOA
num.query.type.SRV
num.answer.rcode.NOERROR
num.answer.rcode.SERVFAIL
num.answer.rcode.NXDOMAIN
少しややこしいのでもう少し説明を加えておく。
unboundの統計結果として現れてきたキーをa, b, c, dとする。・・・①
unbound_stats.cfgファイルで明示的に記載するキーをc, d, eとする。・・・②
①と①と②を加算してひとつしかないものを明示的に指示する必要があるということである。
a + a = 2
b + b = 2
c + c + c = 3
d + d + d = 3
e = 1 ⇒ 0 とする
そしてこれが統計情報をzabbixへ送りつけるツールである。
# vi /usr/local/dns/conf/stat.sh
#!/bin/bash
CMD="/usr/sbin/unbound-control"
CFG="/usr/local/dns/conf/unbound_stats.cfg"
LIST="/usr/local/dns/tmp/unbound.lst"
STATS="/usr/local/dns/tmp/unbound.stats"
HOST=`hostname`
SENDER="/usr/bin/zabbix_sender"
SERVERS="192.0.2.1 192.0.2.2"
PORT="10051"
LOG="/var/log/zabbix-sender.log"
cp $STATS $STATS.bak
# スレッド単位での統計値は除外し合計値だけを求める
$CMD stats_noreset | \
awk -F '=' '/^num/ || /^histogram/ || /^total/ || /^time/ || /^mem/ {print $1" "$2}' \
> $STATS
# ※1での説明のためである
awk '{print $1}' $STATS > $LIST
sort $LIST $LIST $CFG | uniq -c | awk '$1==1{print $2" 0";}' >> $STATS
for SERVER in $SERVERS
do
awk '{print "- unbound."$1" "$2;}' $STATS | $SENDER -vv -s $HOST -z $SERVER -p $PORT -i - > $LOG 2>&1
done
# chmod 755 /usr/local/dns/bin/stat.sh
# /usr/local/dns/bin/stat.sh