1 服务监控
1.1 Linux服务监控
在 agent 1 安装 nginx,开启 nginx 状态统计页面
[root@server2 ~]# yum install -y nginx[root@server2 ~]# nginx[root@server2 ~]# vim /etc/nginx/nginx.conf#开启nginx状态统计页面,并关闭这个页面的访问日志,减少日志垃圾[root@server2 ~]# nginx -t[root@server2 ~]# nginx -s reload
测试:访问 nginx 状态接口,输出连接、请求统计信息,供 zabbix 抓取做 nginx 监控accepts:nginx 总共接收到的客户端连接数handled:成功处理完成的连接(一般和 accepts 相等)requests:总共收到的 HTTP 请求总数Reading:正在读取请求的连接Writing:正在返回响应给客户端的连接Waiting:空闲等待的长连接
主机清除之前手动复制的模板,关联 nginx 服务监控模板
系统抓取到数据后即可查看
1.2 mysql 基础监控(Zabbix 原生模板)
[root@server2 ~]# yum install -y mysql-server[root@server2 ~]# systemctl enable --now mysqld[root@server2 ~]# mysqlmysql>CREATEUSER'zbx_monitor'@'%'IDENTIFIED BY'westos';mysql>GRANT REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO'zbx_monitor'@'%';#创建专用监控用户 zbx_monitor,授予监控需要的权限,用来查看进程、复制状态、库视图信息mysql>quit[root@server2 ~]# cp /usr/share/doc/zabbix-agent/userparameter_mysql.conf /etc/zabbix/zabbix_agentd.d/[root@server2 ~]# systemctl restart zabbix-agent[root@server2 ~]# cd /etc/zabbix/zabbix_agentd.d/[root@server2 zabbix_agentd.d]# mkdir /var/lib/zabbix[root@server2 zabbix_agentd.d]# vim /var/lib/zabbix/.my.cnf# agent 调用 mysql 命令时自动读取账号密码主机关联 mysql 服务监控模板
系统抓取到数据后即可查看
1.3 mysql 深度监控(Percona 插件)
1.3.1 CentOS 7
Percona 插件是 zabbix 的 mysql 增强监控脚本,采集比 zabbix 自带模板更多数据库性能指标,尤其适合监控主从复制、缓冲池、慢查询。
先导入Percona模板
将 Percona 提供的 zabbix mysql 监控模板 rpm 安装包放入根下
[root@server3 ~]# rpm -ivh percona-zabbix-templates-1.1.8-1.noarch.rpm[root@server3 ~]# cd /var/lib/zabbix/percona/templates[root@server3 templates]# cp userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/#将percona自定义监控key配置拷贝到zabbix agent配置目录,agent才会加载这些监控项[root@server3 templates]# systemctl restart zabbix-agent.service[root@server3 templates]# yum install -y php php-mysql#安装php环境,percona采集脚本ss_get_mysql_stats.php是php编写,依赖php[root@server3 templates]# yum install -y mariadb-server[root@server3 templates]# systemctl enable --now mariadb.service[root@server3 templates]# mysqlMariaDB[(none)]>grant all on *.* to root@'localhost'identified by'westos';#给root@localhost授权所有权限,设置密码westos,供php采集脚本连接数据库MariaDB[(none)]>quit[root@server3 templates]# cd /var/lib/zabbix/percona/scripts/[root@server3 scripts]# vim ss_get_mysql_stats.php#修改php采集脚本,填入数据库账号密码,脚本靠这个账号查询mysql性能数据[root@server3 scripts]# cd /etc/zabbix/zabbix_agentd.d/[root@server3 zabbix_agentd.d]# vim userparameter_percona_mysql.conf
UserParameter=监控key名,脚本路径 参数代号gg、os、ij、running‑slave都是脚本内部预定义的指标代号,不同代号对应 MySQL 不同性能项。
gg 代表:Open‑files MySQL 打开文件数。
[root@server3 zabbix_agentd.d]# su -s /bin/sh -c "/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg" zabbix#单独测试【Open‑files 打开文件数】这个指标能不能拿到数值,有数字输出,说明脚本正常[root@server3 zabbix_agentd.d]# cd /tmp/[root@server3 tmp]# ll#脚本会把采集的临时数据缓存写到/tmp下,此文件的属主和属组必须是 zabbix
主机关联Percona模板
系统抓取到数据后即可查看
1.3.2 Rocky Linux
因为兼容性问题,其他操作与在CentOS 7里类似,只是要将原有的ss_get_mysql_stats.php文件里的部分内容替换掉
[root@server2 ~]# yum install -y php php-mysqlnd[root@server2 ~]# rpm -ivh percona-zabbix-templates-1.1.8-1.noarch.rpm[root@server2 ~]# cd /var/lib/zabbix/percona/templates[root@server2 templates]# cp userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/[root@server2 templates]# systemctl restart zabbix-agent[root@server2 templates]# cd /var/lib/zabbix/percona/scripts[root@server2 scripts]# rm -f ss_get_mysql_stats.php#删除原有版本,将修改过的脚本上传到此目录下[root@server2 scripts]# chmod +x ss_get_mysql_stats.php[root@server2 scripts]# su - zabbix -s /bin/sh -c "/usr/bin/php -q /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php --host localhost --items gg"gg:0给server2添加模板即可使用
1.4 tomcat 服务监控
Tomcat 是Java程序,它暴露内部指标靠JMX接口。zabbix‑server 和 agent 本身是 C 语言写的,没有 JMX 客户端能力,不能直接连 JMX 端口拿数据。zabbix‑java‑gateway 是 Java 写的,专门充当 JMX 客户端,能调用Java JMX API去连接 Tomcat 的 JMX 端口拿数据。
java‑gateway 部署在 zabbix‑server 端,不在被监控的 Tomcat 机器上;被监控端 Tomcat 只需要开启 JMX 远程端口,不需要装 gateway。
zabbix‑agent 只管普通系统指标(CPU、磁盘、进程);JMX 类型监控项不走 agent,完全走 java‑gateway 这条链路。
完整数据流向
- Tomcat 启动时,增加 JMX 启动参数,开启 JMX 远程监听端口,对外暴露 Java 内部指标。
- Zabbix‑Server 需要获取 JMX 监控项数据,内部 JavaPollers 线程去请求部署在 zabbix‑server 本机的 zabbix‑java‑gateway(10052 端口),zabbix‑server 不会直接访问 Tomcat 的 JMX 端口,而是将 JMX 采集任务转发给 java‑gateway。
- java‑gateway 作为 JMX 客户端,网络访问 Tomcat 的 JMX 端口,抓取数据。
- gateway 把拿到的数据回传给 zabbix‑server,存入数据库,web 页面展示。
配置zabbix server
[root@server1 ~]# yum install -y zabbix-java-gateway[root@server1 ~]# systemctl enable --now zabbix-java-gateway.service[root@server1 ~]# vim /etc/zabbix/zabbix_server.conf# 1.指定zabbix‑java‑gateway服务所在主机IP,告诉zabbix‑server去哪里找 java 网关# 2.zabbix‑java‑gateway 默认监听端口为10052# 3.开启5个Java采集线程,向java‑gateway下发JMX采集任务,数值越大并发采集JMX监控项越多[root@server1 ~]# systemctl restart zabbix-server.service
agent 2上部署 tomcat 服务
[root@server3 ~]# tar zxf apache-tomcat-9.0.120.tar.gz -C /usr/local[root@server3 local]# ln -s apache-tomcat-9.0.120/ tomcat[root@server3 local]# cd /usr/local/tomcat/bin[root@server3 bin]# vim catalina.sh开启 JMX 远程监听端口 8888;
关闭 JMX 通信 SSL 加密,实验环境简化调试;
关闭 JMX 身份账号密码校验。任何能连通 8888 端口的主机,都可以直接读取全部 JVM、Tomcat 指标,不需要用户名密码。
执行 Tomcat 启动脚本,读取配置参数,启动 Tomcat 进程。
[root@server3 bin]# /usr/local/tomcat/bin/startup.sh
给server3添加 JMX 接口
关联 Java JMX 模板
JMX 部分显示绿色, java‑gateway 可以连通 Tomcat JMX 端口
2 集成外部告警
使用睿象云 CA 智能告警平台,zabbix 用睿象云 Agent 探针对接睿象云。
在 zabbix‑server 安装探针,自动读取 zabbix 告警数据。
添加zabbix告警,右侧有配置步骤
注意:步骤一的脚本目录可能有所不同,需要在zabbix-server端的/etc/zabbix/zabbix_server.conf查找告警脚本目录
我查找到的路径为/usr/lib/zabbix/alertscripts
在此目录下安装探针
[root@server1 ~]# cd /usr/lib/zabbix/alertscripts[root@server1 alertscripts]# yum install -y wget[root@server1 alertscripts]# wget https://download.aiops.com/ca_agent/zabbix/ca_zabbix_release-4.0.5.tar.gz[root@server1 alertscripts]# yum install -y tar[root@server1 alertscripts]# tar zxf ca_zabbix_release-4.0.5.tar.gz[root@server1 alertscripts]# chown -R zabbix:zabbix cloudalert/#保证运行zabbix服务的权限和cloudalert探针目录的权限保持一致,不一致会导致告警无法正常接入[root@server1 alertscripts]# cd cloudalert/bin/[root@server1 bin]# ./install.sh 561063389842448191a1ba8d1c8a35be
探针安装好后,管理媒介会自动启用
自动创建用户群组和用户
自动创建触发器动作,且自动停用其他的
测试
在睿象云设置告警通知策略
停止一台 zabbix‑agent 客户端服务,模拟故障
[root@server2 ~]# systemctl stop zabbix-agentzabbix 监控到异常,并且自动发邮件通知
睿象云平台也出现告警,认领此告警
详情中可以看到已经分配给我,正在处理中
恢复服务,解决问题
[root@server2 ~]# systemctl start zabbix-agentzabbix 监控界面显示问题已解决,恢复邮件也已发送
睿象云告警关闭
3 zabbix api
Zabbix API 是 Zabbix Web 前端自带功能,不需要额外安装服务。
通过程序 / 脚本,远程操作 Zabbix,代替手动网页点鼠标。
作用:
- 配置管理:批量创建 / 删除 / 修改主机、监控项、触发器、模板、主机组
- 数据读取:获取监控历史数据、获取告警事件(故障)
- 第三方对接:对接睿象云、钉钉、运维平台;读取告警推送外部系统
- 自动化:自动发现主机后调用 API 批量添加监控,脚本化运维
3.1 获取token
token 是 Zabbix API 登录成功后返回的临时身份凭证(临时钥匙)
作用:
- 避免反复传递账号密码
第一次调用user.login提交用户名密码,拿到 token。后面每一次 API 请求,只携带 token,不再重复发送账号密码,减少密码泄露风险。 - 身份校验权限
Zabbix 收到 API 请求,检查 token 是否有效。
token有效:就按照这个账号的权限,允许查数据、改配置。
token无效 / 过期:直接拒绝请求,报错。 - 临时生效
token 有存活时间,一段时间不用就失效。失效之后,必须重新执行user.login获取新 token。 - 代表登录会话
人在网页登录 Zabbix,浏览器会保存会话;
脚本程序没有浏览器,就靠 token 来代表 “已经登录的状态”。
[root@server1 ~]# vim zabbix-api.sh[root@server1 ~]# sh zabbix-api.sh返回的即为token值
3.2 获取主机列表
[root@server1 ~]# vim zabbix-api.sh填写刚刚获取的token值
[root@server1 ~]# sh zabbix-api.sh3.3 删除主机
[root@server1 ~]# vim zabbix-api.sh[root@server1 ~]# sh zabbix-api.sh
此时监控页面的server2已经被删除
3.4 添加主机
添加主机需要设置添加到哪个群组,以及关联哪个模板,需要提前查询对应的id
[root@server1 ~]# vim zabbix-api.sh[root@server1 ~]# sh zabbix-api.sh
显示server2已经存在,回到前端网页,server2确实已经存在,且链接到我们自定义的模板,原因是我们的自动注册功能未停
停用自动注册功能,删除server2,重新执行脚本
server2重新加入