zabbix自動發現
配置自動發現
key
爲system.uname
是agent端系統的信息
[root@lb-node1 ~]# zabbix_agentd -p|grep system.uname
system.uname [s|Linux lb-node1 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64]
[root@lb-node1 ~]#
-
配置自動發現
-
網絡發現模塊執行的服務和主機(IP)的每次檢查都生成發現事件於是配置Discovery的Action
-
自動發現主機成功
端口port自動發現
- 客戶端新建查詢端口腳本
discoverport.sh
[root@lb-node1 /etc/zabbix/scripts]# vim discoverport.sh
#!/bin/bash
portarray=(`sudo netstat -tnlp|egrep -i "$1"|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'|sort|uniq`)
length=${#portarray[@]}
printf "{\n"
printf '\t'"\"data\":["
for ((i=0;i<$length;i++))
do
printf '\n\t\t{'
printf "\"{#TCP_PORT}\":\"${portarray[$i]}\"}"
if [ $i -lt $[$length-1] ];then
printf ','
fi
done
printf "\n\t]\n"
printf "}\n"
- 增加執行權限
[root@lb-node1 /etc/zabbix/scripts]# chmod +x discovertcpport.sh
- 客戶端增加discovery的key
UserParameter=tcpportlisten,/usr/local/zabbix_agent/sbin/discovertcpport.sh "$1"
- 重啓zabbix_agentd服務,server端測試獲取key
[root@zabbix-server ~]# zabbix_get -s 192.168.1.10 -k tcpportlisten
{
"data":[
{"{#TCP_PORT}":"10050"},
{"{#TCP_PORT}":"22"},
{"{#TCP_PORT}":"25"},
{"{#TCP_PORT}":"80"}
]
}
[root@zabbix-server ~]#
- 在Linux模板中創建端口自動發現規則
2.
3.
4.
-
創建Item原型
-
創建觸發器原型
-
創建圖像原型
-
查看是否成功,在monitoring-latest data裏面查看是否有端口產生
-
報錯解決
解決辦法是 vim /etc/sudoers
#Defaults requiretty 註釋掉這個
zabbix ALL=(ALL) NOPASSWD: ALL
然後在上面的腳本里面改爲
sudo netstat -tnlp|egrep -i "$1"|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'|sort|uniq
監聽端口自動發現的演示方法2
配置低級別自動發現的步驟
- 配置自動發現監控項
Discovery rules
(根據腳本或命令生成低級別的自動發現宏變量) - 定義item原型
Item prototypes
(主要利用低級別自動發現產生的變量,來動態的創建監控項、觸發器、圖形)
實戰演示低級別自動發現的配置管理
- 演示內容:自動發現服務器本地的監聽的端口,並且將這些端口進行自動化的監控和告警
- 配置agent客戶端
[root@lb-node2 /etc/zabbix]# vim zabbix_agentd.d/userparameter_ports.conf
UserParameter=listen.ports.discovery,python /etc/zabbix/scripts/listen_ports.py
- 編寫獲取服務端口的腳本
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=(',',':'))
- 配置測試的監控模板
- 設置zabbix權限
默認zabbix-agent使用zabbix用戶啓動,爲了可以是zabbix執行腳本,我們修改他的權限,給他提升權限sudovi
- 兩種方法
-
提升sudo權限
[root@lb-node2 ~]# visudo
…
zabbix ALL=NOPASSWD ALL -
修改zabbix配置,使zabbix-agent以root用戶運行(修改配置後要重啓agent)
sed -i 's@# AllowRoot=0@AllowRoot=1@g' /etc/zabbix/zabbix_agentd.conf
- 還有一種方法:思路用root用戶生成json格式的端口信息日誌,然後zabbix-agent讀取這個日誌即可
-
- zabbix-server端測試獲取agent端的端口信息
- 自動發現規則已經創建
- 創建監控項原型
-
創建監控項觸發器原型
-
lb-node1主機上自動發現監聽端口實現了
- 並且監聽的端口都有值了
- 測試停止zabbix-agent觸發告警