Zabbix實戰-簡易教程--日誌類

1、主動模式和被動模式介紹

要監控日誌,必須使用主動模式,那麼,什麼是主動模式?什麼是被動模式呢?html

一、主動模式和被動模式node

主動模式web

主動模式通信過程:
● Agent打開TCP鏈接(主動檢測變成Agent打開)
● Agent向Server請求items檢測列表
● Server返回items列表
● Agent 處理響應
● 關閉TCP鏈接
● Agent開始收集數據正則表達式


主動檢測提交數據過程
● Agent創建TCP鏈接
● Agent提交items列表收集的數據
● Server處理數據,並返回響應狀態
● 關閉TCP鏈接算法

 
 
被動模式
被動模式通訊過程
  ● Server打開一個TCP鏈接
  ● Server發送請求agent.ping\n
  ● Agent接收到請求而且響應<HEADER><DATALEN>1
  ● Server處理接收到的數據1
  ● 關閉TCP鏈接
not supported items通訊過程
  ● Server打開一個TCP鏈接
  ● Server發送請求vfs.fs.size[ no]\n
  ● Agent接收請求而且返回響應數據 <HEADER><DATALEN>ZBX_NOTSUPPORTED\0Cannot obtain filesystem information: [2] No such file or directory
  ● Server接收並處理數據, 將item的狀態改成「 not supported 」
  ● 關閉TCP鏈接 
 
從以上能夠看出,主動模式下server端壓力會減少,因此若是線上機器很是多的話,建議儘可能使用主動模式,有必定優點。

2、日誌監控原理及注意事項

0、Zabbix Server和Zabbix Agent會追蹤日誌文件的大小和最後修改時間(對於logrt),而且分別記錄在字節計數器和最新的時間計數器中。數據庫

  • Agent還在內部使用inode編號(在UNIX/GNU/Linux上)、文件索引(在Microsoft Windows上)和前512個日誌文件字節的MD5的求和,以便在日誌文件被截斷和旋轉時改進決策。
  • 在UNIX/GNU/Linux系統上,假定存儲日誌文件的文件系統會報告索引節點號,它可用於跟蹤文件。
  • 在Microsoft Windows上Zabbix代理肯定日誌文件所在的文件系統類型,並使用:
    • 在NTFS文件系統上64位文件索引。
    • 在ReFS文件系統(僅從Microsoft Windows Server 2012開始支持)128位文件ID。
    • 在文件索引改變的文件系統(例如FAT32,exFAT)上,當日志文件旋轉致使具備相同最近修改時間的多個日誌文件時,使用fall-back(回退)算法是在不肯定的條件下采起的明智方法。
  • inode號,文件索引和MD5總和由Zabbix代理在內部收集。 它們不傳輸到Zabbix服務器,而且在Zabbix代理中止時丟失。
  • 不要使用「touch」實用程序修改日誌文件的最後修改時間,不要在之後恢復原始名稱的狀況下複製日誌文件(這將更改文件inode號)。 在這兩種狀況下,文件將被視爲不一樣的,將從頭開始進行分析,這可能會致使重複的告警。
  • 若是logrt[]監控項有幾個匹配的日誌文件,而且Zabbix代理程序跟隨其中最新的日誌文件,同時最新的日誌文件被刪除,則在「<目錄>」中會出現一條警告消息「沒有文件匹配」<regexp mask>「。 Zabbix代理將忽略修改時間小於最近日期的日誌文件。


一、Agent會從上次讀取日誌的地方開始讀取日誌。
二、已經分析的字節數和最新時間計數器的數據會被記錄在Zabbix數據庫,而且發送給Agent,這樣可以保證Agent從上次中止的地方開始讀取日誌。
三、當日志文件大小小於Agent字節計數器中的數字時,字節計數器會變爲0,從頭開始讀取文件。服務器

