Zabbix-26之跨网络监控和自定义监控传多个参数

it2026-01-24  10

一、目标

掌握zabbix跨网络(跨网段)监控,比如使用线下的zabbix服务器监控阿里云ECS服务器;

掌握zabbix_agent自定义参数中,传递多个参数的方法

二、说明

●第一步准备实现线下的zabbix服务器监控阿里云ECS服务器

zabbix服务器事先搭建在了centos7.6上。

●第二步准备使用线下的zabbix服务器监控线上阿里云的nginx_status的各种连接数

ecs上事先搭建好nginx站点,并配置好Nginx_status访问策略。

做到能使用公网URL访问得到nginx_status页面。页面效果截图如下:

三、线下zabbix服务器监控线上阿里云ECS服务器

1.保证ECS开放了10050端口(zabbix_agent默认使用10050端口)。

可以使用telnet命令【telnet 123.123.123.123 10050】来测试线上的zabbix_agent能被正常访问。(123.123.123.123为示例的阿里云ECS服务器ip地址)

特别注意安全组的开放。

2.保证线下zabbix的出方向的10050端口没有被防火墙拦截。

依然可以使用类似【telnet 123.123.123.123 10050】的命令去测试

3.添加监控主机

将阿里云ECS服务器添加到线下的zabbix的主机列表中

4.展示以下我真实的阿里云ECS监控图

四、编写自定义监控脚本,监控web网站访问数量

1.说明

我的zabbix服务器是使用centos7.6搭建的,便于监控脚本的编写,本次使用shell脚本,它有着高速、便捷、语法简单的特点。

写好脚本之后就用zabbix服务器当成监控端。

2.编写监控脚本

vi /data/script/xMonitorNginxStatus.sh #!/usr/bin/env bash #active 当前活动的客户端连接数,包括waiting连接数 #accepts 当前的客户端连接数 #handled 已处理的连接总数 #requests 客户端请求的总和 #reading 正在读取请求头的当前连接数 #writing 将响应写回客户端的当前连接数 #waiting 等待请求空闲客户端的当前连接数 #---注意:你的zabbix服务器上必须安装curl# result="/usr/bin/curl -s $1" case $2 in active) $result |awk '/Active/ {print $NF}' ;; accepts) $result |awk 'NR==3 {print $1}' ;; handled) $result |awk 'NR==3 {print $2}' ;; requests) $result |awk 'NR==3 {print $3}' ;; reading) $result |awk '/Reading/ {print $2}' ;; writing) $result |awk '/Writing/ {print $4}' ;; waiting) $result |awk '/Writing/ {print $6}' ;; *) echo -e "\e[1;31m应当输入参数active/accepts/handled/requests/reading/writing/waiting中的任一个\e[0m" ;; esac

3.注意给脚本添加可执行权限(或者让zabbix服务的用户有执行权限)

比如这样写,但你不能硬抄

chmod +x /data/script/xMonitorNginxStatus.sh

4.在zabbix服务器上修改zabbix_agentd.conf文件

● 在合适的地方添加一行内容,如:

UserParameter=xMonitorNginxStatus[*],"/data/script/xMonitorNginxStatus.sh" $1 $2

啰嗦:$1为你传的URL网址,$2为nginx_status的状态名(active/accepts/handled/requests/reading/writing/waiting中的任一个)

这样即实现了给自定义脚本传递2个参数

5.修改zabbix的超时参数

纳尼?这是什么鬼?

因为CURL可能有时候拉取网页的时候会有点慢,如果拉取网页时间超过4秒了,那么zabbix会认为超时失败。

●修改zabbix_agentd.conf的超时参数

找到包含【Timeout=】的那行,把数值调的略大一些就行,比如改成【Timeout=30

●修改zabbix_server.conf的超时参数

找到包含【Timeout=】的那行,把数值调的略大一些就行,比如改成【Timeout=30

啰嗦:如果你使用的是yum的安装方式,那么配置文件在/etc/zabbix/目录下。

6.重启zabbix服务器上的两个服务

systemctl restart zabbix-agent systemctl restart zabbix-server

7.在zabbix的shell下使用zabbix_get工具检查是否能获取数据

zabbix_get -s 127.0.0.1 -p 10050 -k xMonitorNginxStatus["http://git.hiibm.com/kahn_status","writing"]

啰嗦:中括号里两个引号的就是传递给脚本的两个参数。

这个命令的意思是,执行zabbix服务器上的用户参数xMonitorNginxStatus(即自定义脚本/data/script/xMonitorNginxStatus.sh),然后给该脚本传递两个参数,一个是一串网址,一个是writing字符串。

如果这样能正确获取数值,那说明一切都ok了。

 

8.如何让刚才的自定义监控脚本得到的数据以图形的方式显示到zabbix的web页面上?

在zabbix的web页面上的【配置---主机---zabbix server】添加监控项

然后再去添加个图形就完事了。

 

有问题?

那监控其他网站的连接状态怎么办?

那就在刚才web页面的键值里,照葫芦画瓢把你的URL写进去就是了

 

五、总结

1.zabbix_agent程序默认使用的是10050端口,客户端开放入方向的10050端口

2.线下的zabbix服务器监控线上的服务器,zabbix服务器的出方向的10050要开放

3.自定义参数的脚本传递多个参数的写法:UserParameter=xMonitorNginxStatus[*],"/data/script/xMonitorNginxStatus.sh" $1 $2

--------------------------------------------END 2020年10月22日16:30:09-------------------------------------------------

 

写技术帖子非常花费时间,如果本帖对你有所帮助,希望你能随意支持一点,给我以更大的创作动力。

鄙视白瞟党

最新回复(0)