Zabbix监控开篇

5571 字
28 分钟
Zabbix监控开篇

Zabbix监控开篇#

[TOC]


初认知#

  • 什么是监控:对操作系统进行不间断的实时监测
  • 为什么要监控
    • 是软件生命周期中的关键环节
    • 实现“事前告警”,事后可基于监控数据快速定位问题
    • 避免因监控不到位导致恶性循环
      • → 项目流产 → 公司倒闭、资金链断裂等严重后果

如何去监控?监控什么内容?

  • 基础设施层:硬件(CPU、内存、磁盘 df -hfree、磁盘 IO、网络)
  • 软件服务层:端口、进程、服务状态
  • 业务层:业务数据、注册/充值用户、日志、数据库指标;
    • 支持自定义监控与订单量等关键业务指标
  • 接口层:业务系统间调用监控(如用 curl 检测 API 可用性)

监控有哪些工具?

  • 主推 Zabbix(强调“万物皆可监控”)

版本选择#

Zabbix 源码下载

  • 网址👆--->下载安装 ==源码==

    • 长期稳定版本 6.0
      • 版本适配性更强✅️
    • ==Zabbix 7.0 LTS==
    • 支持的数据库版本范围如下: - 最低版本: MySQL 8.0.30 - 支持范围: MySQL 8.0.30 至 9.0.x

    image-20260409164425761
    image-20260409164425761

产品手册

  • 👆==产品手册== ---> 包含 4.0 5.0 6.0 7.0

    image-20260409125813159
    image-20260409125813159

mysql安装#

MySQL下载

  • 👆是==链接==

如果是生产环境:8.0.36 是目前公认的==“黄金版本”==

image-20260409165201832
image-20260409165201832

Terminal window
# 因为我这里用的是Rocky10
'操作系统比较新--->MySQL有变更'
依旧是8.0.36版本--->但它是el9
'如果你的Linux版本是7或者8请下载el8的版本'
[root@Zabbix ~]# cd /server/tmp/
[root@Zabbix ~]# ll
mysql-8.0.36-1.el9.x86_64.rpm-bundle.tar
zabbix-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.rpm
mysql-community-icu-data-files-8.0.36-1.el9.x86_64.rpm
# 2. 库文件 (Libraries)
⚠️注意:如果提示与 mariadb-libs 冲突,需先卸载 ❌️mariadb
mysql-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 --version
mysql Ver 8.0.36 for Linux on x86_64
Terminal window
dnf 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.rpm
Tip
  • 在 Xshell 中按住 Alt 键--->随意选中==矩形块==

image-20260409133013530
image-20260409133013530

Terminal window
[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.36
mysql> 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> exit
Bye
7)导入数据
[root@Zabbix mysql]# pwd
/soft/zabbix-6.0.45/database/mysql
[root@Zabbix mysql]# ll
total 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.in
drwxrwxr-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
# 导入初始数据

常见报错#

