1. 程式人生 > >自動化監控--zabbix中的Macros(巨集)詳解

自動化監控--zabbix中的Macros(巨集)詳解

巨集

Zabbix支援許多在多種情況下使用的巨集。巨集是一個變數,由如下特殊語法標識:

{MACRO} 

根據在上下文中, 巨集解析為一個特殊的值。有效地使用巨集可以節省時間,並使Zabbix變地更加高效。

在一個的典型用途中,巨集可以用於模板中。因此,模板的觸發器可能命名為Processor load is too high on {HOST.NAME}。當這個模板應用與主機(如 Zabbix Server )時,並且當觸發器展示在監控頁面上時,觸發器的名稱講解析為Processor load is too high on Zabbix server

巨集可以在監控項鍵值引數中使用。巨集只能用在監控項鍵值引數的一部分中,例如item.key[server_{HOST.HOST}_local]

。雙引號引數不是必須的,因為Zabbix將處理任何模糊不清的特殊引數(如果這些引數存在於已解析的巨集中)。

巨集函式

巨集函式能提供自定義巨集值的功能。

有時候巨集可能會解析為一個不一定易於使用的值。它可能很長,或包含你想提取的一個特殊感興趣的子字串。這在巨集函式中是可以使用的。
巨集函式的語法為:

{<macro>.<func>(<params>)}
其中:

<macro> - 這個引數為要定義的巨集 (例如 {ITEM.VALUE});
<func> - 要應用的函式;
<params> - 以逗號分隔的函式引數列表。如果他們以 (空格), " 或者包含 ), ,這些符號開始,則引數必須要引用。
例如:

{{ITEM.VALUE}.regsub(pattern, output)}

使用者巨集

概述

除了支援開箱即用的巨集之外,Zabbix 還支援更靈活的使用者巨集。

使用者巨集可以在全域性、模板和主機級別進行定義。這些巨集具有一個特殊的語法:

{$MACRO}

使用者巨集可被用於:

  • 監控項名稱;
  • 監控項鍵值引數;
  • 觸發器名稱和描述;
  • 觸發器表示式引數和常量
  • 許多其他位置

巨集名稱中允許使用以下字元:A-Z , 0-9 , _ , . 。

Zabbix 根據以下優先順序解析巨集:

  1. 主機級別的巨集 (首先檢查);
  2. 為主機的第一級別模板定義的巨集(即,直接連結到主機的模板),按照模板 ID 來排序;
  3. 為主機的第二級別模板定義的巨集,按照模板 ID 來排序;
  4. 為主機的第三級別模板定義的巨集,按照模板ID來排序,等;
  5. 全域性巨集 (最後檢查)。

換言之,如果一個主機不存在一個巨集, Zabbix 將會嘗試在級別遞增的主機模板中找到它,如果仍然找不到,那麼將會使用全域性巨集(如果全域性巨集存在的話)。

如果 Zabbix不能找到巨集, 那麼巨集將不能被解析。
Administration → General → Macros
如果要定義使用者巨集,轉到Zabbix的web頁面的如下位置:

  • 對於全域性巨集,請訪問 Administration → General → Macros;
    在這裡插入圖片描述
  • 對於主機和模板級別的巨集,開啟主機或模板屬性並檢視 巨集 標籤頁面。
    3.
    注意:如果在模板的監控項或觸發器使用使用者巨集,建議將該巨集新增到模板,即使它被定義在全域性級別上。這樣的話,將模板匯出至XML檔案中,之後在其他系統中匯入,那麼在其他系統中使用也將會達到預期的使用效果。

全域性和主機巨集的常用案例

  • 利用具有主機特定屬性的模板:密碼、埠號、檔名稱、正則表示式等;
  • 運用全域性巨集進行全域性的一鍵配置更改或微調。

示例1
在 “Status of SSH daemon” 監控項鍵值中使用主機級別的巨集:

net.tcp.service[ssh,,{$SSH_PORT}]

該監控項可以分配給多個主機,前提是在這些主機上定義了 {$SSH_PORT} 的值。
示例 2

在 “CPU load is too high” 觸發器上使用主機級別的巨集:

{ca_001:system.cpu.load[,avg1].last()}>{$MAX_CPULOAD}

這樣的觸發器將會在模板上建立,而不會在單個主機中編輯。

如果要使用數值作為函式引數
注意:如果要使用數值作為函式引數(例如,max(#3)),則在巨集定義中要包含井號(hash mark)例如:SOME_PERIOD ⇒ #3

示例 3

在“CPU load is too high”觸發器中使用了兩個巨集:

{ca_001:system.cpu.load[,avg1].min({$CPULOAD_PERIOD})}>{$MAX_CPULOAD}

請注意,巨集可以用作觸發器函式的引數,在這個示例中為 min() 。
注意:在觸發器表示式中,如果引用引數或者常量,則使用者巨集將會解析。如果引用主機、監控項鍵值、函式、操作或其他觸發器表示式的話,他們將不會解析。

------做運維之前很矯情的小年輕-----