Zabbix 监控平台搭建 —服务监控
前言
在Zabbix 监控平台搭建一文中,已经将Zabbix的基础理论知识以及基础搭建过程大致展示了一遍,本文主要内容是展示Zabbix其他的监控功能以及与生产工具结合使用的搭建过程,如有错误或者遗漏的地方,欢迎大家指正,谢谢。
基础理论说明
请阅读Zabbix 监控平台搭建一文来获取Zabbix的基本理论知识。
实验步骤
实验目的:搭建展示其他监控功能
实验准备:3台Centos标准系统虚拟机(防火墙与selinux已关闭)
Zabbix服务端使用Centos7,其余虚拟机系统任意。(6或7)
实验规划:
本试验由于被监控端服务不同,此处不做规划。
PS:Zabbix服务端搭建见Zabbix 监控平台搭建
一、Zabbix监控nginx的活动量
主机规划
服务器角色 | IP |
---|---|
Zabbix服务端 | 192.168.10.20 |
Nginx服务器(被监控端) | 192.168.10.21 |
1.被监控端配置Nginx服务
安装依赖
yum -y install gcc gcc-c++ zlib zlib-devel pcre pcre-devel
准备Nginx软件包,解压编译安装。
tar -zxvf nginx-1.13.8.tar.gz
cd nginx-1.13.8
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module # 指定安装路径、指定用户、组、开启http状态统计模块
make && make install
useradd -s /sbin/nologin -M nginx # 创建运行用户
修改nginx的配置文件,开启状态统计模块.
vim /usr/local/nginx/conf/nginx.conf
# 在server区域下添加信息。
location /ngx_status {
stub_status on;
}
保存退出,编写客户端脚本。
vim nginx.sh
#!/bin/bash
HOST="127.0.0.1"
PORT="80"
# 检测 nginx 进程是否存在
function ping {
/sbin/pidof nginx | wc -l
}
# 检测 nginx 性能
function active {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
}
function reading {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
}
function writing {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
}
function waiting {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
}
function accepts {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
}
function handled {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
}
function requests {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
}
# 执行function
$1
保存退出,给脚本赋予执行权限。启动Nginx服务后测试脚本。
chmod a+x nginx.sh
ln -s /usr/local/nginx/sbin/* /usr/local/bin # 做好软链接,方便调用Nginx
echo "123" > /usr/local/nginx/html/index.html # 添加网页内容
nginx -t # 检测Nginx配置文件是否有问题
nginx # 启动Nginx服务
./nginx.sh ping # 测试脚本
返回值为1,代表服务运行正常。关闭nginx服务测试脚本。
pkill nginx
./nginx.sh ping
返回值为0,代表服务运行异常。
安装agent端,修改配置文件,将脚本放入指定目录,启动服务。
yum -y install zabbix-agent-3.2.1-1.el6.x86_64.rpm
vim /etc/zabbix/zabbix_agentd.conf
# 修改95行,指定zabbix服务器的IP或域名
Server=192.168.10.20
# 修改136行,指定主动方案中的zabbix服务器的IP或域名
ServerActive=192.168.10.20
# 修改147行,指定本机的主机名,此项必须与web界面配置项一致
Hostname=192.168.10.21
# 取消284行,开启自定义模块
UnsafeUserParameters=1
# 取消293行,配置自定义模块。
UserParameter=nginx.status[*],/etc/zabbix/zabbix_agentd.d/nginx.sh $1
mv nginx.sh /etc/zabbix/zabbix_agentd.d/
service zabbix-agent start
新复制会话,创建访问循环,以便测试访问量。
2.配置监控端
安装Zabbix探测工具,进行探测测试。
yum -y install zabbix-get-3.2.1-1.el7.x86_64.rpm
zabbix_get -s 192.168.10.21 -k 'nginx.status[ping]'
启动服务端Nginx,再次探测。
zabbix_get -s 192.168.10.21 -k 'nginx.status[ping]'
zabbix_get -s 192.168.10.21 -k 'nginx.status[accepts]'
探测成功,返回浏览器监控端添加主机。
导入nginx模板,添加监控nginx的主机
配置→模版→导入
然后点击主机,创建主机,设置主机名称、IP地址、模板、主机资产记录、加密等,然后查看监控的各项指标情况。
监控模版设置
点击添加,添加监控主机,等待片刻后开始监控。
查看Nginx访问量
监控中→聚合图形,添加自定义监控项目。
监测成功,成功获取Nginx服务信息。
二、Zabbix监控MySQL数据库
还原被监控端,监控端删除被监控Nginx主机。
主机规划
服务器角色 | IP |
---|---|
Zabbix服务端 | 192.168.10.20 |
MySQL数据库 | 192.168.10.10 |
1.被监控端配置MySQL数据库
安装数据库,配置基本信息。
yum -y install mysql mysql-server # 在CentOS7里需安装maridb-server
service mysqld start
mysqladmin -uroot password 123 # 创建MySQL初始密码
mysql -uroot -p123
GRANT ALL ON *.* TO 'zabbix'@'localhost' IDENTIFIED BY 'zabbix'; # 创建连接访问用户
FLUSH PRIVILEGES; # 刷新权限表
quit
安装agent端
yum -y install zabbix-agent-3.2.1-1.el6.x86_64.rpm
配置用户连接信息文件
vim /etc/zabbix/.my.cnf
# 填写以下信息
[client]
user=zabbix
password=zabbix
配置MySQL监控模版
cd /etc/zabbix/zabbix_agentd.d/
cp -a userparameter_mysql.conf userparameter_mysql.conf.bak # 备份该配置文件
vim userparameter_mysql.conf
# 修改第5行,指定模版文件存放目录。
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/etc/zabbix mysql -N | awk '{print $$2}'
# 修改第17行,指定模版文件存放目录。
UserParameter=mysql.ping,HOME=/etc/zabbix mysqladmin ping | grep -c aliveUserParameter=mysql.version,mysql -V
修改agent端配置文件
vim /etc/zabbix/zabbix_agentd.conf
# 修改95行,指定zabbix服务器的IP或域名
Server=192.168.10.20
# 修改136行,指定主动方案中的zabbix服务器的IP或域名
ServerActive=192.168.10.20
# 修改147行,指定本机的主机名,此项必须与web界面配置项一致
Hostname=192.168.10.10
保存退出,启动zabbix-agent服务。
service zabbix-agent start
netstat -antp | grep :10050
2.配置监控端
点击配置创建主机设置主机、模板、主机资产记录、加密等
一段时间后,查看mysql服务器的监控状态。
主机信息
模版配置
点击添加,过一段时间查看监控内容。
创建聚合图形,查看MySQL服务器的带宽,操作数,负载等信息。
监测成功。
三、Zabbix自动发现设置
假设zabbix-server服务器已经配置完成,zabbix-agent端也已经通过批量部署完毕。那么这时候就需要我们在zabbix的监控页面进行添加工作了,如果只有10几台机器还好说。但是生产环境中基本上都是动辄上百台的虚拟机,添加主机的工作量就非常巨大了,而且无脑的重复性劳动是毫无意义。而Zabbix的自动发现功能解决了这个问题。
还原被监控端,监控端删除被监控端。
主机规划
服务器角色 | IP |
---|---|
Zabbix服务端 | 192.168.10.20 |
被监控端1 | 192.168.10.10 |
被监控端2 | 192.168.10.11 |
1.被监控端配置
两台被监控端安装agent端,修改配置文件。
yum -y install zabbix-agent-3.2.1-1.el6.x86_64.rpm
vim /etc/zabbix/zabbix_agentd.conf
# 修改95行,指定zabbix服务器的IP或域名
Server=192.168.10.20
# 修改136行,指定主动方案中的zabbix服务器的IP或域名
ServerActive=192.168.10.20
# 修改147行,指定本机的主机名,此项必须与web界面配置项一致
Hostname=192.168.10.10
ps:注意两台机器的主机名!!!
安装apache服务,开启apache服务。
yum -y install httpd # 安装apache
echo "123" > /var/www/html/index.html # 填写网页内容
service httpd start # 启动服务
curl localhost # 访问测试
启动Zabbix-agent服务
service zabbix-agent start
netstat -antp | grep :10050
2.配置监控端
返回浏览器的监控端,开始配置自动发现。
配置动作
先创建动作,再配置自动发现。
配置→动作→选择自动发现→创建动作
配置动作
配置操作
点击添加,当动作条件满足,才能开始执行操作。
配置自动发现
配置→自动发现→创建自动发现规则
点击添加,完成配置。
ps:该过程困难较慢,需要等待一段时间。
3.查看自动发现的主机
检测中→自动发现
成功发现配置的被监控端
进入监控页面查看
成功触发动作,添加了两台主机。
四、Zabbix绑定钉钉进行报警提示
1.添加钉钉机器人
在钉钉工作群内创建智能机器人
邮件点击选择群设置
点击添加机器人,机器人设置如下。
勾选同意协议,完成设置。
点击完成设置
添加成功
2.配置告警脚本
vim /etc/zabbix/zabbix_server.conf
# 查看455行,查看Zabbix脚本存放目录或自行定义
AlertScriptsPath=/usr/lib/zabbix/alertscripts
cd /usr/lib/zabbix/alertscripts/
vim token.sh # 创建告警脚本
#!/bin/bash
to=$1
subject=$2
text=$3
curl 'https://oapi.dingtalk.com/robot/send?access_token=d84c01cc34d5b5443de7ca887e2f4184b0261e93c94429d70f7a390ac579b7d4' \ # 设置刚刚配置机器人的Wedhook
-H 'Content-Type: application/json' \
-d '
{"msgtype": "text",
"text": {
"content": "'"$text"'"
},
"at":{
"atMobiles": [
"'"$1"'"
],
"isAtAll": false
}
}'
保存退出,赋予脚本执行权限与用户群组权限。
chown zabbix.zabbix token.sh
chmod +x token.sh
测试脚本是否能与钉钉建立通信。
./token.sh 13221612875 aa
yajunxitou
钉钉成功接受到发送的信息
3.Zabbix绑定钉钉
创建报警媒介类型
管理→报警媒介类型→创建报警媒介
报警媒介配置
点击完成,报警媒介添加成功。
创建动作
配置→动作→触发器→创建动作
配置故障操作
默认接收人设置为
故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
默认信息设为
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件 ID:{EVENT.ID}
for yajunxitou
ps:最后一行为配置机器人时的安全设置的自定义关键词!
配置恢复操作
默认接收人设置为
恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!
默认信息设为
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件 ID:{EVENT.ID}
for yajunxitou
ps:最后一行为配置机器人时的安全设置的自定义关键词!
配置用户权限
管理→用户→Admin
点击报警媒介添加钉钉报警媒介
4.测试钉钉告警
关闭任意一台被监测主机的http服务(模拟故障)
service httpd stop
错误报警提示成功。
开启httpd服务(模拟修复)
service httpd start
本文于2020年11月25日由Vonmerlot整理成文。