Zabbix监控开篇
5571 字
28 分钟
Zabbix监控开篇

Zabbix监控开篇
[TOC]
初认知
- 什么是监控:对操作系统进行不间断的实时监测
- 为什么要监控:
- 是软件生命周期中的关键环节
- 实现“事前告警”,事后可基于监控数据快速定位问题
- 避免因监控不到位导致恶性循环
- → 项目流产 → 公司倒闭、资金链断裂等严重后果
如何去监控?监控什么内容?
- 基础设施层:硬件(CPU、内存、磁盘
df -h、free、磁盘 IO、网络) - 软件服务层:端口、进程、服务状态
- 业务层:业务数据、注册/充值用户、日志、数据库指标;
- 支持自定义监控与订单量等关键业务指标
- 接口层:业务系统间调用监控(如用
curl检测 API 可用性)
监控有哪些工具?
- 主推 Zabbix(强调“万物皆可监控”)
版本选择
-
网址👆--->下载安装 ==源码==
- 用长期稳定版本
6.0- 版本适配性更强✅️
- ==Zabbix 7.0 LTS==
- 支持的数据库版本范围如下: - 最低版本: MySQL 8.0.30 - 支持范围: MySQL 8.0.30 至 9.0.x

image-20260409164425761 - 用长期稳定版本
-
👆==产品手册== ---> 包含
4.05.06.07.0
image-20260409125813159
mysql安装
- 👆是==链接==
如果是生产环境:8.0.36 是目前公认的==“黄金版本”==

# 因为我这里用的是Rocky10'操作系统比较新--->MySQL有变更'依旧是8.0.36版本--->但它是el9'如果你的Linux版本是7或者8请下载el8的版本'[root@Zabbix ~]# cd /server/tmp/[root@Zabbix ~]# llmysql-8.0.36-1.el9.x86_64.rpm-bundle.tarzabbix-6.0.45.tar.gz
1)安装&&解压[root@Zabbix tmp]# tar -xf zabbix-6.0.45.tar.gz -C /soft/# zabbix解压至/soft目录下[root@Zabbix tmp]# tar -xf mysql-8.0.36-1.el9.x86_64.rpm-bundle.tar# MySQL原地解压'正常的解压出来--->rpm包'✅ 总结: RPM 包 = 安装程序,不是运行依赖 安装完即可删除,不影响 MySQL 服务# 有依赖关系,按照顺序去安装!
2)下载'最好是一个个的安装,不然太快的话,它反应不过来!'# 1. 基础依赖和公共文件mysql-community-common-8.0.36-1.el9.x86_64.rpmmysql-community-icu-data-files-8.0.36-1.el9.x86_64.rpm
# 2. 库文件 (Libraries)⚠️注意:如果提示与 mariadb-libs 冲突,需先卸载 ❌️mariadbmysql-community-libs-8.0.36-1.el9.x86_64.rpm
# 3. 客户端插件mysql-community-client-plugins-8.0.36-1.el9.x86_64.rpm
# 4. 客户端核心mysql-community-client-8.0.36-1.el9.x86_64.rpm
# 5. 服务端程序mysql-community-server-8.0.36-1.el9.x86_64.rpm
# 6. 开发包 (可选,但建议安装以支持编译依赖)mysql-community-devel-8.0.36-1.el9.x86_64.rpm# 其他 debuginfo 和 test 包可按需安装
[root@Zabbix tmp]# mysql --versionmysql Ver 8.0.36 for Linux on x86_64dnf install -y \mysql-community-common-8.0.36-1.el9.x86_64.rpm \mysql-community-icu-data-files-8.0.36-1.el9.x86_64.rpm \mysql-community-libs-8.0.36-1.el9.x86_64.rpm \mysql-community-client-plugins-8.0.36-1.el9.x86_64.rpm \mysql-community-client-8.0.36-1.el9.x86_64.rpm \mysql-community-server-8.0.36-1.el9.x86_64.rpm \mysql-community-devel-8.0.36-1.el9.x86_64.rpmTip
- 在 Xshell 中按住
Alt键--->随意选中==矩形块==