四、若是目錄中存在多個匹配文件,且最後修改時間相同,則Agent會嘗試以相同的修改時間對全部日誌文件進行正確分析,並避免跳過數據或分析相同的數據兩次(儘管有時不能保證)。Agent不承擔任何特定的日誌文件輪詢方案。網絡

 當提供具備相同修改時間的多個日誌文件時,Agent將以字典順序降序處理它們。 所以,對於某些輪詢方案,日誌文件將按原始順序進行分析。對於其它輪詢方案,原始日誌文件順序將不會被執行,這可能致使以更改順序報告匹配的日誌文件記錄(若是日誌文件的上次修改時間不一樣,則不會發生問題)。
五、全部符合配置的文件,都會被監控。
六、一個目錄下的多個文件若是修改時間相同,會按照字母順序來讀取。
七、到每一個Update interval的時間時,Agent會檢查一次目錄下的文件。
八、Zabbix Agent每秒發送日誌量,有一個日誌行數上限,防止網絡和CPU負載太高,這個數字在zabbix_agentd.conf中的MaxLinePerSecond。測試

九、要找到所需的字符串,Zabbix將處理比MaxLinesPerSecond中設置的新行多4倍。 所以,若是log[]或logrt[]監控項的更新間隔爲1秒,則默認狀況下,Agent將分析小於80個日誌文件記錄,並在一次檢查中向Zabbix服務器發送不超過20個匹配記錄。經過在Agent配置文件中增長MaxLinesPerSecond或在監控項Key中設置maxlines參數,能夠在一次檢查中將限制最多增長4000個分析的日誌文件記錄和1000個匹配記錄發送到Zabbix服務器。若是更新間隔設置爲2秒,則一次檢查的限制將被設置爲更新間隔1秒的2倍。編碼

十、此外,日誌和日誌計數值始終限於代理髮送緩衝區大小的50%,即便其中沒有非日誌值。 所以,爲了在一個鏈接(而不是幾個鏈接)中發送最大值,代理BufferSize參數必須至少爲maxlines x 2。

十一、對大於256kB的日誌文件記錄,只有第一個256kB與正則表達式匹配,其他的記錄將被忽略。 可是,若是Zabbix代理在處理長記錄時中止,代理內部狀態將丟失,而且能夠在代理從新啓動後再次分析不一樣的長記錄。

十二、「\」路徑分隔符的特殊注意事項:若是file_format是「file\.log」,則不該該有「file」目錄,由於不可能明確地定義是否轉義了「.」,以及是否爲第一個文件名符號。

1三、僅在文件名中支持logrt的正則表達式,不支持目錄正則表達式匹配。

1四、在UNIX平臺上,若是要找的日誌文件的目錄不存在,則logrt[]監控項將變爲NOTSUPPORTED。

1五、在Microsoft Windows上,若是目錄不存在,則監控項將不會變爲NOTSUPPORTED(例如,若是目錄在監控項Key中拼寫錯誤)。

1六、沒有用於logrt[]監控項的日誌文件不會使其NOTSUPPORTED。讀取logrt[]監控項的日誌文件的錯誤將做爲告警記錄到Zabbix代理日誌文件中,但不要使監控項NOTSUPPORTED。

1七、Zabbix代理日誌文件能夠幫助你找出爲何log[]或logrt[]監控項成爲NOTSUPPORTED。Zabbix能夠監視其代理日誌文件,除了在DebugLevel=4時。
1八、在logtr中,正則表達式只對文件名有效,對文件目錄無效。 

 

3、日誌監控項介紹

針對日誌監控,zabbix在3.2之前有2個專門的監控項:log和logtr,在3.2之後新增了2個log.count和logtr.count。

log[/path/to/some/file,<regexp>,<encoding>,<maxlines>,<mode>,<output>]
logtr[/path/to/some/filename_format,<regexp>,<encoding>,<maxlines>,<mode>,<output>]

