目录
页面中的一些概念
主机: 我们需要被监控的服务器
图形: 各种监控的项目实现图形化的展示,图形展示的数据来自监控项,图形需要自己创建,但某些模版自带图形
监控项: 你想要知道的东西,一个监控的项目,例如CPU使用率、网络流量等
触发器: 一个报警程序
仪表盘: 汇报各种数据、图形展示
应用集: 各种应用的集合:要查看内存、CPU、磁盘、网络流量、数据库等信息,一个应用集里有很多监控项
自动发现: zabbix服务器能够根据模版里的监控项目祖东到客户机那去识别又哪些监控项可以监控。但主动发现会消耗资源
聚合图形: 将很多图形在一个页面展示
添加一个名为nginx的两行两列的图形,创建完成之后点击nginx,右上角编辑聚合图形,更改,添加需要展示的图形信息
关系:监控项组成应用集,很多应用集可以套在一个模版里,模版用在主机上
配置agent服务来获取目标主机数据
对nginx服务器进行监控
将zabbix-server端的agent文件传给nginx服务器
scp zabbix-agent-4.4.6-1.el7.x86_64.rpm 192.168.232.163:/root
在nginx服务器上安装agent软件
yum install zabbix-agent-4.4.6-1.el7.x86_64.rpm -y
安装好了之后修改配置文件
cd /etc/zabbix
vim zabbix_agentd.conf
# 这个IP是zabbix_server的IP
Server=192.168.232.170
ServerActive=192.168.232.170
修改完成重启服务
service zabbix-agent restart
现在就可以在zabbix-server端监控到nginx服务器了
[root@localhost CebtOS7-software-zabbix]# zabbix_get -s 192.168.232.163 -p 10050 -k "system.cpu.load[all]"
0.000000
在网页中添加一台配置
在配置的主机栏右上角点击创建主机
输入相关信息
创建好了之后我们就需要为他添加模版
然后在自动发现规则那把所有的选项都勾上,启用
自定义监控项 – 以监控nginx为例
流程:创建应用集 -> 创建监控项加入到应用集中 -> 创建图形调用监控项
监控用户访问量
1、开启nginx本身的统计功能
cd /usr/local/scnginx99/conf/
vim nginx.conf
# 在server模块中添加
location /nginx_status {
stub_status on;
}
修改nginx配置文件之后重启服务
nginx -s reload
访问 http://192.168.232.163/nginx_status
就可以看到数据
2、编写脚本采集数据
vim /etc/zabbix/zabbix_agentd.d/nginx_data.sh
HOST="192.168.232.163"
PORT="80"
case $1 in
active)
/usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status/" 2>/dev/null|grep 'Active' |awk '{print $NF}'
;;
reding)
/usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status" 2>/dev/null|grep 'Reading'|awk '{print $2}'
;;
writing)
/usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status" 2>/dev/null|grep 'Writing'|awk '{print $4}'
;;
waiting)
/usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status" 2>/dev/null|grep 'Waiting'|awk '{print $6}'
;;
accepts)
/usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status" 2>/dev/null|awk NR==3|awk '{print $1}'
;;
ping)
/sbin/pidof nginx|wc -w
;;
handled)
/usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status" 2>/dev/null|awk NR==3|awk '{print $2}'
;;
requests)
/usr/bin/curl --insecure "http://$HOST:$PORT/nginx_status" 2>/dev/null|awk 'NR==3{print $3}'
;;
esac
给脚本可执行权限
chmod +x nginx_data.sh
编写一个参数文件,说明需要获取什么参数,调用采集数据的脚本
vim /etc/zabbix/zabbix_agentd.d/userparameter_nginx.conf
UserParameter=nginx.status[*],/etc/zabbix/zabbix_agentd.d/nginx_data.sh $1
重启服务
service zabbix-agent restart
3、在zabbix-server里获取数据
zabbix_get -s 192.168.232.163 -k nginx.status[active]
能看到数据就说明脚本没有出错
接下来在监控页面添加监控项
1、点击zabbix-clent-nginx的应用集,右上角创建应用集chen-nginx,然后点击岗创建的应用集,在监控项页面,右上角创建监控项
注意添加的key是与脚本里的一致
添加完所需的数据之后,就在配置-主机-选择nginx服务器-图形,右上角创建图形,将刚创建的监控项加入
监控ssh进程
编写监控ssh进程的脚本
vim /etc/zabbix/zabbix_agentd.d/ssh_data.sh
#!/bin/bash
case $1 in
ping)
/usr/bin/netstat -anplut|grep sshd|grep "LISTEN"|wc -l
;;
esac
写完之后给这个脚本可执行权限
但由于脚本运行netstat命令式在普通用户下执行的,权限不足,需要登录root用户,让其他用户活动文件所有者的权限,授予suid权限
chmod +s /usr/bin/netstat
然后编写参数文件
vim /etc/zabbix/zabbix_agentd.d/userparameter_ssh.conf
UserParameter=ssh.status[*],/etc/zabbix/zabbix_agentd.d/ssh_data.sh $1
刷新zabbix-agent服务
监控cron进程
监控脚本
vim /etc/zabbix/zabbix_agentd.d/crond_status.sh
#!/bin/bash
case $1 in
ping)
/usr/bin/pidof crond|wc -w
;;
esac
其实也可以直接在参数文件里面写输出数据,不需要调用脚本
vim /etc/zabbix/zabbix_agentd.d/userparameter_crond.conf
UserParameter=crond.status[*],/usr/sbin/pidof crond|wc -w
最后在网页中加入监控项和图形就完成了
触发器
触发器其实就是看获取的数据值是否在表达式之中
在配置-主机-选择nginx服务器的触发器,我们来创建一个sshd服务宕挂掉的触发器
这里添加的表达式:
其中,sshd服务开启时得到的结果为2,服务关闭时为1
现在我们来把sshd服务关闭,看图形和触发器的效果:
报警
参考https://blog.csdn.net/whell_scl/article/details/106722721
1、注册一个企业微信
注册一个企业微信,在应用管理页面创建一个微信告警的应用,创建完成之后注意Agentld和Secret,以及我的企业页面最下方的企业ID,等下要用
2、微信报警脚本
脚本放在zabbix server上
vim wechat.sh
#!/bin/bash
# 企业id
CorpID="ww1d8fa4edbc53c6a0"
#SecretID
Secret="Sl-i4zXZY1kc-0CS_xxD3eWuTqIO8LYS3ydball8eBU"
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CorpID&corpsecret=$Secret"
# 获取token
Token=$(/usr/bin/curl -s -G $GURL |awk -F\": '{print $4}'|awk -F\" '{print $2}')
# echo $Token
# 携带token发送数据
PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Token"
function body(){
local int agentid=1000002 # 你的agentdid
local UserID="@all" # 发送的用户ID
local PartyID=1 # 部门ID
local Msg=$(echo "$@" | cut -d" " -f3-) # 发送给所有人
printf '{\n'
printf '\t"touser": "'"$UserID"\"",\n"
printf '\t"toparty": "'"$PartyID"\"",\n"
printf '\t"msgtype": "text",\n'
printf '\t"agentid": "'"$agentid"\"",\n"
printf '\t"text": {\n'
printf '\t\t"content": "'"$Msg"\""\n"
printf '\t},\n'
printf '\t"safe":"0"\n'
printf '}\n'
}
/usr/bin/curl --data-ascii "$(body $1 $2 $3)" $PURL
给这个脚本执行权限
3、在监控页面设置
然后在监控页面,管理-报警媒介类型,右上角创建媒体类型
然后在管理-用户群组,右上角创建用户群组
管理-用户,右上角创建用户
点击刚刚新建的用户,设置报警媒介
然后点击这个用户,权限,设置为超级管理员
再在配置-动作页面,右上角,新建动作