[root@Zabbix tmp]# rm -rf ./*# 剩下的安装包删除了[root@Zabbix tmp]# cd[root@Zabbix ~]#
3)启动[root@Zabbix ~]# systemctl enable --now mysqld
4)查看密码[root@Zabbix ~]# cat /var/log/mysqld.log | grep root@local# 通过日志查看本地root密码2026-04-09T05:33:36.875032Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: pq4zsgik?*Ea
5)登录&&基本设置[root@Zabbix ~]# mysql -uroot -p'pq4zsgik?*Ea''密码用单引号引一下'--->防止特殊字符Welcome to the MySQL monitor.Server version: 8.0.36mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Oldboy123.com';# 必须先修改root的密码!---->然后才能修改密码策略'大写的O'密码策略比较严格!mysql> SET GLOBAL validate_password.length = 6;# 修改密码的最小长度策略mysql> SET GLOBAL validate_password.policy = 0;# 密码的强度等级策略0,就是最低的那一档mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'passwd';# 重新修改本地root密码为passwd
6)数据库和用户的创建mysql> create database zabbix character set utf8 collate utf8_bin;# 创建数据库并指定字符集mysql> create user 'zabbix'@'localhost' identified by 'passwd';# 创建用户&&设置密码mysql> ALTER USER 'zabbix'@'localhost' IDENTIFIED WITH mysql_native_password by 'passwd';'后面一定要给密码!'# 指定认证插件&&并重新给密码# 因为有些旧的软件不支持默认的新插件# 将用户的认证方式“降级”为老版--->这样旧软件就能正常连接数据库了mysql> grant all privileges on zabbix.* to 'zabbix'@'localhost' ;# 授权,把zabbix库的所有表,都给它管mysql> SET GLOBAL log_bin_trust_function_creators = 1;# 这会允许普通用户创建函数和触发器mysql> FLUSH PRIVILEGES;# 最后可以刷新一下mysql> exitBye
7)导入数据[root@Zabbix mysql]# pwd/soft/zabbix-6.0.45/database/mysql[root@Zabbix mysql]# lltotal 20916-rw-rw-r-- 1 1000 1000 19240269 Mar 10 15:48 data.sql-rw-rw-r-- 1 1000 1000 1978341 Mar 10 15:47 images.sql-rw-rw-r-- 1 1000 1000 786 Mar 10 15:48 Makefile.am-rw-rw-r-- 1 1000 1000 23351 Mar 10 15:48 Makefile.indrwxrwxr-x 2 1000 1000 92 Mar 10 15:49 option-patches-rw-rw-r-- 1 1000 1000 166646 Mar 10 15:48 schema.sql
mysql -uzabbix -p'passwd' zabbix < schema.sql# 导入表结构mysql -uzabbix -p'passwd' zabbix < images.sql# 导入图片资源mysql -uzabbix -p'passwd' zabbix < data.sql# 导入初始数据常见报错
[root@Zabbix mysql]# mysql -uzabbix -p'passwd' zabbix < schema.sqlERROR 1419 (HY000) at line 2124: You do not have the SUPER privilege and binary logging is enabled# schema.sql 脚本中包含创建函数或触发器的语句# 默认禁止普通用户...
'切root进入数据库!'SET GLOBAL log_bin_trust_function_creators = 1;# 这会允许普通用户创建函数和触发器'刷新权限退出'mysql> exitBye
# 再次尝试导入sql文件[root@Zabbix mysql]# mysql -uzabbix -p'passwd' zabbix < schema.sqlERROR 1050 (42S01) at line 1: Table 'role' already exists'此时,已经有部分的sql文件写入进去了!'# 显示已存在!
'切root进入数据库!'把zabbix数据库删除,重新建--->并授权给zabbix用户-- 1. 删除现有的 zabbix 库 (如果存在)DROP DATABASE IF EXISTS zabbix;-- 2. 重新创建 zabbix 库,并指定字符集 (推荐 utf8mb4)CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;-- 3. 再次确认开启函数创建信任 (防止再次出现 ERROR 1419)SET GLOBAL log_bin_trust_function_creators = 1;-- 4. 授权给zabbix用户grant all privileges on zabbix.* to 'zabbix'@'localhost' ;-- 5. 刷新权限FLUSH PRIVILEGES;mysql> exitBye
[root@Zabbix mysql]# mysql -uzabbix -p'passwd' zabbix < schema.sqlmysql: [Warning] Using a password on the command line interface can be insecure.'警告⚠️: 不要把密码暴露在命令行中'--->忽略就行![root@Zabbix mysql]# mysql -uzabbix -p'passwd' zabbix < images.sql[root@Zabbix mysql]# mysql -uzabbix -p'passwd' zabbix < data.sqlphp安装
[root@Zabbix ~]# yum -y install php php-bcmath php-cli php-common php-devel php-embedded php-fpm php-gd php-intl php-mbstring php-mysqlnd php-opcache php-pdo php-process php-xml php-json
[root@Zabbix ~]# vim /etc/php-fpm.d/www.conf[root@Zabbix ~]# grep 127.0.0.1:9000 /etc/php-fpm.d/www.conflisten = 127.0.0.1:9000[root@Zabbix ~]# php-fpm -t[10-Apr-2026 08:48:44] NOTICE: configuration file /etc/php-fpm.conf test is successful[root@Zabbix mysql]# systemctl enable --now php-fpmCreated symlink '/etc/systemd/system/multi-user.target.wants/php-fpm.service' → '/usr/lib/systemd/system/php-fpm.service'.
[root@Zabbix ~]# netstat -lntup | grep php-fpmtcp 0 0 127.0.0.1:9000nginx安装
'关于nginx的yum仓库,我的Linux版本是Rocky10'# 会有一些差异[root@Zabbix ~]# vim /etc/yum.repos.d/nginx.repo[nginx-stable]name=nginx stable repobaseurl=https://nginx.org/packages/centos/$releasever/$basearch/enabled=1gpgcheck=0
[root@Zabbix ~]# dnf -y install nginxnginx stable repo# 从👆nginx仓库.....Installed: nginx-2:1.28.3-1.el10.ngx.x86_64[root@Zabbix ~]# systemctl enable --now nginxCreated symlink '/etc/systemd/system/multi-user.target.wants/nginx.service' → '/usr/lib/systemd/system/nginx.service'.[root@Zabbix ~]# head -1 /etc/nginx/nginx.confuser apache;# 修改nginx的默认启动用户为apache[root@Zabbix ~]# > /etc/nginx/conf.d/default.conf[root@Zabbix ~]# vim /etc/nginx/conf.d/default.confserver { listen 80 default_server; server_name _; root /code; index index.php index.html;
location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }}[root@Zabbix ~]# mkdir /code[root@Zabbix ~]# cp -r /soft/zabbix-6.0.45/ui/* /code# 把zabbix的前端页面拿到/code目录下[root@Zabbix ~]# chown -R apache:apache /code'nginx和php默认启动用户都改为apache'[root@Zabbix ~]# ls /code/ | grep index.phpindex.php'默认首页是php, 所以配置文件要加上php'[root@Zabbix ~]# nginx -tnginx: the configuration file /etc/nginx/nginx.conf syntax is oknginx: configuration file /etc/nginx/nginx.conf test is successful[root@Zabbix ~]# systemctl restart nginx
[root@Zabbix ~]# ss -lntup127.0.0.1:9000 users:(("php-fpm",pid=2251,fd=10)0.0.0.0:80 users:(("nginx",pid=2662,fd=6)*:3306 users:(("mysqld",pid=1568,fd=53))*:33060 users:(("mysqld",pid=1568,fd=21))'php,nginx,mysql'编译zabbix服务
[root@Zabbix ~]# cd /soft/zabbix-6.0.45/[root@Zabbix zabbix-6.0.45]# dnf -y install libxml2 libxml2-devel net-snmp-devel curl-devel libevent-devel# 安装依赖包[root@Zabbix zabbix-6.0.45]# cd /usr/lib64/pkgconfig/[root@Zabbix pkgconfig]# ln -s libpcre2-8.pc libpcre2.pc[root@Proxy pkgconfig]# cd -/soft/zabbix-6.0.45[root@Zabbix zabbix-6.0.45]# ./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 --with-libpcre2# 安装模块,开启一些功能'手动指定'--with-libpcre2========================================'编译的时候出现了问题'configure: error: cannot find pkg-config package for libpcre# 我的Linux这个版本比较新,# 已经将 PCRE 库从版本 1 升级到了版本 2[root@Zabbix zabbix-6.0.45]# ll /usr/lib64/pkgconfig|grep libpcre2-rw-r--r-- 1 root root 320 Oct 29 2024 libpcre2-16.pc-rw-r--r-- 1 root root 320 Oct 29 2024 libpcre2-32.pc-rw-r--r-- 1 root root 317 Oct 29 2024 libpcre2-8.pc# 在 pkg-config 的规范里,PCRE2 库的主入口文件通常叫 libpcre2.pc(没有后缀数字)Zabbix 的 configure 脚本在检查依赖时,通常会执行类似 pkg-config --exists libpcre2 的命令。因为它在找名为 libpcre2 的包,而你系统里只有带后缀的(-8, -16, -32),所以它判定为“找不到”# 只需要在这个目录下,把 libpcre2-8.pc 复制(或链接)一份名为 libpcre2.pc 的文件选择 -8 版本是最稳妥的✅️[root@Zabbix zabbix-6.0.45]# cd /usr/lib64/pkgconfig/[root@Zabbix pkgconfig]# ln -s libpcre2-8.pc libpcre2.pc========================================# 带大家检查一下!Enable server: yesWith database: MySQLSNMP: yesnable proxy: noEnable agent: yes
[root@Zabbix zabbix-6.0.45]# make && make install# 编译安装[root@Zabbix zabbix-6.0.45]# zabbix_zabbix_agentd zabbix_get zabbix_js zabbix_sender zabbix_server# 在命令行,检查,是否可以tab出这些命令✅️如果你在执行 ./configure 时没有加 --prefix 参数,Zabbix 默认会安装到 /usr/local 目录下
| 文件类型 | 默认路径 | 说明 |
|---|---|---|
| 配置文件 | /usr/local/etc/ | 这里会有 zabbix_server.conf 和 zabbix_agentd.conf |
| 启动命令 | /usr/local/sbin/ | 这里会有 zabbix_server 和 zabbix_agentd 二进制文件 |
[root@Zabbix ~]# cd /usr/local/etc/[root@Zabbix etc]# lltotal 48-rw-r--r-- 1 root root 16797 Apr 10 10:03 zabbix_agentd.confdrwxr-xr-x 2 root root 6 Apr 10 10:03 zabbix_agentd.conf.d-rw-r--r-- 1 root root 25970 Apr 10 10:09 zabbix_server.confdrwxr-xr-x 2 root root 6 Apr 10 10:03 zabbix_server.conf.d# 👆放的是配置文件# 服务端&&客户端-->它们都包含的有子配置文件[root@Zabbix ~]# cd /usr/local/sbin[root@Zabbix sbin]# lltotal 16720-rwxr-xr-x 1 root root 2108768 Apr 10 10:03 zabbix_agentd-rwxr-xr-x 1 root root 15004136 Apr 10 10:03 zabbix_server# 启动命令--->它是有x执行权限的!========================================
1)配置数据库的信息[root@Zabbix zabbix-6.0.45]# cd[root@Zabbix ~]# vim /usr/local/etc/zabbix_server.conf[root@Zabbix ~]# egrep '^DB' /usr/local/etc/zabbix_server.confDBHost=localhost# 数据库在本地DBName=zabbix# database名称DBUser=zabbixDBPassword=passwdDBPort=3306
2)创建zabbix的虚拟用户# 名称固定,必须是它[root@Zabbix ~]# id zabbixid: ‘zabbix’: no such user[root@Zabbix ~]# groupadd -g 777 zabbix[root@Zabbix ~]# useradd -g 777 -u 777 -s /sbin/nologin -M zabbix⚠️信息不用管它[root@Zabbix ~]# id zabbixuid=777(zabbix) gid=777(zabbix) groups=777(zabbix)
3)启动zabbix_server # 启动服务端zabbix_agentd # 启动客户端'可以直接在命令行进行启动, 但是我们还是更加愿意编写service文件'# 让 Zabbix 像 Nginx、MySQL 一样通过 systemctl 进行管理[root@Zabbix system]# vim /usr/lib/systemd/system/zabbix.service# 下面有一个-c选项!!# 指定配置文件[Unit]Description=Zabbix ServerAfter=network.target
[Service]Type=forkingExecStart=/usr/local/sbin/zabbix_server -c /usr/local/etc/zabbix_server.confExecStop=/bin/kill -SIGTERM $MAINPID# $MAINPID 是一个 systemd 变量,它代表服务的主进程ID# 这条命令的作用是向主进程发送一个标准的终止信号# 这是停止服务的正确方式User=zabbixGroup=zabbix
[Install]WantedBy=multi-user.target[root@Zabbix system]# systemctl daemon-reload[root@Zabbix system]# systemctl start zabbix[root@Zabbix sbin]# netstat -lntup | grep zabbixtcp 0 0.0.0.0:10051 LISTEN 20937/zabbix_servertcp6 0 :::10051 LISTEN 20937/zabbix_server'服务端--->10051''客户端--->10050'🔄流量方向
| 组件 | 默认端口 | 作用 |
|---|---|---|
| Zabbix Server | 10051 | ==接收数据== 监听 Agent 发来的监控数据或主动注册请求 |
| Zabbix Agent | 10050 | ==提供数据== 监听 Server 的查询请求,或主动向 Server 发送数据 |
Zabbix 的通信主要分两种模式
- 被动模式(Server 主动去问)—— ==最常用的模式==
- 场景:Server 想要知道客户端的 CPU 使用率
- 动作:Server 发起连接 -> 连接客户端的 10050 端口
- 结果:Agent 收到请求,把数据返回给 Server
- 防火墙重点:你需要开放 客户端的 10050 端口 允许 Server 访问
- 主动模式(Agent 主动去报)
- 场景:客户端配置了主动推送数据,或者客户端刚启动进行“自动注册”
- 动作:Agent 发起连接 -> 连接服务端的 10051 端口
- 结果:Server 收到数据或注册请求,存入数据库
- 防火墙重点:你需要开放 服务端的 10051 端口 允许 Agent 访问
界面安装部署


