文章目录

  • zabbix自动发现
  • 配置自动发现
  • 端口port自动发现
  • 监听端口自动发现的演示方法2
  • 配置低级别自动发现的步骤
  • 实战演示低级别自动发现的配置管理


zabbix自动发现

配置自动发现

keysystem.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 ~]#
  • 配置自动发现
  • zabbix6自动发现icmp ping zabbix自动发现端口_自动发现

  • 网络发现模块执行的服务和主机(IP)的每次检查都生成发现事件于是配置Discovery的Action
  • zabbix6自动发现icmp ping zabbix自动发现端口_监听端口_02


  • zabbix6自动发现icmp ping zabbix自动发现端口_vim_03


  • zabbix6自动发现icmp ping zabbix自动发现端口_自动发现_04

  • 自动发现主机成功
  • zabbix6自动发现icmp ping zabbix自动发现端口_zabbix_05

端口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模板中创建端口自动发现规则

zabbix6自动发现icmp ping zabbix自动发现端口_vim_06


2.

zabbix6自动发现icmp ping zabbix自动发现端口_TCP_07


3.

zabbix6自动发现icmp ping zabbix自动发现端口_监听端口_08


4.

zabbix6自动发现icmp ping zabbix自动发现端口_自动发现_09

  • 创建Item原型
  • zabbix6自动发现icmp ping zabbix自动发现端口_zabbix_10


  • zabbix6自动发现icmp ping zabbix自动发现端口_vim_11

  • 创建触发器原型
  • zabbix6自动发现icmp ping zabbix自动发现端口_zabbix_12

  • 创建图像原型
  • zabbix6自动发现icmp ping zabbix自动发现端口_TCP_13

  • 查看是否成功,在monitoring-latest data里面查看是否有端口产生
  • zabbix6自动发现icmp ping zabbix自动发现端口_自动发现_14

  • 报错解决
  • zabbix6自动发现icmp ping zabbix自动发现端口_zabbix_15

解决办法是 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

zabbix6自动发现icmp ping zabbix自动发现端口_TCP_16

监听端口自动发现的演示方法2

配置低级别自动发现的步骤

  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. 配置测试的监控模板

zabbix6自动发现icmp ping zabbix自动发现端口_zabbix_17

  1. 设置zabbix权限
    默认zabbix-agent使用zabbix用户启动,为了可以是zabbix执行脚本,我们修改他的权限,给他提升权限sudovi
  • 两种方法
  1. 提升sudo权限

[root@lb-node2 ~]# visudo

zabbix ALL=NOPASSWD ALL

  1. 修改zabbix配置,使zabbix-agent以root用户运行(修改配置后要重启agent)
sed -i 's@# AllowRoot=0@AllowRoot=1@g' /etc/zabbix/zabbix_agentd.conf
  • 还有一种方法:思路用root用户生成json格式的端口信息日志,然后zabbix-agent读取这个日志即可
  1. zabbix-server端测试获取agent端的端口信息

zabbix6自动发现icmp ping zabbix自动发现端口_TCP_18

  1. 自动发现规则已经创建

zabbix6自动发现icmp ping zabbix自动发现端口_TCP_19

  1. 创建监控项原型

zabbix6自动发现icmp ping zabbix自动发现端口_vim_20

  1. 创建监控项触发器原型
  2. lb-node1主机上自动发现监听端口实现了
  • 并且监听的端口都有值了

zabbix6自动发现icmp ping zabbix自动发现端口_监听端口_21

  • 测试停止zabbix-agent触发告警