Linux运维6.2——监控平台zabbix
本次serevr1和server2应用rocky9.6,server3应用CentOS 7
ZABBIX
基础概念
基础定位
Zabbix 是一款开源免费、企业级分布式运维监控系统,由 Alexei Vladishev 开发,主打服务器、网络设备、中间件、数据库、业务服务全方位指标采集、监控告警、可视化大屏、历史数据存储,运维领域主流老牌监控方案,适配中小集群到大型分布式 IDC 环境。
核心特点
- 完全开源免费,无授权费用,社区生态完善;
- 支持多采集方式、自定义监控项、灵活触发器告警;
- 内置 Web 可视化、图形、报表、拓扑图、自动发现;
- 兼容 Linux/Windows/ 网络交换机、路由器、MySQL/Nginx/Redis 等几乎所有 IT 资源。
经典五大核心组件
| 组件 | 作用说明 | 部署位置 |
|---|---|---|
| Zabbix Server | 核心调度中心:接收采集数据、判断触发器阈值、生成告警、下发配置、写入数据库 | 监控服务端(独立服务器) |
| Zabbix Agent | 客户端采集程序,本地主动采集 CPU、内存、磁盘、端口、进程、日志等指标 | 被监控主机(Linux/Windows) |
| Zabbix Database | 持久化存储监控历史数据、配置、告警记录,主流搭配MySQL 8.0、PostgreSQL | 服务端配套数据库 |
| Zabbix Web UI | 可视化管理后台,浏览器配置监控项、看图表、处理告警、主机管理、大屏展示 | Nginx/Apache+PHP 运行 |
| Zabbix Proxy | 分布式代理节点,大批量跨机房、跨地域环境分流采集压力,代理收集数据统一上报 Server | 各地机房中转服务器 |
两种 Agent 工作模式
- 被动模式(默认):Server 定时主动连接 Agent 拉取监控数据;
- 主动模式:Agent 主动定时上报数据给 Server,大规模主机场景减轻 Server 网络压力,推荐集群使用。
主流数据采集方式
- Agent 采集(最常用):主机本地部署 agent,精准采集系统层指标;
- SNMP:监控交换机、防火墙、路由器等网络硬件设备;
- JMX:监控 Java 应用(Tomcat、SpringBoot、JVM 堆内存、线程数);
- SSH/Telnet:远程执行命令抓取指标(无 agent 临时监控);
- HTTP/Agent 脚本:自定义 Shell/Python 脚本抓取业务接口、日志、中间件指标;
- Zabbix Sender:业务程序主动推送自定义指标(业务埋点上报);
- VMware API:对接虚拟化平台,监控虚拟机、宿主机资源。
核心工作流程
- Server 下发监控配置 → Agent 按周期采集指标;
- 数据上传至 Server,入库保存历史数据;
- **触发器(Trigger)**预设阈值规则(示例:CPU 使用率连续 5 分钟>90%);
- 触发阈值异常 → 生成事件,执行告警动作;
- 运维人员在 Web 查看告警、图形,故障恢复后自动关闭告警。
告警渠道
邮件、钉钉、企业微信、短信、电话、Webhook 对接运维平台、脚本执行(故障自动自愈脚本重启服务)。
常用核心概念
- 主机组 Host groups:对服务器分类(Web 组、数据库组、网络设备组);
- 监控项 Item:单一采集指标(空闲内存、根分区使用率、80 端口监听状态);
- 模板 Template:批量打包监控项、触发器、图形,一键套用至多台同类型主机(Nginx 模板、MySQL 模板);
- 触发器 Trigger:判定正常 / 异常的阈值规则;
- 动作 Action:告警触发后执行操作(发通知、执行自愈脚本);
- 图形 Graph:指标时序曲线图,观察负载波动;
- 自动发现 Discovery:网段扫描自动发现新服务器,自动挂载监控模板,免手动一台台添加主机。
典型部署架构
- 单机架构:Server+Web+MySQL 部署同一台服务器,几十台以内小规模环境;
- 主从分离架构:数据库独立部署,提升 IO 性能;
- 分布式 Proxy 架构:多机房部署 Proxy 代理,各自采集本机房数据汇总至中心 Server,适合上百台以上大规模集群;
- 高可用架构:搭配 Keepalived 做 Server 双机 VIP 漂移、数据库 MGR 主从、数据库分表优化解决海量历史数据性能瓶颈。
优缺点
优点
- 免费开源、社区文档丰富,运维上手门槛适中;
- 覆盖系统、网络、数据库、应用全场景监控;
- 高度自定义,脚本扩展能力极强;
- 稳定成熟,大量传统企业、云内部署;
缺点
- 海量监控数据长期堆积 MySQL 会性能下降,需定期分表、清理历史数据;
- 原生界面可视化美观度不如 Prometheus+Grafana;
- 云原生容器监控原生适配较弱,容器场景一般搭配 Prometheus。
部署服务器
server1配置
安装ZABBIX
安装官网https://www.zabbix.com/cn/download?zabbix=6.0&os_distribution=rocky_linux&os_version=9&components=server_frontend_agent&db=mysql&ws=apache
在线下载并安装 Zabbix‑6.0 的 yum 源配置包
# rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/9/x86_64/zabbix-release-latest-6.0.el9.noarch.rpm
安装Zabbix server,Web前端,agent
# dnf install zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent
创建初始数据库
# yum install -y mysql.server
# yum install -y zabbix-get
登录mysql并创建数据库
# mysql -uroot -p
password(可直接回车跳过)
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
mysql> create user zabbix@localhost identified by 'password';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> set global log_bin_trust_function_creators = 1;
mysql> quit;
log_bin_trust_function_creators = 0(默认值)严格校验:创建函数必须持有
SUPER权限,防止不安全函数写入 binlog 造成主从数据不一致。
log_bin_trust_function_creators = 1放弃权限校验:信任所有普通用户创建的函数,不会再强制要求
SUPER权限,MySQL 会默认开发者保证函数具备确定性(入参一致则返回结果固定),可以正常记录 binlog,不会拦截建函数语句。
导入初始架构和数据
# zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
#输入密码,这里为"password"
完整执行流程
- zcat 读取压缩包内 server.sql,解压输出全部 SQL 语句;
- 通过管道交给 mysql 客户端;
- 使用 zabbix 用户连接 MySQL,连接字符集锁定 utf8mb4;
- 在 zabbix 数据库中逐条执行 SQL:创建数据表、主键、索引、初始化基础数据;
- 执行完毕后数据库就具备 Zabbix 运行所需完整表结构。
导入数据库架构之后,关闭 log_bin_trust_function_creators 参数。
# mysql -uroot -p
password
mysql> set global log_bin_trust_function_creators = 0;
mysql> quit;
配置数据库
# vim /etc/zabbix/zabbix_server.conf
...
DBPassword=password
...
启动进程
# systemctl restart zabbix-server zabbix-agent httpd php-fpm
# systemctl enable zabbix-server zabbix-agent httpd php-fpm
打开Zabbix的网址UI页面http://192.168.***/zabbix
前端