[root@Zabbix sbin]# vim /etc/php.ini# 主配置文件post_max_size = 16Mmax_execution_time = 300max_input_time = 300date.timezone = Asia/ShangHai[root@Zabbix sbin]# php-fpm -t[10-Apr-2026 11:32:35] NOTICE: configuration file /etc/php-fpm.conf test is successful[root@Zabbix sbin]# systemctl restart php-fpm
- 微软的 AD域 来登录 Zabbix,其实可以直接忽略





修改默认字体


root@Zabbix ~]# cd /code/assets/fonts/[root@Zabbix fonts]# lsDejaVuSans.ttf# 这是默认的字体
C:\Windows\Fonts# 找一款自己喜欢的字体
[root@Zabbix fonts]# rm -rf DejaVuSans.ttf[root@Zabbix fonts]# rz -Erz waiting to receive.[root@Zabbix fonts]# lsSIMYOU.TTF[root@Zabbix fonts]# mv SIMYOU.TTF DejaVuSans.ttf# 改回原来的名字--->刷新页面即可!
监控本机

- 因为我们没有启用==客户端==

[root@Zabbix fonts]# zabbix_agentd# 可以直接在命令行启用客户端[root@Zabbix fonts]# netstat -lntup | grep zabbix*tcp 0 0.0.0.0:10051 LISTEN 20937/zabbix_server👆"服务端"tcp 0 0.0.0.0:10050 LISTEN 21188/zabbix_agentd👆"客户端"tcp6 0 :::10051 LISTEN 20937/zabbix_servertcp6 0 :::10050 LISTEN 21188/zabbix_agentd

