Zabbix宏,及自動發現宏的演示

zabbix宏的概述

宏的作用是便於在模板、Items、Trigger中的引用

Zabbix有許多內置的宏,如{HOST.NAME}、{HOST.IP}、{TRIGGER.NAME}等

詳細信息請參考官方文檔: https://www.zabbix.com/documentation/3.0/manual/appendix/macros/supported_by_location

爲了更強的靈活性,Zabbix還支持全局宏-模板宏-主機宏級別使用用戶自定義宏(user macro),用戶自定義宏要使用”{$MACRO}”這種特殊的語法格式, 宏的名稱只能使用大寫字母、數字及下劃線

宏可以應用在item keys和descriptions、Trigger名稱和表達式、主機接口IP/DNS及端口、discovery機制的SNMP協議的相關信息中等。

宏的替換次序

首先是主機級別的宏;其次是當前主機上一級模板中(直接鏈接至主機的模板)的宏,多個一級模板按其ID號排序;

再接着是二級模板中的宏;而後依次類推;最後檢查的是全局宏;

Zabbix如果無法查找到某主機定義使用的宏,則不會對其進行替換操作。要使用用戶自定義宏,有以下兩種途徑:

全局宏:Administration→General→Macros

主機或模板級別的宏:編輯相應主機或者模板的屬性即可

宏的使用示例

在主機級別定義一個名爲{$NETWORK_NUMBER}的宏,以定義當前主機所接受的網卡進口流量的合理大小(當然這裏值根據具體情況來做,僅供一個參考)
[外鏈圖片轉存失敗(img-Lo4AkpUz-1566914604700)(9A9A554F30DB45EE8AA7455047DEE888)]
[外鏈圖片轉存失敗(img-iDx2yjPz-1566914604703)(8BC7DC455B3C4A0E89E8865B2521D6D3)]

