天天看點

zabbix日志監控

Zabbix可以使用log監控類型來監控日志檔案。

在配置Item的時候,Type選擇Zabbix agent (active),這裡主要需要配置的是Key。下面是監控日志的兩種key——log和logtr。

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

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

    ◆ regexp:要比對内容的正規表達式,或者直接寫你要檢索的内容也可以,例如我想檢索帶ERROR關鍵詞的記錄

    ◆ encoding:編碼相關,留白即可

    ◆ maxlines:一次性最多送出多少行,這個參數覆寫配置檔案zabbxi_agentd.conf中的’MaxLinesPerSecond’,我們也可以留白

    ◆ mode:預設是all,也可以是skip,skip會跳過老資料

    ◆ output:輸出給zabbix server的資料。可以是\1、\2一直\9,\1表示第一個正規表達式比對出得内容,\2表示第二個正規表達式比對錯的内容。

如果仔細看可以發現,第一個參數不一樣,logrt的第一個參數可以使用正規表達式。針對日志復原用得,例如我們每天都切割nginx日志,日志名位www.a.com_2015-01-01.log、www.a.com_2015-01-02.log等等,使用log肯定不合适,如果檔案名使用正則,那麼新增的日志檔案會立即加入監控。

備注:不管新日志、老日志,隻要他們有變更,zabbix都會監控。

    隻要配置了<regexp>,Zabbix會根據<regexp>的正規表達式來比對日志中的内容。注意,一定要保證Zabbix使用者對日志檔案有可讀權限,否則這個Item的狀态會變成“unsupported”。

注意事項:

 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中,正規表達式隻對檔案名有效,對檔案目錄無效。

監控案例:

公司的雲泊系統中會記錄Pms終端連接配接的三種狀态,

1、斷開連接配接 

2、連接配接成功

3、重連成功

這些日志使我們想要擷取到的。其他的是一些Debug日志和Error日志,這些我們不關心

是以我們需要将需要監控的日志擷取到。以下是我們想要擷取的日志資訊。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<code>ApiServer | 2016-07-12 10:18:49.509 | INFO  | send mail successfully, content:2016-07-12 10:18:47, 停車場:智慧園停車場重連成功</code>

<code>ApiServer | 2016-07-12 10:02:10.576 | INFO  | send mail successfully, content:2016-07-12 10:02:08, 停車場:智慧園停車場重連成功</code>

<code>ApiServer | 2016-07-12 11:14:15.021 | INFO  | send mail successfully, content:2016-07-12 11:14:13, 停車場:智慧園停車場重連成功</code>

<code>ApiServer | 2016-07-12 11:18:33.241 | INFO  | send mail successfully, content:2016-07-12 11:18:30, 停車場:智慧園停車場重連成功</code>

<code>ApiServer | 2016-07-12 12:04:49.299 | INFO  | send mail successfully</code>

<code>ApiServer | 2016-07-12 11:22:13.236 | INFO  | send mail successfully, content:2016-07-12 11:22:11, 停車場</code>

<code>ApiServer | 2016-07-12 12:33:22.945 | INFO  | send mail successfully, content:2016-07-12 12:33:21, 智慧園停車場連接配接斷開</code>

<code>ApiServer | 2016-07-12 03:29:51.751 | INFO  | send mail successfully, content:2016-07-12 03:29:50, 智慧園停車場連接配接斷開</code>

<code>ApiServer | 2016-07-12 04:14:09.640 | INFO  | send mail successfully, content:2016-07-12 04:14:08, 智慧園停車場連接配接斷開</code>

<code>ApiServer | 2016-07-12 05:45:17.496 | INFO  | send mail successfully, content:2016-07-12 05:45:16, 智慧園停車場連接配接斷開</code>

<code>ApiServer | 2016-07-12 07:53:22.012 | INFO  | send mail successfully, content:2016-07-12 07:53:20, 智慧園停車場連接配接斷開</code>

<code>ApiServer | 2016-07-12 08:24:52.001 | INFO  | send mail successfully, content:2016-07-12 08:24:50, 智慧園停車場連接配接斷開</code>

<code>ApiServer | 2016-07-12 12:33:28.890 | INFO  | send mail successfully, content:2016-07-12 12:33:27, 停車場:智慧園停車場連接配接成功</code>

<code>ApiServer | 2016-07-12 09:53:49.780 | INFO  | send mail successfully, content:2016-07-12 09:53:48, 停車場:智慧園停車場重連成功</code>

建立監控項:

注意:我這裡是測試環境,并非生産環境。

<a href="http://s5.51cto.com/wyfs02/M00/84/0F/wKioL1eEmuPg_I3zAAI1jS1y4nw976.png" target="_blank"></a>

這裡我比對的關鍵字是停車場

建立trigger:

<a href="http://s1.51cto.com/wyfs02/M02/84/0F/wKioL1eEm0SxaOQiAAHLLmzGkzI213.png" target="_blank"></a>

Trigger的解釋:

<code>(({10.10.10.202:log[</code><code>/mnt/test</code><code>.log,停車場,,,,].regexp(斷開)})</code><code>#0)&amp;{10.10.10.202:log[/mnt/test.log,停車場,,,,].nodata(30)}=0</code>

A:

<code>(({10.10.10.202:log[</code><code>/mnt/test</code><code>.log,停車場,,,,].regexp(斷開)})</code><code>#0)</code>

log中包含了‘停車場’且包含‘斷開’字元串,則表達式為真。

B:

<code>{10.10.10.202:log[</code><code>/mnt/test</code><code>.log,停車場,,,,].nodata(30)}=0</code>

表示30秒内有資料産生則表達式為真,即30秒内如果沒有新資料了,則表達式為假。為假,則告警恢複了。

A&amp;B:表示A、B都為真,才為真。即item傳回資料中會包含"斷開",則觸發器被觸發,30秒内沒有新資料的話,觸發器恢複。這樣就保證了觸發器不會一直在觸發狀态。

再來看一個例子

<code>{Template OS Linux:system.localtime.nodata(5m)}=1&amp;{Template OS Linux:icmpping.last(0)}=1</code>

這個是zabbix自帶的linux os template中的一個監控項,

<code>system.localtime.nodata(5m)}=1</code>

表示5分鐘内沒有資料為真,注意等号後面是1.

這裡有一個問題:如果系統産生一條日志被比對到了,觸發了告警。此時告警沒有恢複,那麼接下來的30秒之類如果還有日志被比對到了,那麼它是不會觸發告警的。而nodata的時間間隔最少為30秒,是以我們無法通過調整時間來解決這個問題。那麼我們可以通過建立多個trigger來解決這個問題。

前面說了狀态有三種,是以我們建立的trigger有3個,這樣能保證每一個狀态的日志都能觸發告警。

下面是另外兩個狀态的trigger

<a href="http://s2.51cto.com/wyfs02/M01/84/10/wKiom1eEoabBIIGjAADmqtEnhqk064.png" target="_blank"></a>

<a href="http://s2.51cto.com/wyfs02/M02/84/10/wKioL1eEoabg0cQCAADoK_FfHX4626.png" target="_blank"></a>

本文轉自 曾哥最愛 51CTO部落格,原文連結:http://blog.51cto.com/zengestudy/1825761,如需轉載請自行聯系原作者

繼續閱讀