客户端监控

✅ Zabbix 监控流程(按数据流顺序)
- 客户端部署(Agent 端)
- 在被监控主机(如
172.16.1.7)上安装zabbix-agent - 修改配置文件
zabbix-agent.conf,指向Zabbix Server 地址 - 启动 agent,监听端口(默认
10050),等待服务端轮询
- 在被监控主机(如
- 服务端配置(Zabbix Server)
- 在 Web 界面中:
- 添加主机(如
172.16.1.7) - 关联模板,它定义了要采集的指标(CPU、内存、磁盘、负载等)
- 添加主机(如
- Server 根据模板中的 Items(监控项),定时(默认每分钟)向 agent 发起请求
- ==主动模式或被动模式==,图中为被动模式:agent 等待 server 请求
- 详细请参考==🔄流量方向==👆
- 在 Web 界面中:
- 数据采集与写入
- Agent 收到请求后,执行对应命令(如
cat /proc/loadavg),返回实时值 - Server 接收数据 → 每间隔 1 分钟将最新值写入数据库
- 数据库存储:当前值 + 历史趋势(用于图形展示)
- Agent 收到请求后,执行对应命令(如
- 前端展示(浏览器访问)
- 用户通过浏览器访问 Zabbix Web 界面
- 选择目标主机(如
172.16.1.7) → 页面从数据库查询历史/实时数据 → 渲染为图形/表格 - 所有“主机监控、图形、数据”均来自数据库读取
- 压力最大:高频写入 && 高频读取
📌 总结一句话:
Zabbix 是“Server 主动轮询 Agent → 获取指标 → 写入 DB → 前端查 DB 展示”的架构,数据库是整个系统的性能瓶颈
仓库下载agent

- rpm包下载地址
- 👆往下翻--->==有具体的操作==
'这里提示: zabbix客户端版本最好和服务端一致!'# 直接去官网下载 Zabbix 6.0 的 Agent 安装包是最稳妥的选择![root@Client ~]# ll /etc/yum.repos.d/zabbix*ls: cannot access '/etc/yum.repos.d/zabbix*': No such file or directory❌️刚开始是没有对应的zabbix仓库的[root@Client ~]# rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/9/x86_64/zabbix-release-latest-6.0.el9.noarch.rpm✅ 成功安装了一个 Zabbix 官方 YUM 仓库配置包# 以便后续通过 dnf 或 yum 直接安装 Zabbix 相关组件(如 server、agent、web 等)[root@Client ~]# ll /etc/yum.repos.d/zabbix*-rw-r--r-- 1 root root 239 Jul 3 2024 /etc/yum.repos.d/zabbix-agent2-plugins.repo-rw-r--r-- 1 root root 637 Jul 3 2024 /etc/yum.repos.d/zabbix.repo# 现在就有对应的yum源了!
1)安装zabbix-agent[root@Client ~]# dnf -y install zabbix-agentVersion: 6.0.45-release1.el9Repository: zabbix# 来自zabbix这个仓库!
2)修改配置文件[root@Client ~]# vim /etc/zabbix/zabbix_agentd.conf[root@Client ~]# egrep -i "^server=" /etc/zabbix/zabbix_agentd.conf# Example: Server=127.0.0.1,192.168.1.0/24,::1,2001:db8::/32,zabbix.example.comServer=192.168.88.99# 使用内网-->私网⚠️注意网段,指向的服务端的私网✅️'那么在web页面添加的时候,客户端的IP地址也得是192.xxx段的'
3)启动&&开机自启[root@Client ~]# systemctl enable --now zabbix-agentCreated symlink '/etc/systemd/system/multi-user.tar.......'
4)测试启动[root@Client ~]# netstat -lntup | grep 10050tcp 0 0.0.0.0:10050 LISTEN 1950/zabbix_agentdtcp6 0 :::10050 LISTEN 1950/zabbix_agentd配置启动

