zabbix 自定义监控脚本统一集中管理

偶然看到兴业证券工程师写了一篇关于zabbix的文章实现思路很不错,按照原文操作记录分享一下实现步骤!!!

原文链接

https://www.talkwithtrend.com/Article/252525

背景

zabbix 在进行大规模部署通常会根据需求自定义脚本文件,需要将自定义脚本文件上传到不同的监控节点上,在进行脚本变更时需要浪费大量的时间对每个节进行更改,无法实现脚本的统一集中管理。。。

实现原理

部署 Nginx 文件服务器统一存放和管理监控脚本,在zabbix-agent 预埋通用脚本,根据zabbix server传输的Key和参数,从文件服务器拉取脚本执行后返回数据。

实现架构

Nginx 文件服务器

Nginx 配置

代码语言:javascript
复制
server {
    listen       18686;
    location / {
        root   /usr/share/nginx/html;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on; 
        index  index.html index.htm;
     }
 }

浏览器访问测试

文件下载更新执行脚本

代码语言:javascript
复制
[root@elk-node2 shell]# cat requestshell.sh 
cat requestshell.sh 
#!/bin/bash

weburl="http://192.168.99.107/software/" #文件服务器的URL
Dir="/etc/zabbix"
file_directory=$Dir/$1 #定义本地存放执行脚本的目录
file_name=$2 #脚本名称
file_path=$1/$2 #脚本本地路径

if [ ! -d $file_directory ];then #判断文件目录是否存在
mkdir -p $file_directory
fi

if [ ! -f Dir/file_path ];then #判断脚本是否存在
wget -P file_directory weburl$file_name 2>>/tmp/log
fi

timestamp=$(date +%s)
filetimestamp=(stat -c %Y Dir/$file_path)

if [ [timestamp - $filetimestamp] -gt 3600 ];then #判断当前时间与脚本修改时间的大小,3600秒更新一次
wget weburlfile_name -O Dir/file_path 2>>/tmp/log #覆盖脚本
touch -c Dir/file_path #重置脚本时间
fi

bash Dir/file_path $3 #执行脚本

监控 linux 服务运行状态脚本

代码语言:javascript
复制
cat service.sh
#!/bin/bash

stat=systemctl status $1 |grep Active|awk '{print $3}'|cut -c 2-8

if [ $stat == running ];then
echo 1
else
echo 0
fi

监控网站状态脚本

代码语言:javascript
复制
cat webcheck.sh
#!/bin/bash
/usr/bin/curl -I -m 10 -o /dev/null -s -w %{http_code}"\n" "$1"

-I 仅测试HTTP头

-m 10 最多查询10s

-o /dev/null 屏蔽原有输出信息

-s silent 模式,不输出任何东西

-w %{http_code} 控制额外输出

脚本测试(传入三个变量分别为脚本目录,脚本名称, 监控变量)

zabbix-agent 配置

代码语言:javascript
复制
vim  /etc/zabbix/zabbix_agentd.conf
UserParameter=requests_file[*],sh /mnt/shell/requestshell.sh $1 $2 $3</code>

Zabbix Server Web 配置

添加监控项在 web 上配置即可,后端会自动下载脚本到本地目录,进行数据采集。

Linux 服务状态监控项

web code 检查监控项

最新数据

shell 实现zabbix-agent 一键部署自动上线

zabbix-agent 一键部署自动上线