1、更改客户端配置文件
位置(通过yum直接安装的客户端):/etc/zabbix/zabbix_agentd.conf
Include=/etc/zabbix/zabbix_agentd.d/*.conf
默认即可。
在对应目录下添加端口监听的配置文件touch /etc/zabbix/zabbix_agentd.d/userparameter_port.conf
并添加
UserParameter=port.alert,/etc/zabbix/auto_port.py
# 前面为键值名称,用于建立自动发现
# 后面为脚本位置
2、建立自动发现脚本
根据配置文件路径建立脚本,并通过json模块转换成json格式输出
代码如下(请务必提权!!!):
#!/usr/bin/env python
# coding:utf-8
# @Time : 2020/8/27 15:28
# @Author: 小小の运维
# @File : port_autofind.py
# 生效前需要将用户提权
# 位置 /etc/sudoers
# 添加 zabbix ALL=(ALL) NOPASSWD:/usr/sbin/ss
import os
import json
import string
# 端口查询命令
t = os.popen("sudo ss -tunlp |grep LISTEN | sed 's/::/FF/g' |grep users |sort |uniq ")
# 非监听端口列表
port1 = ['22', '1100', '25', '4369']
array = []
for port in t.readlines():
r = port.strip()
port = r.split(':')[1].split(' ')[0]
try:
name = r.split('\"')[1]
except:
name = "none"
# 判断返回值是否在屏蔽列表中,不在则写入port列表
if port not in port1:
cluster = {'{#TCP_PORT}': port, '{#TCP_NAME}': name}
# 将值末尾追加至array列表中
array.append(cluster)
amy = [dict(t) for t in set([tuple(d.items()) for d in array])]
# 固定端口添加(非必须)
# extra = [{'{#TCP_NAME}': 'java', '{#TCP_PORT}': '8000'}]
# amy.extend(extra)
# json格式规范化输出
print(json.dumps({'data': amy}, sort_keys=True, indent=4, separators=(',', ':')))
完成后,将脚本文件提权并重启客户端服务。
关键!!
将zabbix用户进行sudo权限的提升,否则脚本无法执行
vim /etc/sudoers
添加
zabbix ALL=(ALL) NOPASSWD:/usr/sbin/ss
后续步骤,参照下面的后续即可。
1、更改客户端配置文件
位置(通过yum直接安装的客户端):/etc/zabbix/zabbix_agentd.conf
Include=/etc/zabbix/zabbix_agentd.d/*.conf
默认即可。
在对应目录下添加端口监听的配置文件touch /etc/zabbix/zabbix_agentd.d/userparameter_port.conf
并添加
serParameter=port.alert,/etc/zabbix/port_alert.sh
# 前面为键值名称,用于建立自动发现
# 后面为脚本位置
2、建立自动发现脚本
根据配置文件路径建立脚本,并将获得的值人工更改为json格式
脚本如下:
#/bin/bash
CONFIG_FILE=/etc/zabbix/port.conf
Check(){
grep -vE '(^ *#|^$)' ${CONFIG_FILE} | grep -vE '^ *[0-9]+' &> /dev/null
if [ $? -eq 0 ]
then
echo Error: ${CONFIG_FILE} Contains Invalid Port.
exit 1
else
portarray=($(grep -vE '(^ *#|^$)' ${CONFIG_FILE} | grep -E '^ *[0-9]+' | awk -F: '{print $1}'))
name=($(grep -vE '(^ *#|^$)' ${CONFIG_FILE} | grep -E '^ *[0-9]+' | awk -F: '{print $2}'))
ip=($())
fi
}
PortDiscovery(){
length=${#portarray[@]}
echo "{"
echo -e '\t'"\"data\":["
for ((i=0;i<$length;i++))
do
printf '\t\t{'
printf "\n\t\t\t\"{#TCP_PORT}\":\"${portarray[$i]}\","
printf "\n\t\t\t\"{#TCP_NAME}\":\"${name[$i]}\""
printf "\n\t\t}"
if [ $i -lt $[$length-1] ];then
echo ','
fi
done
printf "\n\t]\n"
echo "}"
}
port(){
Check
PortDiscovery
}
port
并手动建立包含对应服务的端口及名称的文件
# zabbix-agent端口
1100:zabbix-agent
# mysql端口
3306:mysql
# Jenkins-web端口
8080:Jenkins-web
# Jenkins端口
50000:Jenkins
# Sonar-mysql端口
3310:Sonar-mysql
# Sonar-web端口
8088:Sonar-web
# 测试nginx端口
800:nginx测试
完成后,将脚本文件提权并重启客户端服务即可
3、服务端验证
如果正常,则服务端可通过zabbix_get -s 192.168.142.100 -p 1100 -k port.alert
命令即可正常收到返回的json格式文本。
其中,-s
后为客户端地址,-p
后为客户端端口,默认为10050,-k
后为设定好的键值名称
4、页面添加自动发现机制
配置 ——》 模板 ——》 新建模板或是在原有模板上均可 ——》 自动发现规则 ——》创建发现规则
完成规则建立后 ——》 监控项原型 ——》 创建监控项原型