Terminal window
[root@Zabbix mysql]# mysql -uzabbix -p'passwd' zabbix < schema.sql
ERROR 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> exit
Bye
# 再次尝试导入sql文件
[root@Zabbix mysql]# mysql -uzabbix -p'passwd' zabbix < schema.sql
ERROR 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> exit
Bye
[root@Zabbix mysql]# mysql -uzabbix -p'passwd' zabbix < schema.sql
mysql: [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.sql

php安装#

Terminal window
[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.conf
listen = 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-fpm
Created symlink '/etc/systemd/system/multi-user.target.wants/php-fpm.service' '/usr/lib/systemd/system/php-fpm.service'.
[root@Zabbix ~]# netstat -lntup | grep php-fpm
tcp 0 0 127.0.0.1:9000

nginx安装#

Terminal window
'关于nginx的yum仓库,我的Linux版本是Rocky10'
# 会有一些差异
[root@Zabbix ~]# vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=https://nginx.org/packages/centos/$releasever/$basearch/
enabled=1
gpgcheck=0
[root@Zabbix ~]# dnf -y install nginx
nginx stable repo
# 从👆nginx仓库
.....
Installed:
nginx-2:1.28.3-1.el10.ngx.x86_64
[root@Zabbix ~]# systemctl enable --now nginx
Created symlink '/etc/systemd/system/multi-user.target.wants/nginx.service' '/usr/lib/systemd/system/nginx.service'.
[root@Zabbix ~]# head -1 /etc/nginx/nginx.conf
user apache;
# 修改nginx的默认启动用户为apache
[root@Zabbix ~]# > /etc/nginx/conf.d/default.conf
[root@Zabbix ~]# vim /etc/nginx/conf.d/default.conf
server {
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.php
index.php
'默认首页是php, 所以配置文件要加上php'
[root@Zabbix ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@Zabbix ~]# systemctl restart nginx
[root@Zabbix ~]# ss -lntup
127.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服务#

Terminal window
[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: yes
With database: MySQL
SNMP: yes
nable proxy: no
Enable 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.confzabbix_agentd.conf
启动命令/usr/local/sbin/这里会有 zabbix_serverzabbix_agentd 二进制文件
Terminal window
[root@Zabbix ~]# cd /usr/local/etc/
[root@Zabbix etc]# ll
total 48
-rw-r--r-- 1 root root 16797 Apr 10 10:03 zabbix_agentd.conf
drwxr-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.conf
drwxr-xr-x 2 root root 6 Apr 10 10:03 zabbix_server.conf.d
# 👆放的是配置文件
# 服务端&&客户端-->它们都包含的有子配置文件
[root@Zabbix ~]# cd /usr/local/sbin
[root@Zabbix sbin]# ll
total 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.conf
DBHost=localhost
# 数据库在本地
DBName=zabbix
# database名称
DBUser=zabbix
DBPassword=passwd
DBPort=3306
2)创建zabbix的虚拟用户
# 名称固定,必须是它
[root@Zabbix ~]# id zabbix
id: ‘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 zabbix
uid=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 Server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/sbin/zabbix_server -c /usr/local/etc/zabbix_server.conf
ExecStop=/bin/kill -SIGTERM $MAINPID
# $MAINPID 是一个 systemd 变量,它代表服务的主进程ID
# 这条命令的作用是向主进程发送一个标准的终止信号
# 这是停止服务的正确方式
User=zabbix
Group=zabbix
[Install]
WantedBy=multi-user.target
[root@Zabbix system]# systemctl daemon-reload
[root@Zabbix system]# systemctl start zabbix
[root@Zabbix sbin]# netstat -lntup | grep zabbix
tcp 0 0.0.0.0:10051 LISTEN 20937/zabbix_server
tcp6 0 :::10051 LISTEN 20937/zabbix_server
'服务端--->10051'
'客户端--->10050'

🔄流量方向#

组件默认端口作用
Zabbix Server10051==接收数据== 监听 Agent 发来的监控数据或主动注册请求
Zabbix Agent10050==提供数据== 监听 Server 的查询请求,或主动向 Server 发送数据

Zabbix 的通信主要分两种模式

  1. 被动模式(Server 主动去问)—— ==最常用的模式==
  • 场景:Server 想要知道客户端的 CPU 使用率
  • 动作:Server 发起连接 -> 连接客户端的 10050 端口
  • 结果:Agent 收到请求,把数据返回给 Server
  • 防火墙重点:你需要开放 客户端的 10050 端口 允许 Server 访问

  1. 主动模式(Agent 主动去报)
  • 场景:客户端配置了主动推送数据,或者客户端刚启动进行“自动注册”
  • 动作:Agent 发起连接 -> 连接服务端的 10051 端口
  • 结果:Server 收到数据或注册请求,存入数据库
  • 防火墙重点:你需要开放 服务端的 10051 端口 允许 Agent 访问

界面安装部署#

image-20260410112314102
image-20260410112314102

image-20260410112448736
image-20260410112448736

Terminal window
[root@Zabbix sbin]# vim /etc/php.ini
# 主配置文件
post_max_size = 16M
max_execution_time = 300
max_input_time = 300
date.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

image-20260410113226234
image-20260410113226234

  • 微软的 AD域 来登录 Zabbix,其实可以直接忽略

image-20260410113549693
image-20260410113549693

image-20260410113704717
image-20260410113704717

image-20260410113723206
image-20260410113723206

image-20260410113823565
image-20260410113823565

image-20260410114225200
image-20260410114225200

修改默认字体#

image-20260410114859288
image-20260410114859288

image-20260410114926250
image-20260410114926250

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

image-20260410115516324
image-20260410115516324

监控本机#

image-20260410115721434
image-20260410115721434

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

image-20260410115954386
image-20260410115954386

Terminal window
[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_server
tcp6 0 :::10050 LISTEN 21188/zabbix_agentd

image-20260410120535048
image-20260410120535048

image-20260410120916792
image-20260410120916792

客户端监控#

image-20260412091849486
image-20260412091849486

✅ Zabbix 监控流程(按数据流顺序)

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

📌 总结一句话:

Zabbix 是“Server 主动轮询 Agent → 获取指标 → 写入 DB → 前端查 DB 展示”的架构,数据库是整个系统的性能瓶颈

仓库下载agent#

image-20260412102855006
image-20260412102855006

Terminal window
'这里提示: 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-agent
Version: 6.0.45-release1.el9
Repository: 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.com
Server=192.168.88.99
# 使用内网-->私网
⚠️注意网段,指向的服务端的私网
✅️'那么在web页面添加的时候,客户端的IP地址也得是192.xxx段的'
3)启动&&开机自启
[root@Client ~]# systemctl enable --now zabbix-agent
Created symlink '/etc/systemd/system/multi-user.tar.......'
4)测试启动
[root@Client ~]# netstat -lntup | grep 10050
tcp 0 0.0.0.0:10050 LISTEN 1950/zabbix_agentd
tcp6 0 :::10050 LISTEN 1950/zabbix_agentd

配置启动#

image-20260412131244909
image-20260412131244909

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

image-20260412133040682
image-20260412133040682

📝 ==被动模式==

  • 全称Linux by Zabbix agent
  • 工作流程:Zabbix Server(服务端)主动向 Agent(客户端)发起连接并询问
    • Agent 收到请求后,再返回数据

📤 ==主动模式==

  • 全称Linux by Zabbix agent active
  • 工作流程:Agent(客户端)主动向 Zabbix Server(或 Proxy)发起连接
    • 询问:“我有哪些监控项需要上报?”
    • Server 返回监控项列表后
    • Agent 就会定期采集这些数据并主动发送给 Server

image-20260412132513916
image-20260412132513916

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

image-20260412132341519
image-20260412132341519

  • 上下两张图 接口IP 都有问题

image-20260412133621213
image-20260412133621213

image-20260412133845937
image-20260412133845937

  • 一定要保证我们的磁盘空间够用
    • 这些数据最终存到数据库中 —> ==进行落盘==

日志位置#

Terminal window
服务端日志: /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 想要“主动上报数据”时找不到接收方

⭐自定义监控#

监控登录数#

Terminal window
[root@Client ~]# w
14:15:55 up 4:01, 2 users
USER LOGIN@ IDLE JCPU PCPU
root 10:15 4:01m 0.00s 0.01s
root 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_login
ZBX_NOTSUPPORTED: Unsupported item key.
'但服务端是拉取不到对应的值'
4)重启生效
[root@Client ~]# systemctl restart zabbix-agent
'客户端先进行重启agent服务'
[root@Zabbix ~]# zabbix_get -s 192.168.88.102 -k user_login
2
'这样服务端,就可以取到对应的值了'
5)服务端web页面进行添加