/path/to/some/file:要監控的日誌文件
◆ regexp:要匹配內容的正則表達式,或者直接寫你要檢索的內容也能夠,例如我想檢索帶ERROR關鍵詞的記錄
◆ encoding:編碼相關,留空便可
◆ maxlines:一次性最多提交多少行,這個參數覆蓋配置文件zabbxi_agentd.conf中的’MaxLinesPerSecond’,這裏優先級比配置文件裏面的高,咱們也能夠留空
◆ mode:默認是all,也能夠是skip,skip會跳過老數據
◆ output:輸出給zabbix server的數據。能夠是\一、\2一直到\9,\1表示第一個正則表達式匹配出得內容,\2表示第二個正則表達式匹配得出的內容。

注意:

一、logtr的第一個參數是文件名的格式,能夠是正則表達式,主要用於針對輪詢或滾動日誌使用,好比咱們平常的程序日誌:gameserver.20180102.log、gameserver.20180103.log、gameserver.20180104.log......

二、無論新日誌、老日誌,只要他們有變動,zabbix都會監控。
三、只要配置了<regexp>,Zabbix會根據<regexp>的正則表達式來匹配日誌中的內容。

四、必定要保證Zabbix用戶對日誌文件有可讀權限,不然這個Item的狀態會變成「unsupported」。

 

4、範例

配置前,請確保Agent有以下兩項配置
一、Hostname設定爲Server建立主機是填寫的Host name,必須一致
二、ServerActive設定爲Server的IP

1、log[/path/to/some/file,<regexp>,<encoding>,<maxlines>,<mode>,<output>]    

配置步驟

一、Web端配置監控項

 

 

 二、Agent端配置Hostname

這裏必定要和web端的主機名一致!!!!!!!!!

三、測試並查看結果

咱們這裏是測試經過rz上傳文件後,會在messages裏面出現rz字符串。

 

 查看最新數據:

 

 

2、logtr[/path/to/some/filename_format,<regexp>,<encoding>,<maxlines>,<mode>,<output>]

配置步驟基本上和log同樣。

一、配置監控項

二、查看結果

 

 

5、主動模式log分析

主動模式第一階段:(請求items,並準備採集數據)
1.Agent向ServerActive機器發起請求
20674:20160728:155754.489 active checks #1 [getting list of active checks]
20674:20160728:155754.489 In refresh_active_checks() host:'192.168.1.100' port:10051
20674:20160728:155754.490 sending [{
"request":"active checks",
"host":"192.168.1.100",
"host_metadata":"Linux bgp-bjzw-zabbix-server02.xsjom.cn 2.6.32-431.20.3.el6.x86_64 #1 SMP Thu Jun 19 21:14:45 UTC 2014 x86_64"}]

2.ServerActive響應後,Agent得到從ServerActive返回的items列表
20674:20160728:155754.490 before read
20666:20160728:155754.493 collector [processing data]
20666:20160728:155754.493 In update_cpustats()
20666:20160728:155754.493 End of update_cpustats()
20666:20160728:155754.493 collector [idle 1 sec]
20674:20160728:155754.494 got [{"response":"success","data":[{"key":"log[/var/log/messages,charts,,,skip,]","delay":10,"lastlogsize":19499,"mtime":0}]}]

3.關閉TCP鏈接,準備收集數據
20674:20160728:155754.494 In parse_list_of_checks()
20674:20160728:155754.494 In disable_all_metrics()
20674:20160728:155754.495 In add_check() key:'log[/var/log/messages,charts,,,skip,]' refresh:10 lastlogsize:19499 mtime:0
20674:20160728:155754.495 End of add_check()
20674:20160728:155754.495 End of refresh_active_checks():SUCCEED

主動模式第二階段:(agent提交items數據,ActiveServer處理並回應結果)
1.Agent獲取itmes列表後,處理裏面的items
20674:20160728:155754.495 active checks #1 [processing active checks]
20674:20160728:155754.495 In process_active_checks() server:'192.168.1.100' port:10051)
20674:20160728:155754.495 In process_logrt() is_logrt:0 filename:'/var/log/messages' lastlogsize:19499 mtime:0 error_count:0

