赞
踩
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、页面添加自动发现机制
配置 ——》 模板 ——》 新建模板或是在原有模板上均可 ——》 自动发现规则 ——》创建发现规则

完成规则建立后 ——》 监控项原型 ——》 创建监控项原型

最后将模板链接至对应主机即可
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。