image-20260412144717936
image-20260412144717936

image-20260412144800138
image-20260412144800138

image-20260412160138860
image-20260412160138860

image-20260412150056762
image-20260412150056762

image-20260412150642282
image-20260412150642282

image-20260412150749098
image-20260412150749098

image-20260412150940909
image-20260412150940909

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

image-20260412155713766
image-20260412155713766

image-20260412160550807
image-20260412160550807

配置文件拆分#

Terminal window
'通过包含关系写入到主配置文件中'
# 将自定义key单独存放在.conf的配置文件中
1)删除主配置文件中对应的键值对
[root@Client ~]# vim /etc/zabbix/zabbix_agentd.conf
UserParameter=user_login,w | awk 'NR==1{print $4}'
2)检查相应的配置
[root@Client ~]# grep 'zabbix_agentd.d' /etc/zabbix/zabbix_agentd.conf
Include=/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.conf
UserParameter=user_login,w | awk 'NR==1{print $4}'
4)本地测试
[root@Client zabbix_agentd.d]# zabbix_agentd -p | tail -1
user_login [t|2]
[root@Client ~]# systemctl restart zabbix-agent
5)服务端测试
[root@Zabbix ~]# zabbix_get -s 192.168.88.102 -k user_login
2
# 服务端也是能够成功的拉取过来的

