1. 程式人生 > >zabbix監控DNS服務

zabbix監控DNS服務

正則表達式 false tro lang 還需要 org 獲取 訪問 一次

為了方便公司內部訪問jira、wiki等內網應用服務,我們搭建了DNS服務,為全公司提供域名解析服務,重要性可想而知,因此,有了監控的需求,這裏記錄下使用zabbix來監控dns的過程。

監控DNS分為三部分

    1. 端口監控(53)
    1. 日誌監控(/var/log/messages中出現named.*fatal)
    1. 解析域名監控(腳本定時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,,,,,]
logtr[/path/to/some/filename_format,,,,,]
regexp:要匹配內容的正則表達式,或者直接寫你要檢索的內容也可以,例如我想檢索帶ERROR關鍵詞的記錄
◆ encoding:編碼相關,留空即可
◆ maxlines:一次性最多提交多少行,這個參數覆蓋配置文件zabbxi_agentd.conf中的’MaxLinesPerSecond’,我們也可以留空
◆ mode:默認是all,也可以是skip,skip會跳過老數據
◆ output:輸出給zabbix server的數據。可以是\1、\2一直\9,\1表示第一個正則表達式匹配出得內容,\2表示第二個正則表達式匹配錯的內容。
logtr和log唯一的區別是:logtr支持文件名的正則表達式,如日誌名位www.a.com_2015-01-01.log、www.a.com_2015-01-02.log等等,log監控不了,這時候就需要用logtr了。

監控原理及註意事項

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自帶的監控項已經無法實現了。這時需要我們來自定義監控項。
自定義監控的配置過程如下:

  1. 編寫監控腳本,獲取監控項的具體值
  2. 在zabbix_agentd.conf文件中定義UserParameter
  3. 在界面配置item
    4.添加觸發器(Trigger)

編寫監控腳本

  1. #!/bin/bash
  2. URL=`dig www.baidu.com +time=3 +short @10.0.254.113|head -1`
  3. # 以10.0.254.113為dns服務器,解析www.baidu.com 超時3s。
  4. if [ $"$URL"x = ‘www.a.shifen.com.‘x ]
  5. then
  6. echo 1
  7. else
  8. echo 0
  9. fi

判斷得到的域名是不是百度的cname,這裏要註意後邊都有個x,這個是重點,如果dig命令得到的結果為空的話,就是x = ‘www.a.shifen.com.x‘,但如果沒有這個x,那麽‘ ‘ = ‘www.a.shifen.com.x‘ 這樣會報錯的。

在zabbix_agent.conf.d目錄下創建一個zabbix_checkdns.conf的文件

  1. cat /home/ddd/zabbix_agent/etc/zabbix_agentd.conf.d/zabbix_dns.conf
  2. 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[]中的值對應執行腳本的時候就會變成12.。。,
這個大家可以根據需求在自定義腳本的時候使用。

在界面配置items:

技術分享
這個就非常簡單了。

添加觸發器

技術分享
最近三次的值都為0,則觸發器成立,觸發報警。

zabbix監控DNS服務