- 这里主机接口 ---> IP地址 ---> ❌️忘记改了❌️
192.168.88.102--- 客户端的IP地址- 必须和配置文件中的Server=192.168.88.99服务端指向在同一网段✅️

📝 ==被动模式==
- 全称:
Linux by Zabbix agent - 工作流程:Zabbix Server(服务端)主动向 Agent(客户端)发起连接并询问
- Agent 收到请求后,再返回数据
📤 ==主动模式==
- 全称:
Linux by Zabbix agent active - 工作流程:Agent(客户端)主动向 Zabbix Server(或 Proxy)发起连接
- 询问:“我有哪些监控项需要上报?”
- Server 返回监控项列表后
- Agent 就会定期采集这些数据并主动发送给 Server

- 还是==接口IP==问题
192.168.88.102:10050
刚发现--->我zabbix本机的客户端没有开启!'端口10050'[root@Zabbix ~]# zabbix_agentd[root@Zabbix ~]# netstat -lntup | grep zabbix_agentd0 0.0.0.0:10050 LISTEN 2569/zabbix_agentd0 :::10050 LISTEN 2569/zabbix_agentd
- 上下两张图
接口IP都有问题


- 一定要保证我们的磁盘空间够用
- 这些数据最终存到数据库中 —> ==进行落盘==
日志位置
服务端日志: /tmp/zabbix_server.log[root@Zabbix ~]# tail /tmp/zabbix_server.log 2360:20260412:132207.270 enabling Zabbix agent checks on host "Zabbix server": interface became available 2354:20260412:132209.273 enabling Zabbix agent checks on host "Client": interface became available# 看最后,接口变的可用了✅️===============================客户端: /var/log/zabbix/zabbix_agentd.log# yum仓库安装[root@Client ~]# tail /var/log/zabbix/zabbix_agentd.log 1950:20260412:111224.222 ************************** 1950:20260412:111224.222 using configuration file: /etc/zabbix/zabbix_agentd.conf 1950:20260412:111224.222 agent #0 started [main process] 1951:20260412:111224.222 agent #1 started [collector] 1952:20260412:111224.224 agent #2 started [listener #1] 1953:20260412:111224.224 agent #3 started [listener #2] 1954:20260412:111224.226 agent #4 started [listener #3]被动模式(Passive)是正常的✅️# 日志中出现了 listener 进程# 说明 Agent 已经成功启动并正在监听端口,等待 Server 的查询 1955:20260412:111224.226 agent #5 started [active checks #1] 1955:20260412:111224.230 Unable to connect to [127.0.0.1]:10051 [cannot connect to [[127.0.0.1]:10051]: [111] Connection refused] '10051 端口是 Zabbix Server 的监听端口' # 连接被拒绝 1955:20260412:111224.230 Active check configuration update started to fail但主动模式(Active)是失败的❌️# 这台机器(Client)上只安装了 Agent,没有安装 Server# 所以本机没有程序在监听 10051 端口,导致 Agent 想要“主动上报数据”时找不到接收方⭐自定义监控
监控登录数
[root@Client ~]# w 14:15:55 up 4:01, 2 usersUSER LOGIN@ IDLE JCPU PCPUroot 10:15 4:01m 0.00s 0.01sroot 10:15 4:01m 0.00s 0.12s'在客户端进行操作'
1)取值[root@Client ~]# w | awk 'NR==1{print $4}'2
2)修改客户端配置[root@Client ~]# vim /etc/zabbix/zabbix_agentd.conf### Option: UserParameter'自定义监控项'# Format: UserParameter=<key>,<shell command># <key>(关键字)# <shell command>(动作):实际执行的命令UserParameter=user_login,w | awk 'NR==1{print $4}'
3)检测[root@Client ~]# zabbix_agentd -p | tail -1# 最新的在下面user_login [t|2]'客户端先进行测试'👆客户端即使不进行重启服务,也可以看到结果![root@Zabbix ~]# zabbix_get -s 192.168.88.102 -k user_loginZBX_NOTSUPPORTED: Unsupported item key.'但服务端是拉取不到对应的值'
4)重启生效[root@Client ~]# systemctl restart zabbix-agent'客户端先进行重启agent服务'[root@Zabbix ~]# zabbix_get -s 192.168.88.102 -k user_login2'这样服务端,就可以取到对应的值了'
5)服务端web页面进行添加