然后点击下一步,填写信息即可,一直到提示前端安装成功。此时会自动跳转到登录前端页面,登陆即可。管理员用户和密码:Admin/zabbix
前端页面汉化,将文件下载并拖入虚拟机中

拷贝字体文件
cp simkai.ttf /usr/share/zabbix/assets/fonts
cd /usr/share/zabbix/assets/fonts
重做软连接
rm -f graphfont.ttf
ln -s simkai.ttf graphfont.ttf
server2配置
设置yum源
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-latest-5.0.el7.noarch.rpm
安装zabbix-agent
yum install -y zabbix-agent
修改配置文件
vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.234.161 #zabbix server1的ip
ServerActive=192.168.234.161
Hostname=server2 #agent自己的主机名

启动服务
systemctl enable --now zabbix-agent
查看监听端口
netstat -antlp|grep :10050

server3——centos系统
安装yum源
# rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-latest-6.0.el7.noarch.rpm
# yum clean all
安装前端zabbix-agent
yum install zabbix-agent
启动服务
# systemctl restart zabbix-agent
# systemctl enable zabbix-agent
web前端操作
添加主机
登陆以后选择配置—>主机,右上角的创建主机即可进行添加

此时可在server1查看相关信息
zabbix_get -s 192.168.234.162 -p 10050 -k 'agent.ping'
zabbix_get -s 192.168.234.162 -p 10050 -k 'system.hostname'


添加监控项
配置——主机

按需求配置监控项


添加图形
配置——主机——图形——创建图形
按需创建

查看server2的监控数据

添加触发项

添加触发的警告条件和恢复的结果即可

触发的问题解决后会显示已解决

添加通知媒介
管理——媒介——email


按需输入邮箱密码,密码为所用邮箱授权码

配置完成后进行测试,收到测试邮箱

在用户一栏配置报警媒介,,类型选Email,这样监控的服务器发送警报会发送给邮箱

然后在触发动作里启用服务


制造负载过高
[root@server2 ~]# md5sum /dev/zero &

