文章目录
- 监控分类与选型
- Zabbix基本概念
- 安装Zabbix
-
- [安装Zabbix Server方法](#安装Zabbix Server方法)
- KylinV10SP3编译安装zabbix7.0
- [yum/apt安装Zabbix Server](#yum/apt安装Zabbix Server)
- 容器安装
-
- [Zabbix Server](#Zabbix Server)
- [Zabbix Agent2](#Zabbix Agent2)
- 添加主机
- zabbix_get工具
- 少量主机自定义监控Linux主机
- 添加多台主机自定义监控
- 监控失败
- 配置告警
监控分类与选型
| 监控分类 | 具体监控内容 | 对应核心工具 | 工具能力说明 |
|---|---|---|---|
| 硬件监控 | 1. 远程控制卡(Dell iDRAC、HP ILO、IBM IMM); 2. IPMI 监控(物理机温度、硬盘故障); 3. 路由器 / 交换机(端口、光衰)、打印机 | zabbix | 提供硬件设备预定义模板,支持 IPMI 协议采集物理设备状态 |
| 系统监控 | CPU、内存、硬盘使用率 / IO、系统负载、进程数、Kernel 参数 | zabbix、prometheus | zabbix:传统系统监控模板丰富;prometheus:适配容器化系统的轻量指标采集 |
| 服务监控 | Nginx、Apache、php-fpm、MySQL、Memcache、Redis、Tomcat、JVM、TCP 连接数 | zabbix、prometheus | zabbix:主流服务模板全覆盖;prometheus:通过专属 exporter 采集服务运行指标 |
| 性能监控 | 网站性能、服务器性能、数据库性能、存储性能 | zabbix、prometheus、skywalking | zabbix/prometheus:资源性能采集;skywalking:应用代码级性能追踪 |
| 日志监控 | 系统日志、应用访问 / 错误日志、服务运行日志 | ELK(采集存储)+ grafana | ELK 负责日志采集 / 检索;grafana 实现日志数据的可视化展示 |
| 安全监控 | 1. 用户登录数、passwd 文件变化、本地文件改动;2. WAF 攻击类型统计 | zabbix(自定义)+ ELK+grafana | zabbix 可监控文件变化;WAF 日志通过 ELK 采集后,grafana 展示攻击统计(需搭配专业安全工具) |
| 网络监控 | IP / 端口 / URL 可用性、ping 包、IDC 带宽 / 流量(入 / 出速率、使用率)、SMTP/POP3 | zabbix、prometheus | zabbix:网络设备 / 带宽监控模板;prometheus:通过网络 exporter 采集流量指标 |
| 中间件及基础设施监控 | 1. Web 容器(Tomcat、Jetty);2. 消息中间件(Kafka、RabbitMQ);3. 数据库 / 缓存(MySQL、Redis);4. 存储(NFS、Ceph) | prometheus、zabbix | prometheus:中间件专属 exporter 覆盖广;zabbix:部分中间件模板支持 |
| 应用层监控(APM) | 代码级性能、故障快速定位、应用状态追踪 | skywalking | 提供分布式链路追踪,实现应用代码级性能监控与故障定位 |
| 业务层监控 | QPS、DAU(日活)、转化率、订单量、登录 / 注册 / 支付接口数 | skywalking + prometheus/zabbix + grafana | skywalking 关联业务接口;prometheus/zabbix 采集业务指标;grafana 搭建业务监控大屏 |
Zabbix基本概念
zabbix介绍

用通俗易懂的话来说,Zabbix是一个监控系统,它可以帮助我们实时检查设备的状态,比如服务器、网络设备等。当设备出现问题时,它会及时通知我们,让我们可以采取措施来解决。同时,它还可以把收集到的数据转化成图表和报告,让我们更直观地了解设备的运行情况
zabbix功能
官方文档:https://www.zabbix.com/documentation/5.0/zh/manual/introduction/features
| 功能分类 | 核心功能说明 |
|---|---|
| 数据采集 | 采集历史 / 趋势数据;支持 SNMP/IPMI/JMX/VMware 等协议;自定义检查;按间隔采集;通过 Server/Proxy/Agents 执行 |
| 阈值与告警 | 灵活定义触发器(告警阈值);自定义告警通知(接收者 / 媒介 / 宏变量);自动操作(远程执行命令) |
| 可视化能力 | 实时图形;Web 监控(模拟鼠标点击查功能 / 响应);含自定义图表、拓扑图、仪表盘、报表、业务视图等可视化选项 |
| 历史数据存储 | 数据存于数据库;支持历史配置;内置数据管理机制 |
| 配置管理 | 添加主机即可采集数据;模板支持分组检查、模板关联继承 |
| 网络发现 | 自动发现网络设备;Agent 自动注册;自动发现文件系统 / 网络接口 / SNMP OIDs |
| Web 界面 | PHP 前端,支持异地访问;可自定义操作;含审计日志记录 |
| Zabbix API | 可编程接口,用于批量操作、第三方软件集成 |
| 权限管理 | 安全身份验证;按权限范围控制用户视图 |
| Zabbix Agent | 跨 Linux/Windows 部署;C 语言编写(高性能低内存);易移植 |
| 分布式监控 | 通过 Zabbix Proxy 实现分布式远程监控 |
zabbix架构(CS架构)
CS架构:(客户端 / 服务器)需安装专属客户端
BS 架构(浏览器 / 服务器)依赖浏览器访问

| 组件 / 模块 | 核心定位 | 关键特性 / 功能 |
|---|---|---|
| Zabbix Agent | 被监控端数据采集工具 | 部署在目标设备; 监控本地资源 / 应用; 向 Server 发送数据; 5.0 后支持 Agent2 版本 |
| Zabbix Server | Zabbix 核心中枢 | 接收 Agent 上报数据;存储配置 / 统计 / 操作信息; 作为告警中心发送异常通知; 功能分解为 Server、Web 前端、数据库三部分; 配置更改需 1-2 分钟同步(缓存机制) |
| 数据库 | 数据持久存储中心 | 存储所有配置信息和采集数据; 支持 MySQL、PostgreSQL 等多种数据库 |
| Web 界面 | 可视化配置与展示入口 | 属于 Server 一部分,可与 Server 分机部署; 基于 Apache (Nginx)+PHP;5.0 后支持 LNMP,早期仅支持 LAMP |
| 内部配置数据流 | 告警触发的核心逻辑链 | 配置顺序:主机→监控项→触发器→动作; 模板可简化操作;支持灵活配置自定义告警(如 CPU 负载过高通知) |
zabbix启动进程
| 进程类型(英文 / 中文) | 核心功能 | 适用范围 |
|---|---|---|
| alerter / 报警器 | 发送报警通知 | 服务器端 |
| configuration syncer / 配置同步器 | 将配置文件中的配置信息同步到内存缓存 | 服务器端 |
| data sender / 数据发送器 | 发送采集到的数据 | 仅代理端(服务器端无) |
| db watchdog / 数据库看门狗 | 监视数据库状态,数据库不可用时发送警告 | 仅服务器端(代理端无) |
| discoverer / 自动发现器 | 自动发现网络设备 | 服务器端 |
| escalator / 步骤处理器 | 处理动作中的相关步骤 | 服务器端 |
| heartbeat sender / 心跳发送器 | 发送心跳信息 | 仅代理端(服务器端无) |
| history syncer / 历史数据同步器 | 将采集数据写入历史数据表 | 服务器端 |
| housekeeper / 管家 | 清理过期的历史数据 | 服务器端 |
| http poller / HTTP 轮询器 | 轮询 Web 类型的监控项 | 服务器端 |
| icmp pinger / Ping 检查器 | 定期执行 ICMP PING 检查(监控设备连通性) | 服务器端 |
| ipmi poller / IPMI 轮询器 | 定期检查 IPMI 类型监控项 | 服务器端 |
| java poller / Java 轮询器 | 轮询 Java 类型监控项 | 服务器端 |
| node watcher / 分布式节点看守器 | 在分布式节点间同步历史数据和配置更新信息 | 服务器端(分布式场景) |
| poller / 轮询器 | 轮询普通被动监控项 | 服务器端 |
| proxy poller / 代理轮询器 | 轮询代理端的被动监控项 | 代理端 |
| self-monitoring / 自我监控 | 收集 Zabbix 系统内部的监控信息 | 服务器端 |
| timer / 定时器 | 处理触发器中时间相关函数,管理维护模式 | 服务器端 |
| trapper / 陷入器 | 处理主动采集数据、陷入数据,以及分布式节点 / 代理端的通信 | 服务器端 |
| unreachable poller / 不可到达轮询器 | 轮询已标记为 "不可到达" 的设备 | 服务器端 |
| vmware collector / VMware 收集器 | 从 VMware 服务进程中收集监控数据 | 仅服务器端(代理端无) |
zabbix术语

| 术语名称(含英文) | 核心定义 |
|---|---|
| 被监控 | Zabbix 监控的主机或设备 |
| 监控项(Item) | Zabbix 监控的具体指标,如 CPU 利用率、内存使用率、TCP 连接数等 |
| 应用集(Application) | 用于归类同类型监控项的集合,方便管理众多监控项 |
| Ping 检查器(icmp pinger) | 定期执行 ICMP PING 检查的组件 |
| ipmi 轮询器(ipmi poller) | 定期进行 ipmi 监控项目检查的组件 |
| java 轮询器(java poller) | 用于轮询 java 监控项目的组件 |
| 分布式节点看守器(node watcher) | 在不同分布式节点间发送历史数据和配置信息更新的进程 |
| 轮询器(poller) | 用于普通被动监控项目轮询的组件 |
| 服务器代理轮询(proxy poller) | 用于服务器代理被动轮询的组件 |
| 自我监控(self-monitoring) | 收集 Zabbix 系统内部监控信息的组件 |
| 定时器(timer) | 处理触发器中时间相关函数和维护模式的进程 |
| 陷入器(trapper) | 处理主动采集、陷入以及分布式节点间或服务器代理通信的组件 |
| 不可到达轮询器(unreachable poller) | 用于轮询不可到达设备的组件 |
| vmware 收集器(vmware collector) | 从 vmware 服务进程收集数据的组件(服务器代理端不支持) |
| mode 参数 | 可选值:avg(指定类型进程平均值)、count(指定类型进程数量)、max(最大值)、min(最小值) |
| state 参数 | 可选值:busy(繁忙状态进程)、idle(空闲状态进程) |
| 触发器(Trigger) | 触发告警的条件表达式(如磁盘利用率超过 80%),满足条件会产生触发事件 |
| 动作(Action) | 触发器触发后的响应行为,如发送短信 / 微信 / 邮件、重启服务等 |
| 告警 | 触发器与动作的结合机制,触发条件满足后执行预设响应,方便运维及时处理问题 |
| Web 监测 | 对 WEB 服务的检测,如验证指定网站是否可正常访问 |
| 模板(Template) | 包含监控项、应用集、触发器等实体的集合,可批量应用于多主机,支持嵌套继承,简化 Zabbix 配置 |
安装Zabbix
zabbix产品周期官方文档:https://www.zabbix.com/cn/life_cycle_and_release_policy
部署要求:https://www.zabbix.com/documentation/7.0/zh/manual/installation/requirements
安装Zabbix Server方法
KylinV10SP3编译安装zabbix7.0
官方文档:https://www.zabbix.com/documentation/7.0/zh/manual/installation/install
官方文档:zabbix7.0要求
搭建LNMP环境
- nginx 1.28
- mysql 8.4
- php 8.4
nginx1.28安装
shell
#1.添加nginx官方仓库源
cat > /etc/yum.repos.d/nginx.repo <<'EOF'
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/8/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/8/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
#2.安装nginx1.28(可以使用 yum provides nginx 来查看官方源有哪些nginx版本)
yum install -y nginx-1:1.28.0-1.el8.ngx.x86_64
#3.修改nginx用户为www
sed -i 's/user nginx;/user www;/g' /etc/nginx/nginx.conf
#4.创建www用户
groupadd -g 1999 www
useradd -u 1999 -g www -s /sbin/nologin www
#3.启动nginx
systemctl enable --now nginx.service && systemctl is-active nginx.service
#4.防火墙放行80端口
ss -tulnp |grep 80
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload
mysql8.4安装
shell
#1.下载mysql源
mkdir -p /download ;yum install -y wget && cd /download ; wget https://dev.mysql.com/get/mysql84-community-release-el7-2.noarch.rpm && yum localinstall -y mysql84-community-release-el7-2.noarch.rpm
#2.安装mysql
yum install -y mysql-community-server mysql-community-devel
#3.开启mysql
systemctl enable mysqld --now
#4.查看端口
ss -tulnp |grep 3306
#5.从日志中获取登录密码
grep -i password /var/log/mysqld.log
#6.登录mysql修改密码,登录密码就是日志中获取的登录密码,复制粘贴即可登录
mysql -uroot -p
#7.进入数据库后修改密码,不修改密码啥也做不了
alter user 'root'@'localhost' identified by 'Abc@1234';
exit;
#8.再次登录mysql,测试修改密码是否成功
mysql -uroot -pAbc@1234
安装php8.4
shell
#1.下载编译依赖
yum install -y re2c \
bison \
autoconf \
make \
libtool \
ccache \
libxml2-devel \
curl-devel \
openssl-devel \
bzip2-devel \
libcurl-devel \
libpng-devel \
libwebp-devel \
libjpeg-devel \
oniguruma-devel \
libzip-devel \
freetype-devel \
sqlite-devel \
gettext-devel \
wget
#2.下载php8.4编译包
wget https://www.php.net/distributions/php-8.4.14.tar.xz -P /download
#3.解压php8.4编译包
tar -Jxvf /download/php-8.4.14.tar.xz -C /download/
#4.进入编译目录编译
cd /download/php-8.4.14/
#5.编译前的配置,指定安装目录,和配置文件目录
./configure \
--prefix=/usr/local/php-8.4.14 \
--with-config-file-path=/usr/local/php-8.4.14/etc \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
--enable-mbstring \
--with-curl \
--with-openssl \
--with-zlib \
--with-mysqli \
--with-pdo-mysql \
--enable-gd \
--with-jpeg \
--with-webp \
--with-freetype \
--with-zip \
--with-gettext \
--with-bz2
#6.编译 源代码-->可执行文件(命令)
make -j `nproc` && echo $?
#7.安装 创建目录,复制文件
make install && echo $?
#8.添加软链接简化路径
ln -s /usr/local/php-8.4.14/ /usr/local/php
#9. 添加系统用户
useradd -r -M -s /sbin/nologin www
#10.将配置文件复制到正确的位置(很多情况下修改配置不生效就是配置文件地址没搞对)
#复制PHP配置文件
cp /download/php-8.4.14/php.ini-production /usr/local/php/etc/php.ini
#复制PHP-FPM配置文件
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
#11.配置环境变量
echo 'export PATH=${PATH}:/usr/local/php/bin:/usr/local/php/sbin' >> /etc/profile
source /etc/profile
#12.查看php版本号
php -m && php -v
#13.配置php服务启动文件
cat > /usr/lib/systemd/system/php-fpm.service <<'EOF'
[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target
[Service]
Type=simple
PIDFile=/usr/local/php/var/run/php-fpm.pid
ExecStart=/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target
EOF
#重新加载php服务配置文件并启动php服务器
systemctl daemon-reload
systemctl enable --now php-fpm
#查看服务状态
systemctl status php-fpm
Zabbix7部署
官方zabbix源码下载地址:Download Zabbix sources
shell
#0.编译依赖
yum install -y net-snmp-devel mysql-community-devel libevent-devel pcre-devel
#1.创建zabbix用户
groupadd -g 2000 zabbix
useradd -g zabbix -u 2000 -s /sbin/nologin zabbix
#2.下载源码包并解压到/download目录下
wget https://cdn.zabbix.com/zabbix/sources/stable/7.0/zabbix-7.0.21.tar.gz -P /download
tar -zxvf /download/zabbix-7.0.21.tar.gz -C /download/
cd /download/zabbix-7.0.21
#3.进入编译目录
##编译前的配置,指定安装目录,和配置文件目录
./configure \
--prefix=/usr/local/zabbix_server_7_21 \
--enable-server \
--enable-agent \
--with-mysql \
--with-net-snmp \
--with-libcurl \
--with-ssl
#选项说明
--prefix=/usr/local/zabbix_server_7_21 #指定安装目录
--enab1e-server #安装zabbix server
--enab1e-agent #启用zabbix agent
--enable-agent2 #启用zabbix agent2(需要go环境)
--enab1e-proxy #启用proxy的支持
--enable-java #启用java-gateway支持
--with-mysql #使用 MySQL 客户端库
--with-net-snmp #启用Net-SNMP包
--with-libcurl #启用curl包
--with-libxml #启用libxml2客户端库
--with-ssl #SSL 支持(加密传输)
##编译 源代码-->可执行文件(命令)
make -j `nproc` && echo $?
##安装 创建目录,复制文件
make install && echo $?
#4.添加软链接简化路径
ln -s /usr/local/zabbix_server_7_21/ /usr/local/zabbix
#5.设置zabbix安装目录属主和属组为zabbix
chown zabbix:zabbix -R /usr/local/zabbix_server_7_21/
#6.查看zabbix安装目录
[root@m03 /usr/local/zabbix]# tree /usr/local/zabbix
/usr/local/zabbix
├── bin #客户端工具
│ ├── zabbix_get
│ ├── zabbix_js
│ └── zabbix_sender
├── etc #主配置
│ ├── zabbix_agentd.conf
│ ├── zabbix_agentd.conf.d
│ ├── zabbix_server.conf
│ └── zabbix_server.conf.d
├── lib #扩展模块目录
│ └── modules
├── sbin #服务守护进程目录
│ ├── zabbix_agentd
│ └── zabbix_server
└── share #官方手册目录
├── man
│ ├── man1
│ │ ├── zabbix_get.1
│ │ └── zabbix_sender.1
│ └── man8
│ ├── zabbix_agentd.8
│ └── zabbix_server.8
└── zabbix
├── alertscripts
└── externalscripts
#7.配置数据库
mysql -uroot -pAbc@1234
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'Abc@1234';
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';
set global log_bin_trust_function_creators = 1;
FLUSH PRIVILEGES;
exit;
#8.导入初始架构和数据
##源码目录
cd /download/zabbix-7.0.21/database/mysql/
##导入数据
mysql -uzabbix -pAbc@1234 zabbix < schema.sql
mysql -uzabbix -pAbc@1234 zabbix < images.sql
mysql -uzabbix -pAbc@1234 zabbix < data.sql
#9.配置zabbix server
egrep -v '^($|#)' /usr/local/zabbix/etc/zabbix_server.conf
LogFile=/var/log/zabbix/zabbix_server.log #指定 Zabbix Server 日志文件路径
DBName=zabbix #指定 Zabbix Server 连接的 MySQL 数据库名
DBUser=zabbix #指定连接 MySQL 数据库的用户名
DBPassword=Abc@1234 #指定 MySQL 数据库用户的密码
Timeout=4 #通信超时时间(Server 与 Agent 通信超时,Server 与数据库通信超时,脚本 / 外部检查执行超时)
LogSlowQueries=3000 #记录慢 SQL 查询的阈值(单位:毫秒),Zabbix Server 执行的 SQL 语句超过该阈值时,会写入日志
StatsAllowedIP=127.0.0.1 #指定允许访问 Zabbix Server 统计信息(运行状态、进程、缓存、连接数等)的 IP 白名单
EnableGlobalScripts=0 #启用 / 禁用 Zabbix 的「全局脚本」功能(全局脚本是 Zabbix 中可被所有主机、监控项调用的脚本)
PidFile=/usr/local/zabbix/run/zabbix_server.pid #存储 Zabbix Server 主进程的 PID 号
Include=/usr/local/zabbix/etc/zabbix_server.conf.d/*.conf
#10.创建日志目录
mkdir /var/log/zabbix/
mkdir /usr/local/zabbix/run/
chown -R zabbix:zabbix /var/log/zabbix/
chown -R zabbix:zabbix /usr/local/zabbix/run/
#10.配置zabbix Agent
egrep -v '^($|#)' /usr/local/zabbix/etc/zabbix_agentd.conf
LogFile=/var/log/zabbix/zabbix_agentd.log
PidFile=/usr/local/zabbix/run/zabbix_agentd.pid
Server=127.0.0.1
ServerActive=127.0.0.1
Hostname=Zabbix server
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.conf
#11.配置zabbix server systemctl启动文件
cat > /lib/systemd/system/zabbix_server.service <<'EOF'
[Unit]
Description=Zabbix Server
After=syslog.target
After=network.target mysqld.service #设置依赖于mysqld 不设置重启zabbix会启动不了卡住
[Service]
Environment="CONFFILE=/usr/local/zabbix/etc/zabbix_server.conf"
EnvironmentFile=-/usr/local/zabbix
Type=forking
PIDFile=/usr/local/zabbix/run/zabbix_server.pid
ExecStart=/usr/local/zabbix/sbin/zabbix_server -c /usr/local/zabbix/etc/zabbix_server.conf
ExecStop=/usr/bin/kill $MAINPID
Restart=always
RestartSec=5
User=zabbix
Group=zabbix
[Install]
WantedBy=multi-user.target
EOF
#12.配置zabbix agent 启动文件
cat > /lib/systemd/system/zabbix_agent.service <<'EOF'
[Unit]
Description=Zabbix Agent
After=syslog.target
After=network.target mysqld.service #设置依赖于mysqld 不设置重启zabbix会启动不了卡住
[Service]
Environment="CONFFILE=/usr/local/zabbix/etc/zabbix_agentd.conf"
EnvironmentFile=-/usr/local/zabbix
Type=forking
PIDFile=/usr/local/zabbix/run/zabbix_agentd.pid
ExecStart=/usr/local/zabbix/sbin/zabbix_agentd -c /usr/local/zabbix/etc/zabbix_agentd.conf
ExecStop=/usr/bin/kill $MAINPID
Restart=always
RestartSec=5
User=zabbix
Group=zabbix
[Install]
WantedBy=multi-user.target
EOF
#13.启动zabbix server、zabbix agent
systemctl enable --now zabbix_server.service zabbix_agent.service
#14.配置web前端页面
cat > /etc/nginx/conf.d/zabbix.chenshiquan.xyz.conf <<'EOF'
server {
listen 80;
server_name zabbix.chenshiquan.xyz;
access_log /var/log/nginx/zabbix_access.log main;
error_log /var/log/nginx/zabbix_error.log notice;
root /app/code/zabbix/; # 实际站点目录
index index.php; # 默认首页
# 忽略 favicon.ico 不存在的日志
location = /favicon.ico {
log_not_found off;
}
# 静态资源默认匹配规则
location / {
try_files $uri $uri/ =404;
}
# 静态资源(assets目录)
location /assets {
access_log off;
expires 10d;
}
# 禁止访问 .htaccess 类文件
location ~ /\.ht {
deny all;
}
# 禁止访问敏感目录
location ~ /(api\/|conf[^\.]|include|locale) {
deny all;
return 404;
}
# 禁止访问 vendor 目录
location /vendor {
deny all;
return 404;
}
# PHP 脚本解析核心配置
location ~ [^/]\.php(/|$) {
#如果你使用的是 socket unix:/var/run/php-fpm/www.sock
fastcgi_pass 127.0.0.1:9000;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
fastcgi_param DOCUMENT_ROOT /app/code/zabbix;
fastcgi_param SCRIPT_FILENAME /app/code/zabbix$fastcgi_script_name;
fastcgi_param PATH_TRANSLATED /app/code/zabbix$fastcgi_script_name;
include fastcgi_params; # 加载 Nginx 内置 fastcgi 参数
# 传递核心请求参数
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
# PHP 连接/超时优化
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort off;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
}
EOF
##配置站点目录
mkdir -p /app/code/zabbix/
##复制源码包内的站点目录文件到/app/code/zabbix/
cp -rf /download/zabbix-7.0.21/ui/* /app/code/zabbix/
##将nginx站点目录属主和属组为www用户
chown -R www:www /app/code/zabbix/
#15.检查nginx语法,重新加载nginx配置文件
nginx -t
systemctl reload nginx
#16.配置zabbix命令环境变量
echo 'export PATH=${PATH}:/usr/local/zabbix/bin:/usr/local/zabbix/sbin' >> /etc/profile && source /etc/profile
访问zabbix web页面

修改php配置文件
shell
#1.在php.ini中修改相关内容改为要求的值
post_max_size = 16M #控制 POST 请求的最大数据量
max_execution_time = 300 #PHP 脚本的最大执行时间(秒)
max_input_time = 300 #接收请求数据的最大时间
#2.重启php服务
systemctl restart php-fpm


安装缺失的PHP扩展bcmath、sockets、ldap
- bcmath
shell
#1. 进入扩展源码目录
cd /download/php-8.4.14/ext/bcmath/
#2.生成编译配置(phpize)
/usr/local/php/bin/phpize
#3.配置编译参数并编译并安装
./configure --with-php-config=/usr/local/php/bin/php-config && echo $?
make && make install
#4.启用扩展(修改 php.ini)
echo "extension=bcmath.so" >> /usr/local/php/etc/php.ini
- sockets
shell
#1. 进入扩展源码目录
cd /download/php-8.4.14/ext/sockets/
#2.生成编译配置(phpize)
/usr/local/php/bin/phpize
#3.配置编译参数并编译并安装
./configure --with-php-config=/usr/local/php/bin/php-config && echo $?
make && make install
#4.启用扩展(修改 php.ini)
echo "extension=sockets.so" >> /usr/local/php/etc/php.ini
- ldap(可选)
用于连接 LDAP 服务器(如企业级用户认证、Active Directory 集成等场景),Zabbix 非必需,仅需 LDAP 认证时安装。
shell
#0.安装依赖
yum install -y openldap-devel
#1. 进入扩展源码目录
cd /download/php-8.4.14/ext/ldap/
#2.生成编译配置(phpize)
/usr/local/php/bin/phpize
#3.配置编译参数并编译并安装
./configure \
--with-php-config=/usr/local/php/bin/php-config
###若报错configure:error: Cannot find ldap libraries in /usr/lib
cp -frp /usr/lib64/libldap* /usr/lib/
make && make install
#4.启用扩展(修改 php.ini)
echo "extension=ldap.so" >> /usr/local/php/etc/php.ini
- 配置完重启php-fpm
shell
systemctl restart php-fpm && systemctl status php-fpm
再次刷新


数据库主机localhost不能连接数据库,127.0.0.1能连接数据库本质原因
- localhost是本地 socket 文件通信,要求 PHP 知道文件放在哪(socket 路径),但你没告诉 PHP 正确的路径,所以失败;
- 127.0.0.1 是TCP/IP 网络通信(端口 3306),要求 PHP 知道IP + 端口和授权
shell
#PHP 按配置的路径去找 mysql.sock 文件,但没找到
#1.原因 PHP 配置的 socket 路径和实际路径不一致
#重新编辑 php.ini
cat >> /usr/local/php-8.4.14/etc/php.ini <<EOF
mysql.default_socket = /var/lib/mysql/mysql.sock
mysqli.default_socket = /var/lib/mysql/mysql.sock
pdo_mysql.default_socket = /var/lib/mysql/mysql.sock
EOF
#2.检查语法,重新加载php-fpm
php-fpm -t
systemctl reload php-fpm
zabbix Agent
shell
#1.安装客户端agent
yum install -y https://mirrors.aliyun.com/zabbix/zabbix/7.0/rhel/7/x86_64/zabbix-agent-7.0.21-release2.el7.x86_64.rpm
#2.修改zabbix_agent配置文件
egrep -v '^($|#)' /etc/zabbix/zabbix_agentd.conf
#修改如下内容
PidFile=/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=172.16.1.118
ServerActive=127.0.0.1
Hostname=Zabbix server
Include=/etc/zabbix/zabbix_agentd.d/*.conf
#3.开启zabbix_agent并开机自启
systemctl enable --now zabbix-agent.service
#4.查看客户端agent端口是否开放
ss -tulnp |grep 10050 |wc -l
添加主机
参考下文
编译参考文章:
yum/apt安装Zabbix Server
官方包仓库:https://repo.zabbix.com/
阿里云镜像源:https://mirrors.aliyun.com/zabbix/
清华镜像源:https://mirrors.tuna.tsinghua.edu.cn/zabbix/
相关二进制包介绍
shell
zabbix-server-mysql #Zabbix Server服务器包
zabbix-frontend-php #Zabbix 前端Web服务包,本质为LAP
abbix-apache-conf #Zabbix 前端Web服务配置包,本质为LAP
zabbix-agent #Zabbix 客户端包
zabbix-agent2 #Zabbix 客户端包
zabbix-get #Zabbix 服务测试包
Zabbix Server
Ubuntu2204安装mysql
shell
#1.下载mysql仓库源
wget https://dev.mysql.com/get/mysql-apt-config_0.8.36-1_all.deb
#2.安装mysql仓库源
dpkg -i mysql-apt-config_0.8.36-1_all.deb
#3.更新索引
apt update
#4.安装mysql并开启
apt install mysql-server -y && systemctl enable mysql --now
#5.登陆mysql
mysql -uroot -pAbc@1234
#创建zabbix库
create database zabbix character set utf8mb4 collate utf8mb4_bin;
#创建zabbix用户
create user zabbix@localhost identified by 'Abc@1234';
##查看用户是否创建成功
SELECT user, host FROM mysql.user;
#将zabbix库授权给zabbix用户
grant all privileges on zabbix.* to zabbix@localhost;
##查看是否授权成功
SELECT user, host FROM mysql.user WHERE user = 'zabbix';
#允许在开启二进制日志的环境中,创建/修改存储函数、存储过程或触发器
set global log_bin_trust_function_creators = 1;
Ubuntu2204安装
shell
#1.下载ubuntu2204 Zabbix7 阿里源仓库
wget https://mirrors.aliyun.com/zabbix/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu22.04_all.deb
#2.下载zabbix7 仓库源
dpkg -i zabbix-release_latest_7.0+ubuntu22.04_all.deb
#3.更新索引
apt update
#4.安装Zabbix server,Web前端,agent2
apt install -y zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2 zabbix-get
#5.导入初始架构和数据,系统将提示您输入zabbix用户的密码
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
#6.导入数据库模式后关闭log_bin_trust_function_creators选项
mysql -uroot -pAbc@1234 -e "set global log_bin_trust_function_creators = 0;"
#7.为Zabbix server配置数据库
#编辑配置文件 /etc/zabbix/zabbix_server.conf
sed -i 's/# DBPassword=/DBPassword=Abc@1234/g' /etc/zabbix/zabbix_server.conf
#8.为Zabbix配置前端
#编辑配置文件 /etc/zabbix/nginx.conf
listen 80;
server_name zabbix.chenshiquan.xyz;
#9.安装中文包
apt install language-pack-zh-hans language-pack-zh-hans-base
locale -a | grep zh_CN
#10.启动Zabbix server、zabbix-agent2、php、nginx
systemctl enable zabbix-server nginx php8.1-fpm zabbix-agent2
systemctl restart zabbix-server nginx php8.1-fpm zabbix-agent2
windows hosts解析,10.0.0.118 zabbix.chenshiquan.xyz
浏览器访问zabbix,chenshiquan.xyz
默认登陆账号 Admin 密码 zabbix


Zabbix Agent2
Ubuntu2204安装
shell
#1.安装Zabbix 阿里源仓库
wget https://mirrors.aliyun.com/zabbix/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu22.04_all.deb
dpkg -i zabbix-release_latest_7.0+ubuntu22.04_all.deb
apt update
#2.下载Zabbix agent2
apt install -y zabbix-agent2
#2.修改配置文件Server行
egrep -v '^($|#)' /etc/zabbix/zabbix_agent2.conf
###输出如下
PidFile=/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
#172.16.1.138 是zabbix服务IP
Server=172.16.1.138
ServerActive=127.0.0.1
Hostname=Zabbix server
Include=/etc/zabbix/zabbix_agent2.d/*.conf
PluginSocket=/run/zabbix/agent.plugin.sock
ControlSocket=/run/zabbix/agent.sock
Include=/etc/zabbix/zabbix_agent2.d/plugins.d/*.conf
#3.启动或重启
systemctl enable --now zabbix-agent2.service
#4.检查端口
ss -tulnp |grep zabbix
添加主机
参考下文
乱码和不能选中文
乱码
当前系统有些监控项部分显示有乱码,是由于web界面显示为中文但是系统没有相关字体,因此需要准备相关字体文件才能正常显示



shell
#1.Zabbix 前端的字体资源目录
[root@m03 /usr/share/zabbix/assets/fonts]# ll /usr/share/zabbix/assets/fonts/
total 11708
drwxr-xr-x 2 root root 144 Nov 28 11:01 ./
drwxr-xr-x 5 root root 44 Nov 28 09:59 ../
lrwxrwxrwx 1 root root 38 Nov 28 10:00 graphfont.ttf -> /etc/alternatives/zabbix-frontend-font
-rw-r--r-- 1 root root 11787328 May 6 2022 simkai.ttf #上传的字体资源
-rw-r--r-- 1 root root 149851 Nov 3 18:51 zabbix-icons.svg
-rw-r--r-- 1 root root 22072 Nov 3 18:51 zabbix-icons.ttf
-rw-r--r-- 1 root root 11716 Nov 3 18:51 zabbix-icons.woff
-rw-r--r-- 1 root root 9756 Nov 3 18:51 zabbix-icons.woff2
#2.修改Zabbix 前端配置文件
sed -i.bak 's/graphfont/simkai/g' /usr/share/zabbix/include/defines.inc.php
#3.修改完成再次刷新

不能选中文
安装zh_CN语言包
shell
#红帽系列
dnf install langpacks-zh_CN.noarch
#ubuntu系列
apt install language-pack-zh-hans language-pack-zh-hans-base
安装glibc-common实现对语言包的识别
shell
dnf reinstall glibc-common
测试安装是否成功,如果看到zh_CN语言已安装,则表示成功
shell
locale -a | grep zh_CN
安装完成后,回到web页面刷新,可以看到中文语言已可以选中
容器安装
Zabbix Server
shell
#1.拉取镜像
docker pull zabbix/zabbix-web-nginx-mysql:7.0.9-ubuntu
docker pull zabbix/zabbix-server-mysql:7.0.9-ubuntu
docker pull zabbix/zabbix-java-gateway:7.0.9-ubuntu
docker pull zabbix/zabbix-proxy-mysql:7.0.9-ubuntu
docker pull mysql:8.0-debian
#2.编写docker-compose.yaml
cat > docker-compose.yml <<'EOF'
#version: "3.8"
services:
db:
image: mysql:8.0-debian
container_name: zbx_db
networks:
- zabbix_net
restart: always
volumes:
- ./zbx_db/:/var/lib/mysql/
environment:
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
MYSQL_DATABASE: "${MYSQL_DATABASE}"
MYSQL_USER: "${MYSQL_USER}"
MYSQL_PASSWORD: "${MYSQL_PASSWORD}"
command:
- --character-set-server=utf8
- --collation-server=utf8_bin
- --default-authentication-plugin=mysql_native_password
zbx_server:
image: zabbix/zabbix-server-mysql:7.0.9-ubuntu
container_name: zabbix-server-mysql-7.0
networks:
- zabbix_net
restart: always
ports:
- 10051:10051
depends_on:
- db
environment:
DB_SERVER_HOST: "db"
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
MYSQL_DATABASE: "${MYSQL_DATABASE}"
MYSQL_USER: "${MYSQL_USER}"
MYSQL_PASSWORD: "${MYSQL_PASSWORD}"
zbx_web:
image: zabbix/zabbix-web-nginx-mysql:7.0.9-ubuntu
container_name: zabbix-web-nginx-mysql
networks:
- zabbix_net
restart: always
ports:
- 80:8080
depends_on:
- db
- zbx_server
environment:
ZBX_SERVER_HOST: "zbx_server"
DB_SERVER_HOST: "db"
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
MYSQL_DATABASE: "${MYSQL_DATABASE}"
MYSQL_USER: "${MYSQL_USER}"
MYSQL_PASSWORD: "${MYSQL_PASSWORD}"
networks:
zabbix_net:
driver: bridge
ipam:
config:
- subnet: 172.100.0.0/16
ip_range: 172.100.1.0/24
gateway: 172.100.1.1
EOF
#3.编写变量文件
cat > .env <<EOF
MYSQL_ROOT_PASSWORD=Abc@1234
MYSQL_DATABASE=zabbix
MYSQL_USER=zabbix
MYSQL_PASSWORD=Abc@1234
EOF
#4.启动docker-compose.yaml
docker-compose up -d
浏览器访问
用户名:Admin
密码:zabbix

Zabbix Agent2
shell
#1.安装客户端
yum install -y https://mirrors.aliyun.com/zabbix/zabbix/7.0/rhel/7/x86_64/zabbix-agent2-7.0.16-release1.el7.x86_64.rpm
#2.修改配置文件Server行
egrep -v '^($|#)' /etc/zabbix/zabbix_agent2.conf
###输出如下
PidFile=/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
#172.100.1.0/24 是容器指定的网段
#172.16.1.118 是zabbix服务IP
Server=172.100.1.0/24,172.16.1.118
ServerActive=127.0.0.1
Hostname=Zabbix server
Include=/etc/zabbix/zabbix_agent2.d/*.conf
PluginSocket=/run/zabbix/agent.plugin.sock
ControlSocket=/run/zabbix/agent.sock
Include=/etc/zabbix/zabbix_agent2.d/plugins.d/*.conf
#3.启动或重启
systemctl enable --now zabbix-agent2.service
#4.检查端口
ss -tulnp |grep zabbix
#5.测试
docker exec -it zabbix-server-mysql-7.0 bash
zabbix_get -s 172.16.1.118 -k system.hostname
添加主机
参考上文
zabbix_get工具
官方文档:https://www.zabbix.com/documentation/7.0/zh/manpages/zabbix_get
zabbix_get工具测试zabbix Agent是否正常
| 参数 | 全称 | 说明 | 示例 |
|---|---|---|---|
| -s | --host | 必选:Zabbix Agent 的 IP 或主机名(需能被当前机器访问) | -s 192.168.1.100 |
| -k | --key | 必选:监控项键值(系统内置 / 自定义,含参数需写完整) | -k custom.port.check[80] 或 -k system.cpu.load[all,avg1] |
| -p | --port | 可选:Agent 监听端口(默认 10050,Agent2 默认 10050) | -p 10050 |
| -I | --source-address | 可选:指定本地出口 IP(多网卡场景用) | -I 192.168.1.200 |
| -t | --timeout | 可选:超时时间(默认 3 秒,单位秒) | -t 10(超时 10 秒) |
| -r | --raw | 可选:显示原始数据(不截断换行符,适合多行返回的监控项) | -r -k custom.log.get[/var/log/messages] |
| -z | --server-port | 可选:Zabbix Server 端口(仅主动式 Agent 场景用,默认 10051) | -z 10051 |
| -x | --debug | 可选:调试模式(输出通信细节,排查连接 / 权限问题) | -x -s 192.168.1.100 -k custom.port.check[80] |
| -h | --help | 可选:查看帮助信息 | zabbix_get -h |
| -V | --version | 可选:查看版本 | zabbix_get -V |
少量主机自定义监控Linux主机
添加主机
图形化操作
监测->主机->创建主机

配置主机

如下是新添加的主机

在zabbix_server测试能否获取客户端数据
shell
#1.获取主机名
zabbix_get -s 172.16.1.102 -k system.hostname
#2.获取内核信息
zabbix_get -s 172.16.1.102 -k system.uname
再次刷新zabbix页面,可用性变为绿色

自定义监控------监控项
监控僵尸进程数量
命令行操作
shell
#1.获取僵尸进程的命令
top -bn1 | awk 'NR==2{print $(NF-1)}'
#2.添加客户端子配置文件/etc/zabbix/zabbix_agent2.d/sys.conf
cat > /etc/zabbix/zabbix_agent2.d/sys.conf <<EOF
UserParameter=proc.zombie,top -bn1 | awk 'NR==2{print $(NF-1)}'
EOF
#3.重启agent2
systemctl restart zabbix-agent2.service
#4.服务端使用zabbix_get命令测试
zabbix_get -s 172.16.1.102 -k proc.zombie
图形化页面操作
数据采集->主机->选择nfs01主机添加监控项

选择创建监控项

配置监控项
带※是必填项

查看监控项的最新数据
监测->最新数据->选择要查看的主机->监控项名称


监控用户是否从JumpServer登陆(传参)
shell
#1.编写脚本传参
cat > /server/scripts/jmp_server.sh <<'EOF'
#!/bin/bash
user=$1
jumpserver_ip=$2
login_user=`lastlog | awk 'NR==1{print $3}'`
if [ ${login_user} = "${jumpserver_ip}" ];then
echo 1
else
echo 0
fi
EOF
#2.修改sys.conf子配置文件
cat > /etc/zabbix/zabbix_agent2.d/sys.conf <<EOF
UserParameter=proc.zombie,top -bn1 | awk 'NR==2{print $(NF-1)}'
UserParameter=user.jumpserver.login[*],sudo bash /server/scripts/jmp_server.sh $1 $2
EOF
#3.重启agent2
systemctl restart zabbix-agent2.service
自定义监控------触发器
-
监控项获取到的数值是否反映着系统异常
-
触发器触发后一般会进行告警操作(邮件,微信,OA)
图形化操作步骤
点击nfs01添加触发器

点击右上角创建触发器

配置触发器,配置完成点添加

自定义监控---------图形
图形化操作
数据采集->主机->选择要创建图形的主机,点击图形->创建图形

自定义监控------模版
图形化操作
数据采集->模板->创建模板,输出模板名称,新建模板组


- 新模板默认没有内容,点击
数据采集->主机->将之前创建主机的监控项、触发器、图形都复制给新建的模板



将zabbix server关联刚创建的模板



此时模板还是不能用的

需要在zabbix server添加键值才可以(添加键值操作可以查看上文),添加完键值后

添加多台主机自定义监控
Ansible批量安装zabbix Agent并分发键值
Ansible(安装、相关文件、命令、常用模块)_ansible命令-CSDN博客
shell
#1.编写playbook
cat > install.yaml <<EOF
- hosts: all
tasks:
- name: "0.清除缓存"
shell: yum clean packages
when: ansible_distribution is match("Kylin")
- name: "1.Kylin安装zabbix客户端agent"
yum:
name: https://mirrors.aliyun.com/zabbix/zabbix/7.0/rhel/7/x86_64/zabbix-agent-7.0.21-release2.el7.x86_64.rpm
disable_gpg_check: yes
state: present
when: ansible_distribution is match("Kylin")
- name: "0.清除缓存"
shell: yum clean packages
when: ansible_distribution is match("Rocky")
- name: "1.Rocky 安装zabbix客户端agent"
yum:
name: https://mirrors.aliyun.com/zabbix/zabbix/7.0/rocky/9/x86_64/zabbix-agent-7.0.21-release2.el9.x86_64.rpm
disable_gpg_check: yes
state: present
when: ansible_distribution is match("Rocky")
- name: "0.Ubuntu下载 Zabbix Agent源"
get_url:
url: "https://mirrors.aliyun.com/zabbix/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu22.04_all.deb"
dest: "/tmp/zabbix-release.deb"
when: ansible_distribution is match("Ubuntu")
- name: "1.ubuntu安装zabbix客户端agent源"
apt:
deb: "/tmp/zabbix-release.deb"
state: present
update_cache: true
when: ansible_distribution is match("Ubuntu")
- name: "1.5ubuntu安装zabbix客户端agent"
apt:
name: zabbix-agent
state: present
when: ansible_distribution is match("Ubuntu")
- name: "2.修改zabbix客户端文件"
lineinfile:
path: /etc/zabbix/zabbix_agentd.conf
regexp: "^Server="
line: "Server=172.16.1.118"
state: present
#添加分发键值内容
- name: "3.分发自定义监控键值"
copy:
src: sys.conf
dest: /etc/zabbix/zabbix_agentd.d/sys.conf
when: ansible_distribution is match("Kylin|Rocky")
- name: "Ubuntu3.分发自定义监控键值"
copy:
src: sys.conf
dest: /etc/zabbix/zabbix_agentd.conf.d/
when: ansible_distribution is match("Ubuntu")
- name: "4.开启zabbix客户端"
systemd:
name: zabbix-agent.service
enabled: true
daemon_reload: true
state: restarted
EOF
#2.运行playbook
ansible-playbook install.yaml
####注意防火墙放行10050端口
自动发现
| 发现方法 | 说明 | 应用场景 |
|---|---|---|
| 自动发现 | 服务端主动扫描指定的网段添加主机 (安装客户端,修改配置文件。) 配置简单,zbx 自动发现有很多监控。 | 一般,不经常的添加机器 |
| 自动注册 | 客户端主动连接服务端提交信息注册。 | 经常,频繁添加. |
- anible批量部署客户端+配置文件+启动或重启
- 目标:web前端页面如何批量自动化添加主机,关联模板,启动主机
配置自动发现规则
图形化操作
- 点击步骤:
数据采集->自动发现->修改默认的自动发现规则

- 配置:
配置自动发现规则

- 查看已经被监测的主机:
点击监测->自动发现

配置发现动作
- 配置发现动作:
告警->动作->发现动作,配置默认的发现动作

配置默认的发现动作,接收到的值就是自动发现规则的检查功能

操作

循环添加ubuntu、rocky系统

查看主机群组


自动注册
自动注册,主要是Agent主动向zabbix server注册;
自动注册主要分为两个步骤:
-
自动注册,客户端必须开启主动模式,并设定主机名
-
在zabbix web的告警-->动作-->自动注册动作,创建一个动作
-
需要防火墙开放10051端口
shell
Server=<Zabbix Server IP>
ServerActive=<Zabbix Server IP> #客户端主动模式是实现自动注册的前提条件
Hostname=<agent IP>
#HostnameItem=system.hostname
HostMetadata==<key> #非必须项,可以做为添加主机的验证标识和分类,或者实现加入主机的验证功能
HostMetadataItem=<监控项Item> #非必须项,监控项的值可以做为添加主机的验证标识和分类
#需要的改的项目
Hostname=客户端IP
Server=172.16.1.118
ServerActive=172.16.1.118
HostMetadataItem=system.uname #元数据键值
Ansible批量修改zabbix agent配置文件并分发键值
shell
cat > install.yaml <<EOF
- hosts: all
tasks:
- name: "0.清除缓存"
shell: yum clean packages
when: ansible_distribution is match("Kylin")
- name: "1.Kylin|Centos安装zabbix客户端agent"
yum:
name: https://mirrors.aliyun.com/zabbix/zabbix/7.0/rhel/7/x86_64/zabbix-agent-7.0.21-release2.el7.x86_64.rpm
disable_gpg_check: yes
state: present
when: ansible_distribution is match("Kylin")
- name: "0.清除缓存"
shell: yum clean packages
when: ansible_distribution is match("Rocky")
- name: "1.Rocky 安装zabbix客户端agent"
yum:
name: https://mirrors.aliyun.com/zabbix/zabbix/7.0/rocky/9/x86_64/zabbix-agent-7.0.21-release2.el9.x86_64.rpm
disable_gpg_check: yes
state: present
when: ansible_distribution is match("Rocky")
- name: "0.Ubuntu下载 Zabbix Agent源"
get_url:
url: "https://mirrors.aliyun.com/zabbix/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu22.04_all.deb"
dest: "/tmp/zabbix-release.deb"
when: ansible_distribution is match("Ubuntu")
- name: "1.ubuntu安装zabbix客户端agent源"
apt:
deb: "/tmp/zabbix-release.deb"
state: present
update_cache: true
when: ansible_distribution is match("Ubuntu")
- name: "1.5ubuntu安装zabbix客户端agent"
apt:
name: zabbix-agent
state: present
when: ansible_distribution is match("Ubuntu")
- name: "2.1修改zabbix客户端文件Server"
lineinfile:
path: /etc/zabbix/zabbix_agentd.conf
regexp: "^Server="
line: "Server=172.16.1.118"
state: present
- name: "2.2修改zabbix客户端文件ServerActive"
lineinfile:
path: /etc/zabbix/zabbix_agentd.conf
regexp: "^ServerActive="
line: "ServerActive=172.16.1.118"
state: present
- name: "2.3修改zabbix客户端文件Hostname"
lineinfile:
path: /etc/zabbix/zabbix_agentd.conf
regexp: "^Hostname"
line: "Hostname={{ ansible_ens34.ipv4.address }}"
state: present
when: ansible_distribution is match("Kylin|Ubuntu")
- name: "2.4修改zabbix客户端文件Hostname"
lineinfile:
path: /etc/zabbix/zabbix_agentd.conf
regexp: "^Hostname"
line: "Hostname={{ ansible_ens192.ipv4.address }}"
state: present
when: ansible_distribution is match("Rocky")
- name: "2.5修改zabbix客户端文件"
lineinfile:
path: /etc/zabbix/zabbix_agentd.conf
regexp: "^# HostMetadataItem="
line: "HostMetadataItem=system.uname"
state: present
- name: "3.开启zabbix客户端"
systemd:
name: zabbix-agent.service
enabled: true
daemon_reload: true
state: restarted
EOF
配置自动注册动作
图形化操作
配置自动注册动作

元数据包括4.19就添加主机设置主机群组为kylin,添加模板


如法炮制创建ubuntu、rocky

再次查看主机

监控失败
- zabbix_get连接到这个节点(测试内置键值,测试自定义键值)
shell
zabbix_get -s 172.16.1.102 -k system.hostname
- 命令或脚本执行时间过长 默认不超过3秒
- 用户与权限问题
shell
#1. zabbix客户端修改用户root
#2. 配置sudo权限 zabbix ALL=(ALL) NOPASSWD: ALL
配置告警
| 报警媒介类型 | 对应方案 | 应用场景说明 |
|---|---|---|
| 发邮件 | 企业邮箱 | 用企业邮箱,免费使用 |
| 企业微信报警应用(机器人) | 机器人 | 需使用企业微信,免费 |
| OA 系统(钉钉、飞书等) | 机器人 | 关联阿里云,免费 |
| 短信接口(短信网关) | - | 收费,阿里云短信约 0.045 元 / 条 |
| 电话接口 | - | 收费 |
| 第三方工具 onealert(告警) | 配置平台信息 | 免费(有限制),收费;需配置该平台信息,对应网址https://aiops.com/ |
| 云监控与告警 | - | - |
邮件告警
全流程
- 个人邮箱/企业邮箱
- 开启个人邮箱 smtp功能 获取授权码
- 发件人:配置zabbix 报警媒介类型
- 收件人:配置 用户 接收报警
- 发件条件:配置触发器(trigger)动作(条件判断)
(1)个人邮箱准备
获取邮箱授权码
(2)配置发件人
配置发件人-报警媒介,修改默认的报警媒介




shell
##问题模板
故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
告警主机:{HOSTNAME1}
告警地址:{HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
##恢复模板
恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!
告警主机:{HOSTNAME1}
告警地址:{HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
(3)配置用户的报警媒介




(4)配置触发器动作

可以配置触发哪些警报发送给哪些用户

(5)制造故障
shell
#1.制造僵尸进程
cat > zombie.c <<'EOF'
#include <sys/types.h>
#include <sys/wait.h>
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
/*
* desc: 用于模拟僵尸进程.代码. oldboyedu.com
*
*/
int main(int argc, char *argv[])
{
pid_t pid;
pid = fork();
if (pid == 0) {
int iPid = (int)getpid();
fprintf(stderr,"I am child,%d\n",iPid);
sleep(1);
fprintf(stderr, "Child exits\n");
return EXIT_SUCCESS;
}
int iPid = (int)getpid();
fprintf(stderr,"I am parent,%d\n",iPid);
fprintf(stderr, "sleep....\n");
sleep(600);
fprintf(stderr, "parent exits\n");
return EXIT_SUCCESS;
}
EOF
#2.编译为二进制文件
gcc zombie.c -o zombie
###后台执行
nohup ./zombie &
#3.恢复
pkill zombie



企业微信告警
微信API参考文档:https://developer.work.weixin.qq.com/document/path/91039
-
微信报警,短信,电话,钉钉(OA) 自定义脚本报警
-
通过脚本(py,shell),调用对方api接口(输入接口需要的信息,访问与使用api接口)
-
方法:
- 复杂:添加企业机器人(全局),获取企业id,机器人的id,key,secret,域名,备案,访问机器人的IP
- 简单:在企业微信(OA)的群里,添加机器人,通过机器人的api接口+token令牌
流程
- 企业微信创建群组,设置消息推送
- 使用脚本(shell/python)调用群组中机器人的API接口:信息
- 发件人:报警媒介(告警机器人)
- 收件人:个人 媒体类型
- 动作:已经完成
(1)企业微信创建群组
略
(2)使用脚本调用群组中机器人的API接口信息
python脚本
shell
#!/usr/bin/python3
# -*- coding: utf-8 -*-
#author: oldboyedu
#desc: 调用企业微信群中机器人进行发送消息
#desc: 调用钉钉机器人进行发送消息
#desc: 调用各种OA系统的群机器人(webhook)方式 通用的
#导入python 函数库(包)
#request http请求(curl/wget命令)
import requests
import json
#sys 系统功能函数库
import sys
# 机器人的webhook地址 群里添加群机器人后可以获取
#支持企业微信,钉钉,飞书.
WEBHOOK_URL = "api"
# HTTP请求头部信息
HEADERS = {
'Content-Type': 'application/json;charset=utf-8'
}
# 定义发送消息的函数
def send_msg(text):
#text变量就是要传输的数据.
# 构建消息体
texts = {
"msgtype": "text",
"text": {
"content": text
}
}
# 发送HTTP POST请求
response = requests.post(WEBHOOK_URL, json=texts, headers=HEADERS)
# 打印响应内容(一般用于调试)
print(response.content)
# 如果该文件被直接执行,则从命令行接收一个参数并将其发送到机器人的webhook地址
if __name__ == '__main__':
# $# -ne 2
if len(sys.argv) != 2:
print("Usage: python3 all_app_webhook.py <text>")
sys.exit(1)
text = sys.argv[1] # 获取命令行参数 $1
send_msg(text) # 发送消息
shell脚本
shell
#!/bin/bash
# -*- coding: utf-8 -*-
# author: oldboyedu
# desc: 调用企业微信群中机器人进行发送消息
# desc: 调用钉钉机器人进行发送消息
# desc: 调用各种OA系统的群机器人(webhook)方式 通用的
# 机器人的webhook地址 群里添加群机器人后可以获取
# 支持企业微信,钉钉,飞书
WEBHOOK_URL="api接口"
# 定义发送消息的函数
send_msg() {
local text="$1"
# 构建JSON消息体
local json_data=$(jq -n \
--arg msgtype "text" \
--arg content "$text" \
'{msgtype: $msgtype, text: {content: $content}}')
# 发送HTTP POST请求(使用curl替代requests)
curl -s -X POST \
-H "Content-Type: application/json;charset=utf-8" \
-d "$json_data" \
"$WEBHOOK_URL"
}
# 主程序入口
if [ $# -ne 1 ]; then
echo "Usage: bash all_app_webhook.sh <text>"
exit 1
fi
# 获取命令行参数并发送消息
text="$1"
send_msg "$text"
# 打印换行(优化输出格式)
echo
(3)配置告警媒介
shell
#1.脚本放置位置
/usr/local/zabbix/share/zabbix/alertscripts/



(4)配置用户的报警媒介




(5)设置触发器动作(发送至媒体类型)



(6)制造故障