宏的分類

  • 系統宏變量 {MACRO}
  • 用戶自定義宏 {$MACRO}
  • 自動發現宏 {#MACRO}

  1. 系統宏變量 {MACRO}
  2. 用戶自定義宏 {$MACRO}
    [外鏈圖片轉存失敗(img-5pFP2Dmt-1566914604704)(06D5FEFC30BE4D3CB519D470F55E7588)]
  3. 自動發現宏 {#MACRO}
    [外鏈圖片轉存失敗(img-LYXw4588-1566914604705)(BD5BF68ACDFC4AAF926AD422697B9249)]

  • 宏變量函數
    1. regsub(,)
    2. iregsub(,)

自定義宏演示

  1. 自定義全域宏
    我們可以通過自定義全域宏來定義用戶名密碼,告警觸發器的值等等,通過更改全域宏的值來高效的管理zabbix的觸發器或者是用戶名密碼
    [外鏈圖片轉存失敗(img-QhfGCFzM-1566914604706)(262D643695AF4D89BB0CDBCD7BB0B535)]

  2. 自定義全域宏演示
    [外鏈圖片轉存失敗(img-eKWtTY2H-1566914604709)(4E13DD62C01E45468F95DAB010BF1C24)]

  • 克隆之前的觸發器,修改名稱爲Macro測試:{$TEST_GLOBAL_ITEM}

[外鏈圖片轉存失敗(img-VYftT3gE-1566914604710)(893F42024C93481786EB372D5B69E987)]
[外鏈圖片轉存失敗(img-CKXTVotL-1566914604713)(CCC1EBE56F2F46EE8D9A94B1F97C1D29)]
[外鏈圖片轉存失敗(img-iI2S8Qh1-1566914604714)(536895911F8247FAA3BB4728B5C35D0D)]

  • 現在全域宏觸發器{$TEST_GLOBAL_TRIGGER}的值是1,觸發告警
    [外鏈圖片轉存失敗(img-jhtLsdBG-1566914604715)(FFACECE4E91640A6B9872E1ECA3ABEAC)]

  • 將全域宏觸發器{$TEST_GLOBAL_TRIGGER}的值改爲0,告警解除
    [外鏈圖片轉存失敗(img-M7TvTqsR-1566914604715)(F28C0297FAD1462FA8AF651730CD89C6)]

用戶自定義宏在監控模板中的使用

  • 在自定義模板中配置自定義宏{$TEST_TEMPLATE_ITEM},{$TEST_TEMPLATE_TRIGGER}

[外鏈圖片轉存失敗(img-r5kQEvgR-1566914604716)(9CB75B6DA93B4EBC9E0CC0C6F7B52A6C)]

  • 在模板中克隆一個監控項,修改其名稱爲模板宏測試:{$TEST_TEMPLATE_ITEM}

[外鏈圖片轉存失敗(img-h0zMu9vc-1566914604716)(210C16A5134647FC80604D7ADB3CA627)]

  • 添加觸發器
    [外鏈圖片轉存失敗(img-k5T9JC0v-1566914604717)(E76B2E4FC2244FBA8459ACF1A6DF30C5)]

  • 修改全域宏{$TEXT_GLOBAL_TRIGGER}的值,模擬觸發告警
    [外鏈圖片轉存失敗(img-g8pfGABh-1566914604717)(85D1AD9BE144459898C320932B3BB8FE)]

模板宏變量的優先級大於全域宏

  • 一個監控項中連接了多個模板同時這幾個模板中有同名稱的宏變量,那麼宏變量的值優先取編號靠前的模板宏變量值

優先級:主機宏 > 模板宏 > 全域宏

主機層面的宏變量驗證

  • 1.給主機上添加宏變量{$TEST_HOST_ITEM},{$TEST_HOST_TRIGGER}

[外鏈圖片轉存失敗(img-tpbLZQmn-1566914604718)(18E30ECC8B904103AF380841B8731A60)]

  • 定義個item引用主機宏{$TEST_HOST_ITEM}

[外鏈圖片轉存失敗(img-OSc27Tnj-1566914604718)(9795DB1FA46D4EE8B3C3329E5B5A6458)]

  • 定義個trigger引用主機宏{$TEST_HOST_TRIGGER}
    [外鏈圖片轉存失敗(img-XP1vP06O-1566914604721)(CD1DFF6FF6E2410A804DCFF185ACE117)]

  • 測試效果
    lb-node1引用了該模板,其生效了上面定義的主機宏測試item
    [外鏈圖片轉存失敗(img-uyd5iSnZ-1566914604722)(82B74359F44A48DB9342C174B58B6730)]
    還測試生效了主機宏trigger
    [外鏈圖片轉存失敗(img-ymMqCQbC-1566914604722)(EC865E250778466D9B132DF87E4B98D9)]

  • 2.給全域宏、模板宏和主機宏都定義一個相同的{$TEST_PRIORITY_ITEM2}宏變量,觀察到主機的宏變量優先級最高
    [外鏈圖片轉存失敗(img-SXMGd42j-1566914604723)(BDA5B97C2A3945EBBA66067E0B87A71B)]

  • 在模板裏定義一個監控項,觀測到模板裏生效的是模板宏的值
    [外鏈圖片轉存失敗(img-WnWCBfXU-1566914604728)(80EEE75A4DF44A6E840C13A116E1D25F)][外鏈圖片轉存失敗(img-XSoTnJN1-1566914604728)(0833EBADC6B84A27B7B6B0FBBA514A83)]

  • 在主機的監控項上生效的是主機宏的值
    [外鏈圖片轉存失敗(img-MHoxLAdy-1566914604729)(8E0EF31A53D44D3BA6FABE73BC876C82)]

自動發現宏的演示

配置低級別自動發現的步驟

  1. 配置自動發現監控項Discovery rules(根據腳本或命令生成低級別的自動發現宏變量)
  2. 定義item原型Item prototypes(主要利用低級別自動發現產生的變量,來動態的創建監控項、觸發器、圖形)

實戰演示低級別自動發現的配置管理

  • 演示內容:自動發現服務器本地的監聽的端口,並且將這些端口進行自動化的監控和告警
  1. 配置agent客戶端
[root@lb-node2 /etc/zabbix]# vim zabbix_agentd.d/userparameter_ports.conf 

UserParameter=listen.ports.discovery,python /etc/zabbix/scripts/listen_ports.py

  1. 編寫獲取服務端口的腳本listen_ports.py
#!/usr/bin/python

import os
import json

cmd=os.popen("""netstat -lntp|grep -v rpc|awk -F "[ :]+" '{if($4 ~ /0.0.0.0/ || $4 ~ /127.0.0.1/) print $5}'""")

ports=[]
for port in cmd.readlines():
    r=port.strip()
    ports += [{'{#PORT}':r}]

print json.dumps({'data':ports},sort_keys=True,indent=4,separators=(',',':'))

  1. 配置測試的監控模板

[外鏈圖片轉存失敗(img-QLUxxSmp-1566914604729)(2741E0FDD0204527A8C9C8F9ED5D880D)][外鏈圖片轉存失敗(img-1CqKjbBq-1566914604731)(51439D26F27B4370A24F2E98491A3078)]

  1. 設置zabbix權限
    默認zabbix-agent使用zabbix用戶啓動,爲了可以是zabbix執行腳本,我們修改他的權限,給他提升權限sudovi
  • 兩種方法
    1. 提升sudo權限

      [root@lb-node2 ~]# visudo

      zabbix ALL=NOPASSWD ALL

    2. 修改zabbix配置,使zabbix-agent以root用戶運行(修改配置後要重啓agent)

    sed -i 's@# AllowRoot=0@AllowRoot=1@g' /etc/zabbix/zabbix_agentd.conf
    
    [外鏈圖片轉存失敗(img-H5PkJL29-1566914604732)(BE843706B3794E69AEB08DA9CBF8D16E)]
    3. 還有一種方法:思路用root用戶生成json格式的端口信息日誌,然後zabbix-agent讀取這個日誌即可
  1. zabbix-server端測試獲取agent端的端口信息

[外鏈圖片轉存失敗(img-TaKKxfB6-1566914604735)(C7BB4A82ED654AE9B82CF8DAFF5A719F)]

  1. 自動發現規則已經創建

[外鏈圖片轉存失敗(img-s2uCqfAU-1566914604736)(9157AC32E90B4F6A8735973208979CFE)]

  1. 創建監控項原型

[外鏈圖片轉存失敗(img-aKGooPoH-1566914604739)(BCE24807B4334B74A9107539606F2D33)]
[外鏈圖片轉存失敗(img-QR9Ea6tX-1566914604740)(EB0A49B772A54D4C90E52F1C90A6BF81)]

  1. 創建監控項觸發器原型

[外鏈圖片轉存失敗(img-oxMJYwG4-1566914604741)(706D44DBE1EA40279066BC0032F4FDCC)][外鏈圖片轉存失敗(img-22pgSuOB-1566914604741)(0364624C5B064CC0B869E6EE56E0ADD2)]
[外鏈圖片轉存失敗(img-W0AIq9em-1566914604744)(1A06811EC2E94AC29D1A9036309D7FC9)]
[外鏈圖片轉存失敗(img-RbiiUEuD-1566914604746)(773A1139BD12419AAA6D1B92E367FFFF)]

  1. lb-node1主機上自動發現監聽端口實現了在這裏插入圖片描述
  • 並且監聽的端口都有值了

[外鏈圖片轉存失敗(img-zCcMriyw-1566914604747)(376B1358C0804399B2871EDE8D206764)]

  • 測試關閉80端口,zabbix-agent觸發告警
    [外鏈圖片轉存失敗(img-yrSCa9YA-1566914604752)(32674C681C9D494BB16C74C4FB63BCC5)]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章