负载解决
[root@server2 ~]# fg %1
md5sum /dev/zero
^C

可以看到动作里两封信息均送达

添加用户

填入对应信息即可

权限可以在用户所在的用户群组进行更改配置,智能admin管理用户才可以修改

添加模板
配置——模板——创建模板

填入新建模板信息,创建后发现模板并无信息数据

可进行复制

选择要复制到的模板

此时发现模板已有内容

自动发现
删除server2
开启自动发现动作

开始自动发现服务

在监测——自动发现里观察

此时serevr2重新加入

自动发现注册
再次删除server2,停用自动发现服务,创建自动注册动作

根据需求修改条件标签

按需求增加操作

如果要用主机元数据进行添加需要修改主机配置文件
[root@server2 ~]# vim /etc/zabbix/zabbix_agentd.conf
...
HostMetadataItem=system.uname
...
[root@server2 ~]# systemctl restart zabbix-agent.service

此时发现server2已经重新连接

链接nginx
[root@server2 ~]# yum install -y nginx
[root@server2 ~]# vim /etc/nginx/nginx.conf
...
location /basic_status {
stub_status on;
access_log off;
}
...
[root@server2 ~]# systemctl enable --now nginx

此时浏览server2的网页

在web端更改server2的链接模板

mysql服务监控
[root@server2 ~]# yum install -y mysql-server.x86_64
[root@server2 ~]# systemctl enable --now mysqld
[root@server2 ~]# cd /usr/share/doc/zabbix-agent/
[root@server2 zabbix-agent]# cp userparameter_mysql.conf /etc/zabbix/zabbix_agentd.d/
[root@server2 zabbix-agent]# systemctl restart zabbix-agent
[root@server2 zabbix-agent]# mysql
...
mysql> CREATE USER 'zbx_monitor'@'%' IDENTIFIED BY 'password';
mysql> GRANT REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO 'zbx_monitor'@'%';
mysql> quit;
[root@server2 zabbix-agent]# mkdir /var/lib/zabbix
[root@server2 zabbix-agent]# cd /var/lib/zabbix
[root@server2 zabbix]# vim my.cnf
...
[client]
protocol=tc
user='zbx_monitor'
password='password'
...
[root@server2 zabbix]# systemctl restart mysqld.service
web端添加mysql模板

percona数据库模板
安装软件
rpm -ivh percona-zabbix-templates-1.1.8-1.noarch.rpm
拷贝模板
cd /var/lib/zabbix/percona/templates
cp userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/
重启服务
systemctl restart zabbix-agent
修改配置
cd /var/lib/zabbix/percona/scripts
vim ss_get_mysql_stats.php
$mysql_user = 'root'; #数据库管理员用户密码
$mysql_pass = 'westos';
创建软连接
ln -s /opt/rh/rh-php72/root/usr/bin/php /usr/bin/
测试
su -s /bin/sh -c "/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg" zabbix

导入模板

主机关联模板

tomcat服务
定位
Tomcat = 轻量级开源 Web 应用服务器(Servlet 容器)
-
归属:Apache 旗下开源软件,用 Java 语言开发;
-
核心身份:专门用来跑 Java Web 项目(War 包),不能直接跑 PHP、Python、Go 这类程序;
-
区分两个概念:
-
Web 服务器(Nginx/Apache):只处理静态资源(html、图片、css)、反向代理、负载均衡;
-
Tomcat(Servlet 容器)
:解析 Java 动态代码(Servlet、JSP、SpringBoot Web),执行业务逻辑。
日常架构大多:
Nginx(前端分发) → Tomcat(后端Java业务)
-
核心核心作用
-
承载 Java Web 规范
实现了 Java EE 里的 Servlet、JSP、Filter、Listener 核心规范,浏览器发来 HTTP 请求,Tomcat 接收请求,调用你的 Java 代码处理逻辑,再把结果返回浏览器。
-
管理 Web 应用生命周期
部署 war 包放进
webapps目录,Tomcat 自动解压、加载、启动项目;服务启停、热加载、上下文销毁全部由 Tomcat 托管。
-
内置简易 HTTP 服务
本身自带基础 HTTP 监听(默认 8080 端口),不搭配 Nginx 也可以直接对外提供访问。
关键核心组件(层级结构)
| 组件 | 作用 |
|---|---|
| Server | 整个 Tomcat 服务实例,一个进程就是一个 Server,全局总控制器 |
| Service | 一套监听端口 + 处理引擎的组合,默认只有 1 个 Service(Catalina) |
| Connector连接器 | 监听网络端口(默认 8080),接收浏览器 TCP 请求,解析 HTTP 协议,把请求转发给 Engine;支持 HTTP、AJP 协议(AJP 一般用于和 Apache 对接) |
| Engine引擎 | Service 内部的总处理引擎,接收 Connector 的请求,分发到对应的虚拟主机 Host |
| Host 虚拟主机 | 绑定域名 / IP,一台 Tomcat 可以配置多个 Host,同时部署多个不同域名的网站 |
| Context 上下文 | 单个具体的 Java Web 项目,一个 war 包对应一个 Context,控制单个项目的启动、权限、资源路径 |
服务端
安装jmx
yum install zabbix-java-gateway
systemctl enable --now zabbix-java-gateway
查看端口
netstat -antlp|grep :10052