20674:20160728:155754.496 In add_logfile() filename:'/var/log/messages' mtime:1469692670 size:19586
20674:20160728:155754.496 add_logfile() logfiles:0x282e540 logfiles_alloc:64
20674:20160728:155754.496 End of add_logfile()

20674:20160728:155754.496 setup_old2new: is_same_file(/var/log/messages, /var/log/messages) = 1
1.1.處理老的文件
20674:20160728:155754.496 process_logrt() old file list:
20674:20160728:155754.496 nr:0 filename:'/var/log/messages' mtime:1469692248 size:19499 processed_size:19499 seq:1 incomplete:0 dev:64768 ino_hi:0 ino_lo:652985 md5size:512 md5buf:b2f842e0e504b09c8cac18795a66bc93
1.2處理新的文件
20674:20160728:155754.496 process_logrt() new file list: (mtime:0 lastlogsize:19499 start_idx:0)
20674:20160728:155754.496 nr:0 filename:'/var/log/messages' mtime:1469692670 size:19586 processed_size:19499 seq:0 incomplete:0 dev:64768 ino_hi:0 ino_lo:652985 md5size:512 md5buf:b2f842e0e504b09c8cac18795a66bc93
1.3獲取符合要求結果的數據值
20674:20160728:155754.496 In process_log() filename:'/var/log/messages' lastlogsize:19499 mtime: 0
20674:20160728:155754.497 In process_value() key:'192.168.1.100:log[/var/log/messages,charts,,,skip,]' value:'Jul 28 15:57:50 localhost rz[23429]: [root] charts.html/ZMODEM: 9976 Bytes, 102576 BPS'
20674:20160728:155754.497 In send_buffer() host:'192.168.1.100' port:10051 values:0/100
20674:20160728:155754.497 End of send_buffer():SUCCEED
20674:20160728:155754.497 buffer: new element 0
20674:20160728:155754.497 End of process_value():SUCCEED
20674:20160728:155754.497 End of process_log() filename:'/var/log/messages' lastlogsize:19586 mtime: 0 ret:SUCCEED
20674:20160728:155754.497 End of process_logrt():SUCCEED error_count:0
20674:20160728:155754.497 End of process_active_checks()
20674:20160728:155754.497 In get_min_nextcheck()
20674:20160728:155754.498 active checks #1 [idle 1 sec]
20666:20160728:155755.494 collector [processing data]
20666:20160728:155755.494 In update_cpustats()
20666:20160728:155755.494 End of update_cpustats()
20666:20160728:155755.495 collector [idle 1 sec]
1.4發送數據給ActiveServer
20674:20160728:155755.498 In send_buffer() host:'192.168.1.100' port:10051 values:1/100
20674:20160728:155755.499 JSON before sending [{
"request":"agent data",
"data":[
{
"host":"192.168.1.100",
"key":"log[\/var\/log\/messages,charts,,,skip,]",
"value":"Jul 28 15:57:50 localhost rz[23429]: [root] charts.html\/ZMODEM: 9976 Bytes, 102576 BPS",
"lastlogsize":19586,
"clock":1469692674,
"ns":497558898}],
"clock":1469692675,
"ns":498717648}]

2.ActiveServer迴應收到數據,並返回狀態 20674:20160728:155755.499 JSON back [{"response":"success","info":"processed: 1; failed: 0; total: 1; seconds spent: 0.000101"}] 20674:20160728:155755.499 In check_response() response:'{"response":"success","info":"processed: 1; failed: 0; total: 1; seconds spent: 0.000101"}' 20674:20160728:155755.500 info from server: 'processed: 1; failed: 0; total: 1; seconds spent: 0.000101' 20674:20160728:155755.500 End of check_response():SUCCEED 20674:20160728:155755.500 OK 20674:20160728:155755.500 End of send_buffer():SUCCEED 20674:20160728:155755.500 active checks #1 [idle 1 sec]

相關文章
相關標籤/搜索