监控端口是否存在#

Terminal window
[root@Client ~]# ss -lntup | grep "0.0.0.0:22" | wc -l
1
# 这个结果,尽量是1或者0
# 适当的排除和精确过滤一下
[root@Client ~]# tail -1 /etc/zabbix/zabbix_agentd.d/os.conf
UserParameter=ssh_port,ss -lntup | grep "0.0.0.0:22" | wc -l
[root@Client ~]# zabbix_agentd -p | tail -1
ssh_port [t|1]
[root@Client ~]# systemctl restart zabbix-agent
# 最后服务端进行测试
[root@Zabbix ~]# zabbix_get -s 192.168.88.102 -k ssh_port
1
===========================
[root@Client ~]# vim /etc/zabbix/zabbix_agentd.d/os.conf
UserParameter=ssh_port_test,netstat -lntup | grep "0.0.0.0:22" | wc -l
# 如果你这里用的是netstat命令,还会有点不一样!
[root@Client ~]# zabbix_agentd -p | tail -1
ssh_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_test
1
  • 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),它无法查看,因此会报错:

image-20260412175516123
image-20260412175516123

监控内存使用率#

Terminal window
[root@Client ~]# free
total used free
Mem: 1975384 466260 1277988
Swap: 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.conf
UserParameter=free_used,free | awk 'NR==2{print $3/$2*100}'
[root@Client ~]# zabbix_agentd -p | tail -1
free_used [t|24.1632]
[root@Client ~]# systemctl restart zabbix-agent
# 服务端测试
[root@Zabbix ~]# zabbix_get -s 192.168.88.102 -k free_used
24.1079

image-20260412211121560
image-20260412211121560

image-20260412211257241
image-20260412211257241

常用的键值#

image-20260412203351854
image-20260412203351854

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

image-20260412203715197
image-20260412203715197

键值 (Key)核心功能返回值含义适用场景
net.tcp.listen[port]检查本地监听状态1: 正在监听 0: 未监听检查本机服务(如 Nginx)是否成功启动并占用了端口
net.tcp.port[<ip>,port]检查端口连通性1: 可连接 0: 不可连接模拟客户端去连接目标 IP 的端口,判断防火墙是否放行或服务是否响应
Terminal window
'可以直接在服务端运行'
[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.ping
1
# 客户端是否可达
[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),说明网站可能被篡改或者挂了

自定义映射值#

Terminal window
想要把冷冰冰的数字(比如 0 1)变成一眼就能看懂的文字(比如“不存在”和“存在”),这个功能在 Zabbix 里叫做"值映射(Value Mapping)"
# 这就像是给 Zabbix 装了一个“翻译器”,把机器语言翻译成人类语言

image-20260412195632661
image-20260412195632661

image-20260412195728986
image-20260412195728986

image-20260412195859914
image-20260412195859914

image-20260412200249578
image-20260412200249578

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Zabbix监控开篇
https://www.kpyun.fun/posts/web/zabbix/zabbix01/
作者
久棹
发布于
2026-01-14
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
久棹
只要胆子大,天天寒暑假!
公告
欢迎来到久棹的技术小站!本站专注 Linux 运维学习笔记分享,如有问题欢迎交流探讨 🎉
分类
标签
站点统计
文章
98
分类
11
标签
203
总字数
244,453
运行时长
0
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.13.5
文章许可
CC BY-NC-SA 4.0

文章目录