- 问题就出现在
- 我在配置客户端的时候,接口IP写成本地了


配置文件拆分
'通过包含关系写入到主配置文件中'# 将自定义key单独存放在.conf的配置文件中
1)删除主配置文件中对应的键值对[root@Client ~]# vim /etc/zabbix/zabbix_agentd.confUserParameter=user_login,w | awk 'NR==1{print $4}'
2)检查相应的配置[root@Client ~]# grep 'zabbix_agentd.d' /etc/zabbix/zabbix_agentd.confInclude=/etc/zabbix/zabbix_agentd.d/*.conf'在6.0版本中,默认就有这条配置和对应的子目录'[root@Client ~]# ll -d /etc/zabbix/zabbix_agentd.d/drwxr-xr-x 2 root root 6 Mar 10 15:54 /etc/zabbix/zabbix_agentd.d/
3)创建子配置文件[root@Client ~]# cd /etc/zabbix/zabbix_agentd.d/[root@Client zabbix_agentd.d]# vim os.conf'把刚才的键值对写入进去'[root@Client zabbix_agentd.d]# cat os.confUserParameter=user_login,w | awk 'NR==1{print $4}'
4)本地测试[root@Client zabbix_agentd.d]# zabbix_agentd -p | tail -1user_login [t|2][root@Client ~]# systemctl restart zabbix-agent
5)服务端测试[root@Zabbix ~]# zabbix_get -s 192.168.88.102 -k user_login2# 服务端也是能够成功的拉取过来的监控端口是否存在
[root@Client ~]# ss -lntup | grep "0.0.0.0:22" | wc -l1# 这个结果,尽量是1或者0# 适当的排除和精确过滤一下[root@Client ~]# tail -1 /etc/zabbix/zabbix_agentd.d/os.confUserParameter=ssh_port,ss -lntup | grep "0.0.0.0:22" | wc -l[root@Client ~]# zabbix_agentd -p | tail -1ssh_port [t|1][root@Client ~]# systemctl restart zabbix-agent
# 最后服务端进行测试[root@Zabbix ~]# zabbix_get -s 192.168.88.102 -k ssh_port1===========================[root@Client ~]# vim /etc/zabbix/zabbix_agentd.d/os.confUserParameter=ssh_port_test,netstat -lntup | grep "0.0.0.0:22" | wc -l# 如果你这里用的是netstat命令,还会有点不一样![root@Client ~]# zabbix_agentd -p | tail -1ssh_port_test [t|1][root@Client ~]# systemctl restart zabbix-agent.service[root@Zabbix ~]# zabbix_get -s 192.168.88.102 -k ssh_port_test(Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.)1'为什么会报错--->👇有详细介绍'===========================[root@Client ~]# chmod u+s /usr/bin/netstat# 以root身份执行它就可以了
# 再次拉取测试[root@Zabbix ~]# zabbix_get -s 192.168.88.102 -k ssh_port_test1-
Zabbix Server(服务端):
- 确实通常以
zabbix用户运行 - 它的作用是发送请求(“请告诉我 SSH 端口情况”)
- 确实通常以
-
Zabbix Agent(客户端):
-
虽然我们是用
root身份启动的服务(systemctl start zabbix-agent) -
但在默认配置下(查看
/etc/zabbix/zabbix_agentd.conf),Agent 启动后会==主动降低权限==,切换到zabbix用户 来运行[root@Client ~]# id zabbix uid=989(zabbix) gid=988(zabbix) groups=988(zabbix)
-
结论: 当服务端请求数据时,实际上是 客户端机器上的 zabbix 用户 在执行你定义的 UserParameter 脚本或命令
为什么会报错❓️
netstat 命令有一个特性:当你使用 -p 参数(显示进程 PID 和名称)时,它需要读取内核中所有进程的信息
- 如果当前用户是 root:可以查看所有进程
- 如果当前用户是 普通用户(如 zabbix):只能查看属于自己的进程
- 对于不属于它的进程(比如 root 运行的 sshd),它无法查看,因此会报错:

