dns服务目前正常运行,以下开始使用zabbix监控DNS服务.

一、客户端操作

1.登陆dns部署的服务器,安装zabbix客户端,安装客户端 (http://douya.blog.51cto.com/6173221/1431074)  

1
2
3
我的客户端安装路径:
/usr/local/zabbix_agent/etc/zabbix_agent
.conf                添加以下内容:vim 
/usr/local/zabbix_agent/etc/zabbix_agent
.conf 
UserParameter=check_dns[*],
/usr/local/zabbix_agent/bin/zabbix_monitor_dns
.sh $1
然后在
cd  
/usr/local/zabbix_agent/bin


添加一个zabbix_monitor_dns.sh文件,内容为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/bin/bash
#Description :By DNS SERVER
named_stats=
'/tmp/named_stats.txt'
###++ Incoming Requests ++
Incoming_QUERY=`
awk 
'/QUERY/{print $1}' 
$named_stats`
Incoming_RESERVED9=`
awk 
'/RESERVED9/{print $1}' 
$named_stats`
###++ Incoming Queries ++
Incoming_A=`
grep 
A $named_stats |
awk 
'NR==1{print $1}'
`
Incoming_SOA=`
grep 
SOA $named_stats |
awk 
'NR==1{print $1}'
`
Incoming_PTR=`
grep 
PTR $named_stats |
awk 
'NR==1{print $1}'
`
Incoming_MX=`
grep 
MX $named_stats |
awk 
'NR==1{print $1}'
`
Incoming_TXT=`
grep 
TXT $named_stats |
awk 
'NR==1{print $1}'
`
Incoming_AAAA=`
grep 
AAAA $named_stats |
awk 
'NR==1{print $1}'
`
Incoming_A6=`
grep 
A6 $named_stats |
awk 
'NR==1{print $1}'
`
Incoming_IXFR=`
grep 
IXFR $named_stats |
awk 
'NR==1{print $1}'
`
Incoming_ANY=`
grep 
ANY $named_stats |
awk 
'NR==1{print $1}'
`
###++ Outgoing Queries ++
Outgoing_A=`
grep  
"\<A\>" 
$named_stats |
awk 
'NR==2{print $1}'
`
Outgoing_NS=`
grep 
NS $named_stats |
awk 
'NR==1{print $1}'
`
Outgoing_PTR=`
grep 
PTR $named_stats |
awk 
'NR==2{print $1}'
`
#Outgoing_AAAA=`grep NS $named_stats |awk 'NR==2{print $1}'`
Outgoing_DNSKEY=`
grep 
DNSKEY $named_stats |
awk 
'NR==1{print $1}'
`
Outgoing_ANY=`
grep 
ANY $named_stats |
awk 
'NR==2{print $1}'
`
Outgoing_DLV=`
grep 
DLV $named_stats |
awk 
'NR==2{print $1}'
`
###++ Name Server Statistics ++
Statistics_IPv4_requests=`
grep 
"IPv4 requests received" 
$named_stats |
awk 
'NR==1{print $1}'
`
Statistics_requests_received=`
grep 
"requests with EDNS(0) received" 
$named_stats |
awk 
'NR==1{print $1}'
`
Statistics_TCP_requests=`
grep 
"TCP requests received" 
$named_stats |
awk 
'NR==1{print $1}'
`
Statistics_queries_rejected=`
grep 
"recursive queries rejected" 
$named_stats |
awk 
'NR==1{print $1}'
`
Statistics_responses_sent=`
grep 
"responses sent" 
$named_stats |
awk 
'NR==1{print $1}'
`
Statistics_EDNS_sent=`
grep 
"responses with EDNS(0) sent" 
$named_stats |
awk 
'NR==1{print $1}'
`
Statistics_successful_answer=`
grep 
"queries resulted in successful answer" 
$named_stats |
awk 
'NR==1{print $1}'
`
Statistics_authoritative_answer=`
grep 
"queries resulted in authoritative answer" 
$named_stats |
awk 
'NR==1{print $1}'
`
Statistics_non_authoritative_answer=`
grep 
"queries resulted in non authoritative answer" 
$named_stats |
awk 
'NR==1{print $1}'
`
Statistics_nxrrset=`
grep 
"queries resulted in nxrrset" 
$named_stats |
awk 
'NR==1{print $1}'
`
Statistics_SERVFAIL=`
grep 
"queries resulted in SERVFAIL" 
$named_stats |
awk 
'NR==1{print $1}'
`
Statistics_NXDOMAIN=`
grep 
"queries resulted in NXDOMAIN" 
$named_stats |
awk 
'NR==1{print $1}'
`
Statistics_recursion=`
grep 
"queries resulted in recursion" 
$named_stats |
awk 
'NR==1{print $1}'
`
Statistics_received=`
grep 
"queries resulted in received" 
$named_stats |
awk 
'NR==1{print $1}'
`
Statistics_dropped=`
grep 
"queries resulted in dropped" 
$named_stats |
awk 
'NR==1{print $1}'
`
###++ Resolver Statistics ++
Resolver_sent=`
grep 
"IPv4 queries sent" 
$named_stats |
awk 
'NR==1{print $1}'
`
Resolver_received=`
grep 
"IPv4 responses received" 
$named_stats |
awk 
'NR==1{print $1}'
`
#Resolver_NXDOMAIN_received=`grep "" $named_stats |awk 'NR==1{print $1}'`
#Resolver_responses_received=`sed -n '49p' $named_stats |sed 's/^[ \t]*//g'|cut -d ' ' -f 1`
#Resolver_delegations_received=`sed -n '50p' $named_stats |sed 's/^[ \t]*//g'|cut -d ' ' -f 1`
Resolver_query_retries=`
grep 
"query retries" 
$named_stats |
awk 
'NR==1{print $1}'
`
Resolver_query_timeouts=`
grep 
"query timeouts" 
$named_stats |
awk 
'NR==1{print $1}'
`
Resolver_fetches=`
grep 
"IPv4 NS address fetches" 
$named_stats |
awk 
'NR==1{print $1}'
`
#Resolver_fetch_failed=`sed -n '54p' $named_stats |sed 's/^[ \t]*//g'|cut -d ' ' -f 1`
Resolver_validation_attempted=`
grep 
"DNSSEC validation attempted" 
$named_stats |
awk 
'NR==1{print $1}'
`
Resolver_validation_succeeded=`
grep 
"DNSSEC validation succeeded" 
$named_stats |
awk 
'NR==1{print $1}'
`
Resolver_NX_validation_succeeded=`
grep 
"DNSSEC NX validation succeeded" 
$named_stats |
awk 
'NR==1{print $1}'
`
Resolver_RTT_10ms=`
grep 
"queries with RTT < 10ms" 
$named_stats |
awk 
'NR==1{print $1}'
`
Resolver_RTT_100ms=`
grep 
"queries with RTT 10-100ms" 
$named_stats |
awk 
'NR==1{print $1}'
`
Resolver_RTT_500ms=`
grep 
"queries with RTT 100-500ms" 
$named_stats |
awk 
'NR==1{print $1}'
`
Resolver_RTT_800ms=`
grep 
"queries with RTT 500-800ms" 
$named_stats |
awk 
'NR==1{print $1}'
`
Resolver_RTT_1600ms=`
grep 
"queries with RTT 800-1600ms" 
$named_stats |
awk 
'NR==1{print $1}'
`
#Resolver_RTT_gt_1600ms=`sed -n '63p' $named_stats |sed 's/^[ \t]*//g'|cut -d ' ' -f 1`
###++ Cache DB RRsets ++
Cache_A=`
grep  
"\<A\>" 
$named_stats |
awk 
'NR==3{print $1}'
`
Cache_NS=`
grep  
"\<NS\>" 
$named_stats |
awk 
'NR==3{print $1}'
`
#Cache_CNAME=`sed -n '69p' $named_stats |sed 's/^[ \t]*//g'|cut -d ' ' -f 1`
#Cache_SOA=`sed -n '70p' $named_stats |sed 's/^[ \t]*//g'|cut -d ' ' -f 1`
#Cache_PTR=`sed -n '71p' $named_stats |sed 's/^[ \t]*//g'|cut -d ' ' -f 1`
Cache_AAAA=`
grep  
"\<AAAA\>" 
$named_stats |
awk 
'NR==2{print $1}'
`
Cache_DS=`
grep 
"DS" 
$named_stats |
awk 
'NR==1{print $1}'
`
Cache_RRSIG=`
grep 
"RRSIG" 
$named_stats |
awk 
'NR==1{print $1}'
`
Cache_NSEC=`
grep 
"NSEC" 
$named_stats |
awk 
'NR==1{print $1}'
`
Cache_DNSKEY=`
grep 
"DNSKEY" 
$named_stats |
awk 
'NR==2{print $1}'
`
#Cache_AAA=`sed -n '77p' $named_stats |sed 's/^[ \t]*//g'|cut -d ' ' -f 1`
Cache_cDLV=`
grep 
"DLV" 
$named_stats |
awk 
'NR==2{print $1}'
`
#Cache_NXDOMAIN=`sed -n '79p' $named_stats |sed 's/^[ \t]*//g'|cut -d ' ' -f 1`
###++ Socket I/O Statistics ++
Socket_UDP_opened=`
grep 
"UDP/IPv4 sockets opened" 
$named_stats |
awk 
'NR==1{print $1}'
`
Socket_TCP_opened=`
grep 
"TCP/IPv4 sockets opened" 
$named_stats |
awk 
'NR==1{print $1}'
`
Socket_UDP_closed=`
grep 
"UDP/IPv4 sockets closed" 
$named_stats |
awk 
'NR==1{print $1}'
`
Socket_TCP_closed=`
grep 
" TCP/IPv4 sockets closed" 
$named_stats |
awk 
'NR==1{print $1}'
`
Socket_UDP_established=`
grep 
"UDP/IPv4 connections established" 
$named_stats |
awk 
'NR==1{print $1}'
`
Socket_TCP_established=`
grep 
"TCP/IPv4 connections accepted" 
$named_stats |
awk 
'NR==1{print $1}'
`
Socket_TCP_accepted=`
grep 
"TCP/IPv4 recv errors" 
$named_stats |
awk 
'NR==1{print $1}'
`
eval 
echo 
\$$1

 这个脚本的内容就是监控bind管理工具rndc stats产生的一个dns状态信息文件named_stats.txt,这个文件的地址是被/etc/named.conf控制,默认是在spacer.gifvar/named/data目录

此脚本给与755权限,zabbix用户与组

1
2
1、
chmod 
755 
/usr/local/zabbix_agent/bin/zabbix_monitor_dns
.sh
2、
chown 
zabbix:zabbix 
/bin/bash 
/usr/local/zabbix_agent/bin//zabbix_monitor_dns
.sh

然后在crontab里使用root用户添加

1

1
*
/1 
* * * * 
/bin/bash 
/usr/local/zabbix_agent/bin/monitor_dns
.sh

/usr/local/zabbix_agent/bin/monitor_dns.sh的内容为

1
2
3
4
5
6
7
#!/bin/bash
named_stats=
'/var/named/data/named_stats.txt'
if 
[ -e $named_stats ];
then
   
rm 
-rf $named_stats
fi
/usr/sbin/rndc 
stats >>
/dev/null 
2>&1
mv 
$named_stats 
/tmp/

这个脚本的作用是每1分钟运行一次rndc status命令,然后把named_stats.txt放到tmp目录下,如果在旧目录里已有这个文件就删除(这样做是因为rndc stats运行后会不断的把信息追加到文件里,而不是覆盖,为了统计方便才删除旧文件,在运行命令生成新文件)

给与脚本755权限

重启zabbix agent服务

1
2
ps 
-ef|
grep 
zabbix_agentd|
grep 
-
v 
grep 
awk 
-F 
" " 
'{print $2}'
|
xargs 
kill 
-9
/usr/local/zabbix_agent/sbin/zabbix_agentd 
-c 
/usr/local/zabbix_agent/etc/zabbix_agentd
.conf


二、zabbix服务端操作

1.在zabbix的web界面里连接监控dns模板

在web里选择配置-模板

然后选择导入

然后把之前下载的dns模板。

然后在选择主机加入这个模板即可。

下面是监控的效果图

1、dns的tcp/udp 53端口的监控

2、Incoming Requests


3、Incoming Queries

4、Outgoing Queries

5、Name Server Statistics


6、Resolver Statistics


7、Cache DB RRsets


8、Socket I/O Statistics


目前监控展示方式为增量变化,所以图上显示的值肯定比named_stats.txt里的少。建议还是大家自己根据需要来修改与优化,我这个只是提供一个样例而已,模拟在附件里。


原文链接:http://dl528888.blog.51cto.com/2382721/1341799?utm_source=tuicool&utm_medium=referral