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


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

要監控日志,必須使用主動模式,那么,什么是主動模式?什么是被動模式呢?

1、主動模式和被動模式

主動模式

主動模式通訊過程:
● 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端壓力會減小,所以如果線上機器非常多的話,建議盡量使用主動模式,有一定優勢。

二、日志監控原理及注意事項

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代理將忽略修改時間小於最近日期的日志文件。


1、Agent會從上次讀取日志的地方開始讀取日志。
2、已經分析的字節數和最新時間計數器的數據會被記錄在Zabbix數據庫,並且發送給Agent,這樣能夠保證Agent從上次停止的地方開始讀取日志。
3、當日志文件大小小於Agent字節計數器中的數字時,字節計數器會變為0,從頭開始讀取文件。

4、如果目錄中存在多個匹配文件,且最后修改時間相同,則Agent會嘗試以相同的修改時間對所有日志文件進行正確分析,並避免跳過數據或分析相同的數據兩次(盡管有時不能保證)。Agent不承擔任何特定的日志文件輪詢方案。

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

9、要找到所需的字符串,Zabbix將處理比MaxLinesPerSecond中設置的新行多4倍。 因此,如果log[]或logrt[]監控項的更新間隔為1秒,則默認情況下,Agent將分析小於80個日志文件記錄,並在一次檢查中向Zabbix服務器發送不超過20個匹配記錄。通過在Agent配置文件中增加MaxLinesPerSecond或在監控項Key中設置maxlines參數,可以在一次檢查中將限制最多增加4000個分析的日志文件記錄和1000個匹配記錄發送到Zabbix服務器。如果更新間隔設置為2秒,則一次檢查的限制將被設置為更新間隔1秒的2倍。

10、此外,日志和日志計數值始終限於代理發送緩沖區大小的50%,即使其中沒有非日志值。 因此,為了在一個連接(而不是幾個連接)中發送最大值,代理BufferSize參數必須至少為maxlines x 2。

11、對大於256kB的日志文件記錄,只有第一個256kB與正則表達式匹配,其余的記錄將被忽略。 但是,如果Zabbix代理在處理長記錄時停止,代理內部狀態將丟失,並且可以在代理重新啟動后再次分析不同的長記錄。

12、“\”路徑分隔符的特殊注意事項:如果file_format是“file\.log”,則不應該有“file”目錄,因為不可能明確地定義是否轉義了“.”,以及是否為第一個文件名符號。

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

14、在UNIX平台上,如果要找的日志文件的目錄不存在,則logrt[]監控項將變為NOTSUPPORTED。

15、在Microsoft Windows上,如果目錄不存在,則監控項將不會變為NOTSUPPORTED(例如,如果目錄在監控項Key中拼寫錯誤)。

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

17、Zabbix代理日志文件可以幫助你找出為什么log[]或logrt[]監控項成為NOTSUPPORTED。Zabbix可以監視其代理日志文件,除了在DebugLevel=4時。
18、在logtr中,正則表達式只對文件名有效,對文件目錄無效。 

 

三、日志監控項介紹

針對日志監控,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的數據。可以是\1、\2一直到\9,\1表示第一個正則表達式匹配出得內容,\2表示第二個正則表達式匹配得出的內容。

注意:

1、logtr的第一個參數是文件名的格式,可以是正則表達式,主要用於針對輪詢或滾動日志使用,比如我們日常的程序日志:gameserver.20180102.log、gameserver.20180103.log、gameserver.20180104.log......

2、不管新日志、老日志,只要他們有變更,zabbix都會監控。
3、只要配置了<regexp>,Zabbix會根據<regexp>的正則表達式來匹配日志中的內容。

4、一定要保證Zabbix用戶對日志文件有可讀權限,否則這個Item的狀態會變成“unsupported”。

 

四、范例

配置前,請確保Agent有如下兩項配置
1、Hostname設定為Server創建主機是填寫的Host name,必須一致
2、ServerActive設定為Server的IP

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

配置步驟

1、Web端配置監控項

 

 

 2、Agent端配置Hostname

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

3、測試並查看結果

我們這里是測試通過rz上傳文件后,會在messages里面出現rz字符串。

 

 查看最新數據:

 

 

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

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

1、配置監控項

2、查看結果

 

 

五、主動模式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]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM