為了方便公司內部訪問jira、wiki等內網應用服務,我們搭建了DNS服務,為全公司提供域名解析服務,重要性可想而知,因此,有了監控的需求,這里記錄下使用zabbix來監控dns的過程。
監控DNS分為三部分
-
- 端口監控(53)
-
- 日志監控(/var/log/messages中出現named.*fatal)
-
- 解析域名監控(腳本定時dig www.baidu.com)
監控實施:
為了方便遷移,結構清晰,使用創建模板,在模板中定義監控項(Items)、觸發器(trigger),然后在主機中鏈接模板。這樣以后再增加或者遷移dns服務,直接套用模板就行了。
端口監控
配置—模板–創建模板—-輸入模板名稱,然后點保存。
模板創建成功后,開始創建監控項:
配置—模板—DNS模板—-監控項—-創建監控項
填寫名稱、類型、鍵值,其他默認即可。創建完成后,點保存。
創建監控項,監控項可以去獲取數據了。但是想要報警還需要添加觸發器(trigger)來觸發報警。
配置—-模板—DNS模板—觸發器—創建觸發器
日志監控
同樣在DNS模板中創建日志的監控項。
這里需要重點說一下監控項中的:鍵值(key)
log[/var/log/messages,named.*fatal,,skip,]
zabbix的日志文件監控,它最主要的是監控日志文件中有沒有某個字符串的表達式,對應日志輪轉與否,zabbix都支持。
在配置Item的時候,類型選擇Zabbix agent (active),這里主要需要配置的是鍵值(Key)。下面是監控日志的兩種key——log和logtr。
log[/path/to/some/file,
監控原理及注意事項
1、Zabbix Server和Zabbix Agent會追蹤日志文件的大小和最后修改時間,並且分別記錄在字節計數器和最新的時間計數器中。
2、Agent會從上次讀取日志的地方開始讀取日志。
3、字節計數器和最新時間計數器的數據會被記錄在Zabbix數據庫,並且發送給Agent,這樣能夠保證Agent從上次停止的地方開始讀取日志。
4、當日志文件大小小於字節計數器中的數字時,字節計數器會變為0,從頭開始讀取文件。
5、所有符合配置的文件,都會被監控。
6、一個目錄下的多個文件如果修改時間相同,會按照字母順序來讀取。
7、到每個Update interval的時間時,Agent會檢查一次目錄下的文件。
8、Zabbix Agent每秒發送日志量,有一個日志行數上限,防止網絡和CPU負載過高,這個數字在zabbix_agentd.conf中的MaxLinePerSecond。
9、在logtr中,正則表達式只對文件名有效,對文件目錄無效。
好,配置好監控項后,我們來配置觸發器:
表達式內容說明:如果監控項獲取的數據中出現了fatal則為1(真),如果60s之內沒數據,則為0(假),也就是說只有60s內出現了新數據,並且出現了fatal,這個時候觸發器表達式成立,才會觸發報警。
域名解析監控(dig)
測試DNS解析域名功能,這個zabbix自帶的監控項已經無法實現了。這時需要我們來自定義監控項。
自定義監控的配置過程如下:
- 編寫監控腳本,獲取監控項的具體值
- 在zabbix_agentd.conf文件中定義UserParameter
- 在界面配置item
4.添加觸發器(Trigger)
編寫監控腳本
#!/bin/bash
URL=`dig www.baidu.com +time=3 +short @10.0.254.113|head -1`
# 以10.0.254.113為dns服務器,解析www.baidu.com 超時3s。
if [ $"$URL"x = 'www.a.shifen.com.'x ]
then
echo 1
else
echo 0
fi
判斷得到的域名是不是百度的cname,這里要注意后邊都有個x,這個是重點,如果dig命令得到的結果為空的話,就是x = 'www.a.shifen.com.x',但如果沒有這個x,那么' ' = 'www.a.shifen.com.x' 這樣會報錯的。
在zabbix_agent.conf.d目錄下創建一個zabbix_checkdns.conf的文件
cat /home/ddd/zabbix_agent/etc/zabbix_agentd.conf.d/zabbix_dns.conf
UserParameter=chk.dns[*],/bin/bash /home/ddd/zabbix_agent/etc/scripts/zabbix_checkdns.sh
chk.dns就是在添加監控項(items)時的鍵值(key),當zabbix配置chk.dns這個key的時候,就會執行后邊配置的命令:/bin/bash /home/ddd/zabbix_agent/etc/scripts/zabbix_checkdns.sh,
而chk.dns[]表示[]可以接受參數,比如chk.dns[www.baidu.com,192.168.30.1],這時候執行腳本的時候就變成了 /bin/bash /home/ddd/zabbix_agent/etc/scripts/zabbix_checkdns.sh www.baidu.com 192.168.30.1,chk.dns[]中的值對應執行腳本的時候就會變成
2.。。,
這個大家可以根據需求在自定義腳本的時候使用。
在界面配置items:
這個就非常簡單了。
添加觸發器
最近三次的值都為0,則觸發器成立,觸發報警。