文章目录
- zabbix自动发现
- 配置自动发现
- 端口port自动发现
- 监听端口自动发现的演示方法2
- 配置低级别自动发现的步骤
- 实战演示低级别自动发现的配置管理
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触发告警