2012-07-27 41 views
1

我希望能夠從多個日誌文件中提取數據。提取的數據將被髮送到zabbix。逐步處理日誌文件:提取數據併發送到另一個進程(zabbix)

舉個例子,說一個(巨大)日誌文件包含了諸如

date: processed 566766 lines 
date: processed 324523 lines 
date: processed 546747 lines 
date: processed 005643 lines 

我希望能夠將此數據發送到的zabbix信息。

用awk我只想做一些像

cat logfile | awk '/processed \d+ lines/ { system("zabbix command " $3) }' 

我的問題是,由於該文件是大的,因爲我不想重複的數據,我需要找到一種方式開始閱讀日誌文件從哪裏,如果是從上次運行

因此,它需要記住它讀取的點直到上一次,並開始處理只有新添加的行。

我試過fetchlog但由於某些原因,它不起作用,它沒有被維護。

你知道一個好的實用程序可以跟蹤日益增長的日誌文件或Pythonic的方法嗎?

我似乎記得syslog-ng或rsyslog有這方面的內容,但我認爲它們只適用於syslog樣式的日誌,而我的並不遵循任何標準。

問候

亞歷山德羅

+1

你有沒有考慮logrotate的日常旋轉日誌?你打算多久將數據發送到監控系統? – jordanm 2012-07-27 15:23:57

+0

每隔幾分鐘。不幸的是,旋轉不是一種選擇。 – Alessandro 2012-07-27 16:46:59

+0

所以感興趣的數據'日期:處理566766行'散落在文件周圍?在任何情況下,考慮到所有限制,我認爲您必須計劃在創建文件時解析文件一次,然後將感興趣的數據發送到可以按照您的日程安排發送給zabbix的進程。閱讀這裏和其他有關mkfifo的地方,可能會有所幫助。但是,你仍然有問題,有一天,該日誌文件將變得太大,操作系統,必須被清零並重新啓動。然後你必須得到新的日誌文件的句柄。祝你好運! – shellter 2012-07-27 18:50:55

回答

0

的zabbix 2.0改進了日誌文件監控,看到here

格式:

log[file,<regexp>,<encoding>,<maxlines>,<mode>] 

對於正則表達式,你可以指定一個詞,是你的日誌文件中的每一行。

對於模式,跳過告訴Zabbix不處理舊數據。

例如:

log[logfile,processed,,,skip] 

您可以編寫腳本這是好,只是存儲在一個文件中運行每個腳本的最後一個行號,並將其存儲在您的腳本變量。然後做這樣的事情:

tail -n +$line_number logfile | awk '{print $3}' 

你可以帶衛生間的最後一個行號:

wc -1 logfile > /tmp/number_file 

你需要+1那這樣你就不會解析最後一行的兩倍。

可能值得將所有值存儲在文件中,請將主機名和項密鑰存入每行,並使用zabbix_sender

希望有所幫助。

+0

嗨,Zabbix中的日誌工具不允許你從你處理的行提取數據。它只是提醒內容而不是提取數據。 – Alessandro 2012-07-31 10:26:12

+0

感謝您的答覆,無論如何,我正在考慮編寫一個Python腳本並查看它的表現。 – Alessandro 2012-07-31 10:27:26

相關問題