第六章 監控項配置與管理
近日完成《深入淺出 zabbix 4.0》視訊教程的錄制并正式釋出,該教程基于 zabbix 4.2 ,對Zabbix進行全面講解。歡迎大家圍觀。課程連結:https://edu.csdn.net/course/detail/24870
Zabbix系統中監控項(Items)的定義和管理非常重要,所有的監控名額都是通過定義不同的監控項收集資料。Zabbix通過主機作為一個邏輯單元組織和管理監控項,所有的監控項都必須屬于某個主機,且在同一主機中隻能有一個唯一的監控項存在。
6.1監控資料
Zabbix 不同于與大多數其他監控解決方案的一個重要特征是Zabbix通過監控項從被監控對象收集的資料是原始資料,而不是告警或狀态的更新資料。大多數監控方案中,不管是通過agent或其他方法收集到監控資料後,會對該資料進行邏輯處理,然後将該資料的狀态發送到伺服器中儲存,并進一步進行處理。資料的處理流程如下圖6-1所示。
圖 6-1
而Zabbix中處理資料的流程會稍有不同,通過agent或其他方法收集到監控資料後,會直接發送到伺服器中進行儲存,然後觸發器邏輯會判斷資料的變化情況,進行下一步處理。在Zabbix中收集的資料和特定的觸發器的條件(如通過、失敗、正常、警告、錯誤等)沒有任何的關聯,在伺服器的資料庫中保留原始的監控資料,并對數值類型的監控項資料,可以保留不同期間内的彙總和趨勢,像最小值、最大值和平均值等。如下圖6-2所示。
圖 6-2
Zabbix采取資料和決策邏輯分離的方式有兩個優勢:
首先,Zabbix中收集到的監控資料和觸發器邏輯、告警沒有直接的關聯,這樣我們可以把Zabbix作為一個純粹的資料收集器,并将這些資料通過圖形等可視化的方式展現出來,這在實際環境中是非常有用的。舉個例子,我們需要監控交換機每個端口的流量,目的隻是收集資料建立基準線,評估可能的瓶頸,為擴充網絡基礎架構的規劃提供依據。類似的情況還有很多,比如說CPU的使用率、存儲的容量、特定應用的使用者并發率等等。
其次,所有收集到的原始資料統一儲存在資料庫中,而不是某一次的監控資料或某一監控項的一部分監控資料。對于觸發器和決策邏輯你可能需要完整的資料來确切的定義你想要監控和告警的事件種類,這時你可以關聯到監控項的所有曆史資料。
Zabbix 中監控項本質上可以了解為一個關聯到主機的某種資料類型的辨別符(或名額)。而這個辨別符通常是一個名稱和關聯的監控項key,用來區分在整個監控環境中定義的成千上萬的監控項中關聯到主機中的監控項。監控項的資料類型也非常重要,Zabbix通過資料類型指定怎樣儲存資料,怎樣可視化資料(數值類型的監控項能自動生成簡單的圖形,字元類型不能生成圖形),在觸發器中可以指定哪些函數能夠應用到監控項進行處理。
6.2 監控項的類型
Zabbix中監控項根據連接配接的方式劃分出多種類型,也就是我們在第三章中介紹過的監控方式,它們之間依據不同的監控目标可以互相替換使用,但也有不能替換的監控方式,為完成監控目标隻能使用某種類型,例如Zabbix aggregate監控方式。監控項收集監控資料時,根據資料流的方向不同,我們可以歸為兩類:Passive(被動式)和Active(主動式)。Passive意味着由Zabbix server發起初始化連接配接,Active意味着初始化連接配接是由被監控端發起。如下表6-1所示。
表 6-1
Item type | 方向 | 可替換為 |
Zabbix agent | Passive(被動式) | Zabbix agent(active) |
Zabbix agent(active) | Active(主動式) | Zabbix agent |
Simple checks | Passive(被動式) | Zabbix trapper |
SNMP agent | Passive(被動式) | Zabbix trapper |
SNMP trap | Active(主動式) | |
Zabbix internal | Server監控自身收集資料 | |
Zabbix trapper | Active(主動式) | 取決于監控資料的性質 |
Zabbix aggregate | 使用資料庫中已有的資料 | |
External checks | Passive(被動式) | Zabbix trapper |
Database monitor | Passive(被動式) | Zabbix trapper |
IPMI agent | Passive(被動式) | Zabbix trapper |
SSH agent | Passive(被動式) | Zabbix trapper |
TELNET agent | Passive(被動式) | Zabbix trapper |
JMX agent | Passive(被動式) | Zabbix trapper |
Calculate | 使用資料庫中已有的資料 |
6.3 監控項的Key
定義監控項的Key時,要遵從Zabbix中定義的監控項Key的格式,如下圖6-3所示。
圖 6-3
其中Key為名稱,在Key名稱後面可以帶參數,也可以不帶參數。
Key名稱在同一主機中必須是唯一的,不能有相同的名稱存在。命名時使用的字元是有限制的,隻允許使用下列的字元:
- 所有的數字(0-9)
- 所有的小寫字母(a-z)
- 所有的大寫字母(A-Z)
- 下劃線 ( _ )
- 短劃線 ( - )
- 點 ( . )
如下圖6-4所示。
圖 6-4
例如:
- vfs.fs.size[/]
- vfs.fs.size[/opt]
Key可以傳遞多個參數,這些參數必須用逗号分隔。如下圖6-5所示。
圖 6-5
其中每個parameter(參數)可以是帶引号的字元串或者是不帶引号的字元串,也可以是一個數組。如下圖6-6所示。
圖 6-6
想使用預設值時,參數也可以留白,但是必須要用逗号分隔,例如:icmpping[,,200,,500]中指定了ping的間隔時間為200毫秒,逾時為500毫秒,其他的參數留白表示使用預設值。
如果參數是帶引号的字元串,使用的雙引号必須用反斜杠(\)進行轉義,雙引号中間可以使用任意Unicode字元。
如果參數是不帶引号的字元串,除了逗号和右方括号外任意的Unicode字元都可以使用。
如果參數是一個數組,需要使用方括号括起來,多個參數間用逗号分隔。
6.4 監控項的機關
Zabbix中支援多種機關(Units)符号的使用,如果設定了機關符号,Zabbix将在接收資料後增加後置處理,并按照設定的機關顯示。
系統預設的,如果原始值超過1000,它會除以1000并相應的顯示。例如:設定機關是bps,如果接收資料的值是881764,将會顯示881.76Kbps。當使在用機關B(byte)、Bps(bytes per second)時,它會除以1024,是以在Zabbix中會顯示:1為1B/1Bps,1024為1KB/1KBps,1536為1.5KB/1.5KBps。
和時間相關的機關的處理包括:
- Unixtime:将接收資料的值轉換為yyyy.mm.dd hh:mm:ss。為了轉換成功,監控項資料必須是一個Numeric(unsigned)數值類型。
- Uptime:将接收資料的值轉換為hh:mm:ss 或N days,hh:mm:ss。例如,接收的值為881764(秒),将會顯示為10 days, 04:56:04。
- S:将接收資料的值轉換為yyy mmm ddd hhh mmm sss ms,參數機關是秒。例如,接收的值為881764(秒),将顯示為 10d 4h 56m。通常隻顯示3個主要的機關,像1m 15d 5h 或 2h 4m 46s。如果沒有day,隻顯示 1m 5h(不會顯示分鐘、秒或微秒)。如果接收的值小于0.001,将會顯示為 < 1ms。
Zabbix中也保留了一些機關字元如:ms、rpm、RPM和%。
6.5 自定義intervals
Zabbix中每個監控項收集資料的時間間隔可以通過設定 Updateinterval(in sec)來實作,例如你可以設定為30,意味着每隔30秒就收集一次監控項的值,這種設定簡單,不夠靈活。是以Zabbix中提供了Flexible intervals和scheduling intervals兩種方式可以靈活的設定監控項收集資料的時間。
6.5.1 Flexible intervals
Flexible intervals允許為特定的時間段重新定義預設更新的時間間隔,一個flexible intervals由Interval和Period來定義。
Interval是特定時間段中更新的時間間隔。
Period是使用flexible interval的時間段。用來定義Period的格式為d-d,hh:mm-hh:mm,d為星期幾,1代表星期一,2代表星期二,3代表星期三,… 7代表星期日。hh為小時,00 – 23。mm為分鐘,00 – 59。例如,1-5,09:00-18:0的意思是星期一到星期五的上午9點到下午18點。也可以指定多個用分号分隔的時間段,如d-d,hh:mm-hh:mm;d-d,hh:mm-hh:mm...。例如,1-5,09:00-18:00;6-7,10:00-16:00的意思是周一到周五的上午9點到下午18點,周六和周日上午10點到下午16點。
最多可以設定7個flexible intervals,如果多個flexible intervals重疊時,将使用重疊時間段内最小的Interval值。需要注意的是如果重疊的flexible Intervals的最小值是0,這時候對監控項的資料不再進行收集。在flexible intervals定義的時間段外,使用Updateinterval(in sec)中設定的時間間隔收集資料。
如果定義的interval正好等于時間段的長度,監控項隻收集一次資料。如果interval大于時間段,監控項可能會收集一次資料或一次都沒有,是以不建議這種配置。如果interval小于時間段,那這個監控項最少會收集一次資料。
如果interval設定為0,那這個監控項在設定的時間段内不會收集資料。在設定的時間段結束時按照Update interval(in sec)中的時間間隔恢複對資料的收集。例如下表6-2所示。
表 6-2
Interval | Period | 說明 |
10 | 1-5,09:00-18:00 | 在工作時間内每10秒鐘收集一次監控項資料 |
1-7,00:00-7:00 | 晚上0點到7點停止收集監控項資料 | |
7-7,00:00-24:00 | 星期日停止收集監控項資料 | |
60 | 1-7,12:00-12:01 | 每天12點收集一次監控項資料 |
6.5.2 Scheduling intervals
Scheduling intervals用來在特定的時間收集監控項資料。flexibleintervals旨在重新定義預設收集監控項資料的時間間隔,而Schedulingintervals用于指定一個獨立的收集監控項資料的時間表,它們是并行執行的。
一個Scheduling interval的定義格式是:md<filter>wd<filter>h<filter>m<filter>s<filter>。md為month days,wd為week days,h為hours,m為minutes,s為seconds。<filter>是用來指定特定字首(例如days、hours、minutes、seconds)的值,它有自己的書寫格式:[<from>[-<to>]][/<step>][,<filter>]。格式中各參數的含義如下:
- <from> 和 <to> 定義了比對值的範圍。如果<to> 被省略時filter會比對一個<from> 到 <from> 的範圍,如果<from> 也被忽略了,那filter比對所有可能的值。
- <step> 定義了一個步長,預設的步長值是1,意味着在定義的範圍内比對所有的值。
- filter是一個可選項,可用來定義多個比對值。Scheduling interval中至少要定義一個filter,這個filter必須定義一個範圍或步長。
有效的<from> 和 <to> 的值如下表6-3所示。
表 6-3
字首 | 說明 | <from> | <to> |
md | Month days | 1 - 31 | 1 - 31 |
Wd | Week days | 1 - 7 | 1 - 7 |
H | Hours | 0 - 23 | 0 - 23 |
M | Minutes | 0 - 59 | 0 - 59 |
s | Seconds | 0 - 59 | 0 - 59 |
<from> 的值必須小于或等于 <to>的值,<step> 的值必須大于或等于1,也可以小于或等于 <to> - <from>的值。
單數字的month days、hours、minutes和seconds的值前面可以加0,例如 md01-31,h/02等是有效的定義,但像md01-031 和 wd01-07(week days不能加0)就是無效的定義。
在Zabbix Web前端頁面中,需要使用多個Schedulingintervals時可以設定添加多行intervals。在Zabbix API中可以寫成一行,每個Schedulingintervals之間需要用分号分隔。執行時如果同時和多個intervals中定義的時間都比對,那也僅執行一次,例如wd1h9;h9隻在周一早上9點執行一次,不會因定義了2個h9而執行兩次。
為了更好的了解Scheduling intervals的定義,下面我們舉些例子一起來看看。
- m0-59 :每分鐘執行
- h9-17/2 :從9:00到17:00每2個小時執行(9:00, 11:00 …)
- m0,30 或 m/30 :在每小時的hh:00和hh:30執行
- m0,5,10,15,20,25,30,35,40,45,50,55或 m/5 :每5分鐘執行
- wd1-5h9 :每周一到周五9:00執行
- wd1-5h9-18 :每周一到周五的9:00、10:00、… 、18:00執行
- h9,10,11 或 h9-11 :每天的9:00、10:00和11:00執行
- md1h9m30 :每個月的第一天的9:30執行
- md1wd1h9m30 :每個月的第一天并且是周一的9:30執行
- h9m/30 :在9:00和9:30執行
- h9m0-59/30 :在9:00、9:30執行
- h9,10m/30 :在9:00、9:30、10:00、10:30執行
- h9-10m30 :在9:30、10:30執行
- h9m10-40/30 :在9:10、9:40執行
- h9,10m10-40/30 :在9:10、9:40、10:10、10:40執行
- h9-10m10-40/30 :在9:10、9:40、10:10、10:40執行
- h9m10-40 :在9:10、9:11、9:12、 … 9:40執行
- h9m10-40/1 :在9:10、9:11、9:12、 … 9:40執行
- h9-12,15 :在9:00、10:00、11:00、12:00、15:00執行
- h9-12,15m0 :在9:00、10:00、11:00、12:00、15:00執行
- h9-12,15m0s30 :在9:00:30、10:00:30、11:00:30、12:00:30、15:00:30執行
- h9-12s30 :在9:00:30、10:00:30、11:00:30、12:00:30執行
- h9m/30;h10 :在9:00、9:30、10:00執行
-
6.6 建立監控項
監控項可以在模闆或主機中建立,建議在模闆中建立,這樣隻需要建立一次,就可以連接配接到多個主機中使用。需要調整監控項的配置參數時,隻需要修改一次,即可在連接配接該模闆的主機中直接生效,降低日常維護的工作量,由此可見在模闆中建立監控項的好處。
在Configuration --> Templates 頁面中找到需要建立監控項的模闆,點選該模闆的items連結,或者在Configuration--> Hosts 頁面中找到需要建立監控項的主機,點選該主機的items連結,進入items頁面,點選右上角的Create item按鈕。
下面通過在模闆中建立監控項的方式來介紹建立監控項的步驟:
1、 進入items頁面,點選Create item按鈕。
2、 在item配置頁面,填寫相關資訊。
3、 點選Add按鈕儲存。
4、 把模闆連接配接到主機上。
監控項配置頁面如下圖6-7所示。
圖 6-7
監控項配置頁面中各參數的含義如下:
- Name:監控項的名稱。可以使用宏變量,也可以從Key中引用$1、$2 … $9參數,例如:設定監控項名稱為Freedisk space on $1,如果監控項Key是 vfs.fs.size[/,free],那監控項名稱将變為Freedisk space on /($1是/,$2是free)。
- Type:監控項的類型。詳見第三章中介紹的監控方式。
- Key:監控項的Key。請參考前面6.3節的内容,如果監控項類型選擇Zabbix agent、Zabbix agent(active)、Simple check、SNMP trap、Zabbix internal、Zabbix aggregate、Databasemonitor時,Key的值必須能被Zabbix server或Zabbix agent支援。這個Key在同一主機中必須是唯一的。
- Type of information:完成轉換後儲存到資料庫中的資料類型。
- Numeric(unsigned):64位無符号整數。
- Numeric(float):浮點數,MySQL中允許的範圍是-999999999999.9999 到999999999999.9999 (double(16,4)),也支援科學記數法,例如1e+70,1e-70。
- Character:字元或字元串,Mysql、Postgresql或Oracle中限制為 255 個位元組。
- Log:log日志檔案。Mysql中允許65536個位元組,Postgresql和Oracle中限制為65536個字元。
- Text:文本。Mysql中允許65536個位元組,Postgresql和Oracle中限制為65536個字元。
- Data type:當Type of information中選擇Numeric(unsigned)時用來指定不同的資料類型。
- Boolean:文字轉換成0或1儲存。TRUE存儲為1,FALSE存儲為0,所有的值都比對不區分大小寫的方式。True、t、yes、y、on、 up、running、enabled、available都識别為TRUE,false、f、no、n、off、down、unused、disabled、unavailable都識别為FALSE。另外,任意非零的數值都認為是TRUE,0被認為是FALSE。
- Octal:八進制資料。
- Decimal:十進制資料。
- Hexadecimal:十六進制資料。
Zabbix将自動完成文字到數值的轉換,即便一個主機是由Zabbix proxy監控的,轉換也是由Zabbixserver完成的。
- Units:設定機關符号,詳見本章6.4節。
- Use custom multiplier:如果啟用該選項,所有接收到的值将會乘以設定的整數或浮點數。使用這個選項可以把KB、MBps等轉換為B、Bps。否則Zabbix中無法正确設定字首(K、M、G等)。從Zabbix 2.2版本開始也支援科學計數法,如 1e+70。
- Update interval(in sec):監控項每次收集資料的間隔時間,機關是秒。如果設定為0,監控項将停止收集資料,如果在Customintervals中(無論是flexible還是scheduling)設定了非0的值,監控項将按照該值收集資料。
- Custom intervals:自定義監控項收集資料的時間,詳見本章6.5節。
- History storage period(in days):資料庫中保留詳細曆史資料的天數。超出保留時間的舊資料會由housekeeper删除。該參數中定義的值可以覆寫在Administration --> General --> Housekeeper中設定的值。如果在Housekeeper中設定了全局的值,在設定該參數時将會顯示一個警告資訊。建議設定一個比較小的值以減少history在資料庫中的大小。如果想儲存比較長的曆史記錄,可以設定比較長的trends的儲存時間。
- Trend storage period(in days):在資料庫中儲存曆史的趨勢資料(每小時的min、max、avg和count)。超出保留時間的舊資料會由housekeeper删除。該參數中定義的值可以覆寫在Administration--> General --> Housekeeper中設定的值。如果在Housekeeper中設定了全局的值,在設定該參數時将會顯示一個警告資訊。需要注意的是隻有Numeric類型的資料可以儲存為趨勢資料,像character、log和text都不能儲存為趨勢資料。
- Store value:監控值的儲存方式。有以下幾種:
- As is:不做任何處理,保持原值。
- Delta(speed per second):通過公式(value-prev_value)/(time-prev_time)計算,其中value是目前的值,prev_value是上一次的值,time是目前的時間,prev_time是上一次的時間。這個設定對收集不斷增長的每秒的速率是非常有用的。需要注意的是,如果目前的值小于上一次的值,Zabbix會丢棄計算的內插補點不做儲存,等待下一次收集的值進行計算。例如通過SNMP監控交換機等裝置端口流量時會設定這種方式。
- Delta(simple change):通過公式(value-prev-value)計算,其中value是目前的值,prev-value是上一次的值。
- Show value:對收集到的監控項資料進行映射。值映射後不會改變原值,僅僅是界面顯示變化了。隻支援整數類型的監控項。不需要進行值映射時選擇As is保持原值。
- Log time format:隻有在Type選擇Log時會出現,支援下列占位符:
- y:Year(1970-2038)
- M:Month(01-12)
- d:Day(01-31)
- h:Hour(00-23)
- m:Minute(00-59)
- s:Second(00-59)
如果timestamp為空值将不做解析處理。
例如,在Zabbix agent日志檔案中有這樣一行:23480:20100328:154718.045 Zabbix agent started. Zabbix 1.8.2(revision 11211)。其中開頭的6個字元是PID,接下來是日期、時間和其他内容,那這行Log的時間格式為pppppp:yyyyMMdd:hhmmss。在這裡p和:隻是一個占位符,除了yMdhms外可以是其他任意格式。
- New application:設定新的監控項組名稱。建立監控項時可以同時建立監控項組。
- Application:連接配接監控項到一個或多個已經存在的監控項組。
- Populates host inventory field:當主機中Host inventory設定為Automatic時,該監控項的值會自動推送給選擇的inventroy字段。
- Description:監控項的描述資訊。
- Enabled:勾選為啟用該監控項。
-
更新監控項
在Items頁面(Configuration--> Hosts --> Items或者Configuration --> Templates --> Items)清單中,點選Name列中想要更新配置的監控項名稱,進入監控項配置界面修改配置參數,然後點選頁面下方的Update按鈕儲存。
如果需要對多個監控項進行更新,Zabbix給我們提供了一個批量更新的功能,當你從清單中選中多個監控項後,點選頁面左下方的Mass update按鈕可以進行批量更新,完成更新後點選Update按鈕儲存。
6.8 克隆監控項
在主機中配置監控項時,有時候添加監控項時,每個監控項的配置基本相同,但數量比較多,這時候我們可以先建立後一個監控項,然後克隆這個監控項。
需要克隆監控項時,首先要打開監控項的配置頁面,在頁面左下方你會看到Clone按鈕,點選Clone按鈕後會出現一個新的監控項的配置頁面,這個配置頁面中的各個參數都是原來監控項中已經配置好的。你至少要修改監控項Key的配置,在主機中,監控項的名稱可以相同,但是Key必須是唯一的。修改完成後點選Add按鈕添加監控項。
6.9 複制監控項
一個主機中的監控項可以複制到另一個主機、模闆或主機組。在主機的監控項清單中選擇需要複制的監控項,然後點選Copy按鈕,根據你的需要選擇相應的目标類型(主機組、主機或模闆)和目标,點選Copy按鈕完成監控項的複制。如下圖6-8所示。
圖 6-8
複制的監控項配置是完全一樣的,在複制過程中你沒有修改配置的機會,和克隆不一樣,克隆的過程中你可以修改配置。
6.10 清除監控項曆史資料
當你想清除某些監控項的曆史和趨勢資料時,可以在主機的監控項清單中選擇相應的監控項,然後點選Clear history按鈕,頁面中會彈出是否删除曆史資料的确認,點選确定按鈕,完成删除。如下圖6-9所示。
圖 6-9
6.11 過濾監控項
在實際環境中,一些主機上會有很多監控項,在主機的監控項清單中對某個監控項進行操作時,可以通過Filter進行過濾,快速的定位。在設定過濾條件時可以使用主機、組、監控項名稱、監控項Key、類型、狀态等進行組合條件的過濾。如下圖6-10所示。
圖 6-10
6.12 删除監控項
在主機的監控項清單中選擇需要删除的監控項,點選Delete按鈕就可以删除選中的監控項及其曆史資料。在實際操作時,建議先将監控項設定為禁用狀态,不要直接删除。