配置zabbix server
vim /etc/zabbix/zabbix_server.conf
...
JavaGateway=192.168.0.88 #jmx服务所在主机地址
JavaGatewayPort=10052
StartJavaPollers=5
...

重启服务
systemctl restart zabbix-server
agent
——centos server3为例
yum install java-1.8.0-openjdk
tar zxf apache-tomcat-8.5.24.tar.gz -C /usr/local/
cd /usr/local/
ln -s apache-tomcat-8.5.24/ tomcat
cd tomcat/
修改配置
修改配置
vim bin/catalina.sh
...
CATALINA_OPTS='-Dcom.sun.management.jmxremote.port=8888
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false'

注意:
tomcat9.0配置 需要添加换行符
CATALINA_OPTS='-Dcom.sun.management.jmxremote.port=8888 \
-Dcom.sun.management.jmxremote.rmi.port=8889 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false'
添加主机名解析
vim /etc/hosts
...
192.168.234.163 server3 #修改为主机agent的主机ip
启动服务
/usr/local/tomcat/bin/shutdown.sh #关闭服务
/usr/local/tomcat/bin/startup.sh #启动服务
查看端口
netstat -antlp|grep :8888
添加jmx接口

添加jmx模板

监测server3主机发现jmx启动

集成外部告警
前提:注册睿象云账号获取appkey
安装探针
[root@server1 ~]# cd /usr/lib/zabbix/alertscripts/ #路径不一定相同
[root@server1 alertscripts]# wget https://download.aiops.com/ca_agent/zabbix/ca_zabbix_release-4.0.3.tar.gz
解压缩
[root@server1 alertscripts]# tar zxf ca_zabbix_release-4.0.3.tar.gz
[root@server1 alertscripts]# cd cloudalert/bin
输入zabbix访问url,以及管理员用户帐号以及密码Admin/zabbix
./install.sh 80521b7c-eb16-46d8-a0fd-6a621f4938e4 #需要替换为自己创建的appkey

成功

此时zabbix的url里触发器动作以及媒介等都会增加相关内容

此时停掉server2的agent服务,网站收到告警

绑定的微信公众号也收到给告警

Zabbix api
获取token
[root@server1 ~]# vim zabbix-api.sh
...
curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "Admin",
"password": "zabbix"
},
"id": 1,
"auth": null
}' http://192.168.234.161/zabbix/api_jsonrpc.php | python -m json.tool
...
[root@server1 ~]# chmod +x zabbix-api.sh
[root@server1 ~]# ./zabbix-api.sh

获取主机列表
[root@server1 ~]# vim zabbix-api.sh
...
curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": [
"hostid",
"host"
],
"selectInterfaces": [
"interfaceid",
"ip"
]
},
"id": 2,
"auth": "55ae3f5421c87867cb6ceb375d075c64" #填写上面获取的token
}' http://192.168.234.161/zabbix/api_jsonrpc.php | python -m json.tool
...

[root@server1 ~]# ./zabbix-api.sh

删除主机
[root@server1 ~]# vim zabbix-api.sh
...
curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "host.delete",
"params": [
"10444" #填写上面指令获取的主机ID
],
"auth": "55ae3f5421c87867cb6ceb375d075c64",
"id": 1
}' http://192.168.234.161/zabbix/api_jsonrpc.php | python -m json.tool
...
添加主机
[root@server1 ~]# vim zabbix-api.sh
...
curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "server3", #主机名称,与agent设置一致
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "192.168.234.163", #agent主机IP
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "2" #主机组ID
}
],
"tags": [
{
"tag": "Host name",
"value": "Linux server"
}
],
"templates": [
{
"templateid": "10001" #模板ID
}
]
},
"id": 1,
"auth": "55ae3f5421c87867cb6ceb375d075c64"
}' http://192.168.234.161/zabbix/api_jsonrpc.php | python -m json.tool
...
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)