前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Z投稿】Zabbix通过自动发现监控端口

【Z投稿】Zabbix通过自动发现监控端口

作者头像
Zabbix
发布2021-02-03 10:15:11
7290
发布2021-02-03 10:15:11
举报
文章被收录于专栏:Zabbix中国官方
Zabbix通过自动发现监控端口

何星

Zabbix工程师

红帽RHCE认证工程师

多年Linux运维经验,精通Zabbix开源监控系统的架构、部署、使用和维护,有较强的Shell和Python开发能力。

安装环境

Zabbix server和agent通过编译方式安装在服务器192.168.25.106上。Zabbix server/agent的安装目录为:/usr/local/zabbix。

创建脚本

创建自动发现Shell脚本

创建Shell脚本,使用zabbix_sender命令将监控项的值发送给监控项。脚本主要分为三部分:检查自定义配置文件的合法性,发送json数据给自动发现规则的键值,为每个监控项发送值。

在/usr/local/zabbix/目录下创建script/目录,用于存放脚本,注意修改权限(添加可执行权限,拥有着和所属组为zabbix)。脚本具体如下:

#!/bin/bash

# Discovery port list and get status of port.

# port_discovery.sh

ZABBIX_SENDER=/usr/local/zabbix/bin/zabbix_sender

CONFIG_FILE=/usr/local/zabbix/etc/port.conf

PROXY_IP=192.168.25.106

# HOSTNAME 必须和zabbix前端定义的主机名称一致。

HOSTNAME=192.168.25.106

# 检查自定义配置文件的合法性,除注释和空行外只能包含有效的端口号。

checkConfig(){

grep -vE '(^ *#|^)' {CONFIG_FILE} | grep -vE '^ *[0-9]+' &> /dev/null

if [ $? -eq 0 ]

then

echo Error: ${CONFIG_FILE} contains wrong port number.

exit 1

else

while read line

do

echo {line} | grep -vE '(^ *#|^)' &> /dev/null

if [ $? -eq 0 ]

then

[ {line} -gt 0 -a {line} -lt 65536 ] || { echo Error: port number {line} in {CONFIG_FILE} is not between 1 and 65535.; exit 1; }

fi

done < ${CONFIG_FILE}

fi

}

# 输出必须是JSON格式的文本。

portDiscovery(){

num=0

# 变量num和countNum比较,确定是否输出逗号。最后一个列表项后不加逗号。

countNum=(cat {CONFIG_FILE} | grep -vE '(^ *#|^

echo -e "{\n\t\"data\":["

while read line

do

echo {line} | grep -E '(^ *#|^)' &> /dev/null && continue

num=$((num+1))

echo -e "\t{"

echo -e "\t\t\"{#PORT_NAME}\":\"${line}\""

[ "

done < ${CONFIG_FILE}

echo -e "\t]\n}"

}

# 单独为每个监控项发送值,-k port.status[{#PORT_NAME}]是不行的。

getPortStatus(){

while read line

do

echo {line} | grep -E '(^ *#|^)' &> /dev/null && continue

PORT_STATUS=(netstat -lnt | awk '{print 4}' | grep ":{line}" &> /dev/null && echo 1 || echo 0)

{ZABBIX_SENDER} -z {PROXY_IP} -s {HOSTNAME} -k port.status[{line}] -o "

done < ${CONFIG_FILE}

}

main(){

# 调用checkConfig和getPortStatus函数。

checkConfig

{ZABBIX_SENDER} -z {PROXY_IP} -s {HOSTNAME} -k port.discovery -o "

getPortStatus

# 执行脚本成功会输出下面的字符。

echo Successfully executed

}

[ # -eq 0 ] && main || echo Usage:

添加自定义配置文件

端口自定义配置文件port.conf文件放置在和zabbix_agentd.conf同一目录下。具体信息如下:

# 一个端口号单独一行,左右可以包含空格。端口号范围为1到65535。

# 空行和注释行是允许的。

22

80

50

3306

8080

10050

10051

添加自定义键值

在Zabbix agent配置文件中加入自定义键值(如下表),然后重启Zabbix agent服务。自定义键值是为了定时执行脚本,将最新值发送给相应监控项。如果客户端没有安装Zabbix agent,则可以考虑使用周期性计划任务。

UserParameter=port.run, /usr/local/zabbix/script/port_discovery.sh

创建模板

创建端口监控模板

创建模板,定义自动发现规则,注意键值与脚本中一致,类型为Zabbix采集器(Zabbix trapper)。注意监控项原型使用的宏名和脚本中一致,类型也是Zabbix采集器(Zabbix trapper)。模板中还创建一个“Zabbix客户端”类型的键值,用于定时调用脚本,监控项的“信息类型”为字符。

关联模板

将zbx_port_linux模板和主机192.168.25.106关联。

测试

将模板和主机关联后,等待片刻就会有数据出现,如下图。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-04-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Zabbix开源社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档