偶然看到兴业证券工程师写了一篇关于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:18686/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 $weburl$file_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
Zabbix Server Web 配置
添加监控项在 web 上配置即可,后端会自动下载脚本到本地目录,进行数据采集。
Linux 服务状态监控项
web code 检查监控项
最新数据
shell 实现zabbix-agent 一键部署自动上线
zabbix-agent 一键部署自动上线