1. 日志文件監控原理
通過zabbix agentd程序按照zabbix server上配置的item更新時間間隔和規則去檢索指定的日志文件,找出與定義的模式(pattern)相匹配的字符串(行),然后將其送給zabbix server進行分析處理,zabbix
server根據預先設置的trigger及時提供預警信息。 不對日志信息進行過濾直接送給zabbix server也行,但明顯不合適。
2. 監控日志文件的相關細節
監控日志文件的要點:
- 當使用logrt時,zabbix server和agent會對日志文件的大小和最后修改時間進行追蹤,分別對應不同的counter。
- agent內部在Unix/GNU/Linux中使用inode number,在MS Windows中使用文件索引,以及日志文件的前512字節的MD5 sum值來追蹤文件。文件在切割時這些信息會改變。
- 在Unix/GNU/Linux系統中會假定文件的inode number可以用來追蹤文件。
- 在Windows系統上不同的文件系統使用不同的追蹤方式。
- NTFS文件系統上使用64位的文件索引。
- ReFS(Windows Server 2012)上使用128位的文件ID。
- 日志文件的inode number,文件索引和MD5 sum都只由zabbix agent收集,它們不會傳遞給server,當zabbix_agentd停止的時候,它們會丟失。
- 不要使用
touch
指令修改日志文件的最后修改時間, do not copy a log file with later restoration of the original name,其實就是不要對日志文件進行一些會改變其inode number的操作。否則會導致agent重新開始分析文件,會導致告警重復。 - 如果有多個匹配的日志文件,zabbix agent只會分析最新的一個匹配的日志文件,如果最新的日志文件被刪除了,會產生告警信息。
- agent會從它上次停止的時間點開始讀取日志文件。
- server會將已經分析過的日志文件的字節數(the size counter)和最后的修改時間(the time counter)存儲到zabbix database中,在agent剛啟動或者收到某item之前是禁用或者不支持現在啟用了時,發送給agent便于它從指定位置開始讀取日志文件。
- 無論何時當日志文件的大小變得比agent知道的要小時,the size counter會重置為0,然后agent會根據the time counter的記錄開始讀取日志文件。
- 如果有多個匹配的文件,它們的最后修改時間相同時,agent會分析所有的文件,并避免跳過數據,或者分析相同數據2次。
- zabbix agent按照定義的Update interval seconds時間間隔分析日志文件的新記錄。
- zabbix agent會一秒最多發送key中定義的
maxlines
行的日志文件給server,這個參數會覆蓋agnetd配置文件中的MaxLinesPerSecond
參數的配置。 - 默認情況下,agent在一次檢測中最多可以分析80條日志文件記錄,并且發送最多20條匹配的記錄給server。
maxlines
可以增加到4000,這樣可以一次檢測時發送1000條日志記錄給server。 - log和log.count的值總是被限制在agent send buffer size的50%。所以
maxlines
會被一次發送完成,agent的BufferSize參數最少為maxlines x2。 - 日志文件記錄超過了256kB時,剩下的部分將會被忽略。(應該是文件的增量?)
- logrt匹配置日志文件名時,其路徑不能使用正則表達式匹配,只能用正則表達式匹配文件名。
- logr[] item找不到的日志文件,不會標示item為NOTSUPPORTED。讀取日志文件發生錯誤會以警告信息記錄到agent的日志中,但也不會標示這一item為NOTSUPPORTED。
- zabbix agent的日志文件,對查找log[]或logrt[] item變得NOTSUPPORTED時很有幫助。只要agent日志文件不設置在Debuglevel=4時,zabbix可以監控agent日志文件。被標示為NOTSUPPORTED的item在item中查看會有顯示,在Latest data中查看時該item會顯示為灰色。
- 如果server(proxy)和agent的通信中斷,對于日志文件的檢測將會停止,但通信恢復后,檢測也會恢復,同時繼續從之前檢測過的位置開始檢測,不會漏掉匹配的信息,只不過會延后。
- server(proxy)和agent通信中斷,agent它也會保持和日志文件的聯系。
- maxdelay如果保持默認(maxdelay=0),當server和agent通信中斷恢復后,agent會將之前log.count和logrt.count計數和新匹配的計數一起發送給server。
- maxdelay如果大于0,且log file沒有行被跳過,則和上面一樣將新舊count一起發送給server,如果log file有行被跳過,則之前的count結果將會被丟棄。
3. 日志文件監控類型
3.1 常用的日志監控item key類型
- log[/path/to/file/file_name,<regexp>,<encoding>,<maxlines>,<mode>,<output>,<maxdelay>]
- logrt[/path/to/file/regexp_describing_filename_pattern,<regexp>,<encoding>,<maxlines>,<mode>,<output>,<maxdelay>]
- log.count[/path/to/file/file_name,<regexp>,<encoding>,<maxproclines>,<mode>,<maxdelay>]
- logrt.count[/path/to/file/regexp_describing_filename_pattern,<regexp>,<encoding>,<maxproclines>,<mode>,<maxdelay>]
3.2 key參數的含義
-
/path/to/file/file_name
表示日志文件的絕對路徑。 -
regexp
表示用于匹配特定字符串的正則表達式,如果留空會將整個日志文件記錄發給server。 -
encoding
表示日志文件記錄的編碼格式,一般留空,使用日志文件的默認格式。 -
maxproclines
表示agent一次可以發送最多多少條日志記錄給server。 -
output
表示只將與正則表達式匹配的字符串發給server,而非整行記錄。 -
maxdelay
這一參數用于允許跳過日志中一些陳舊的記錄,以找到最新的日志記錄,這個跳過時長即為maxdelay
。這有可能會導致忽略了一些重要日志。所以謹慎使用,一般保持默認值0即可。 -
mode
表示處理數據的模式,默認為all,也可以是skip,表示跳過老數據。
3.3 監控不同類型的日志文件
- log用于監控日志文件名稱不會變化的場景。
- logrt用于監控日志文件名會變化的場景,如會自動切割的帶有日期的文件名。
- count用于統計相應日志文件中含有匹配字符的日志行數。
4. 日志文件監控item參數選擇及含義
字段 | 選擇及含義 |
---|---|
Type | Zabbix agent(active),讓agentd主動上報信息 |
Type of information | log和logrt時選擇Log,log.count和logrt.count時選擇numeric(unsigned) |
Update interval in sec | 定義agnet檢測日志文件的間隔時長,檢測出日志文件的變化 |
Log time format | 用字母yMdhms分別表示年月日時分秒,用字符p和:代表占位符,當日志的時間戳有空格或者其它item里表示不出來的時間日期時可以用它們代替,如表星期的Mon,直接用ppp代替即可 |
5. 小結
使用zabbix監控日志文件,把握兩個要點:
- 確保zabbix對要監控的日志文件有讀取權限。
- 監控item配置正確。