监控内存使用率
[root@Client ~]# free total used freeMem: 1975384 466260 1277988Swap: 2109436 0 2109436'注意单位要统一'[root@Client ~]# free | awk 'NR==2{print $3/$2}'0.235855[root@Client ~]# free | awk 'NR==2{print $3/$2*100}'23.5976[root@Client ~]# tail -1 /etc/zabbix/zabbix_agentd.d/os.confUserParameter=free_used,free | awk 'NR==2{print $3/$2*100}'[root@Client ~]# zabbix_agentd -p | tail -1free_used [t|24.1632][root@Client ~]# systemctl restart zabbix-agent
# 服务端测试[root@Zabbix ~]# zabbix_get -s 192.168.88.102 -k free_used24.1079

常用的键值

- 以下都是zabbix提前写好了的东西
- ==标准检测器==
- 配置—>主机—>监控项—>键值—>选择
- 就是👆蓝色框框里面的东西

| 键值 (Key) | 核心功能 | 返回值含义 | 适用场景 |
|---|---|---|---|
net.tcp.listen[port] | 检查本地监听状态 | 1: 正在监听 0: 未监听 | 检查本机服务(如 Nginx)是否成功启动并占用了端口 |
net.tcp.port[<ip>,port] | 检查端口连通性 | 1: 可连接 0: 不可连接 | 模拟客户端去连接目标 IP 的端口,判断防火墙是否放行或服务是否响应 |
'可以直接在服务端运行'[root@Zabbix ~]# zabbix_get -s 192.168.88.102 -k net.tcp.listen[22]1# 22端口是否在监听
[root@Zabbix ~]# zabbix_get -s 192.168.88.102 -k agent.ping1# 客户端是否可达
[root@Zabbix ~]# zabbix_get -s 192.168.88.102 -k system.cpu.load[all,avg15]0.000000# 15分钟的平均负载
[root@Zabbix ~]# zabbix_get -s 192.168.88.102 -k web.page.get[www.baidu.com,/,80]# web.page.get 的作用就是让 Zabbix Server 像一个简易浏览器一样# 去目标服务器“抓取”网页的源代码HTTP/1.1 200 OK<title>百度一下,你就知道</title>............
[root@Zabbix ~]# [root@Zabbix ~]# zabbix_get -s 192.168.88.102 -k web.page.regexp[www.baidu.com,/,80,百度一下,100,]百度一下- 目的:不仅要看网站能不能打开(端口通),还要看打开的内容对不对
- 配置:
- 键值:
web.page.regexp[www.baidu.com,/,80,百度] - 触发器:设置一个触发器
- 当返回值 等于
百度时,认为正常 - 如果返回空(长度为0),说明网站可能被篡改或者挂了
- 当返回值 等于
- 键值:
自定义映射值
想要把冷冰冰的数字(比如 0 和 1)变成一眼就能看懂的文字(比如“不存在”和“存在”),这个功能在 Zabbix 里叫做"值映射(Value Mapping)"# 这就像是给 Zabbix 装了一个“翻译器”,把机器语言翻译成人类语言



文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
相关文章智能推荐
1
Zabbix联合报警
Web服务Zabbix告警体系实战,涵盖触发器、邮件与企业微信报警、远程命令恢复及自定义监控模板
2
Zabbix自动扫描&&注册
Web服务Zabbix自动发现与自动注册批量纳管,涵盖SNMP协议、Proxy分布式代理及JMX监控Java应用
3
函数与数组
Shell脚本Shell函数定义与数组操作,涵盖局部/全局变量、递归函数及数组遍历
4
循环与case多分支
Shell脚本Shell循环结构与case多分支语句,涵盖for/while/until循环及实战脚本
5
数值运算与if条件判断
Shell脚本Shell数值运算方法与if条件判断结构,涵盖整数/字符串比较及文件测试
随机文章随机推荐



