深入解析:【Day 66】Linux-Zabbix监控

news/2025/10/12 17:27:39/文章来源:https://www.cnblogs.com/wzzkaifa/p/19136889

一、监控

        监控的本质是通过 “感知 - 分析 - 行动” 闭环,解决 IT 系统的 “不可见性” 问题。

作用维度核心目标具体体现
发现问题实时感知异常当系统 / 设备出现指标偏离(如 CPU 使用率突升、网络中断)时,第一时间捕捉异常,避免 “用户先发现故障” 的被动局面
解决问题快速定位根因提供异常前后的指标关联数据(如 “内存泄漏导致 CPU 飙升”),帮助运维人员跳过 “排查盲区”,缩短故障恢复时间(MTTR)
预防问题提前规避风险基于历史数据趋势分析(如 “每周五晚 8 点带宽峰值增长 10%”),预判潜在瓶颈(如带宽不足),提前扩容或优化,避免故障发生

        实现方式:监控方式的选择取决于监控对象(服务器 / 网络设备 / 应用)、规模(单机 / 集群)和精度需求,按 “自动化程度” 分类主要分为三大类:

1、人工巡检(最低自动化程度)

  • 原理:运维人员通过 “登录设备查看命令行”“手动检查日志”“肉眼观察指示灯” 等方式,定期确认设备 / 系统状态。
  • 适用场景
    • 小规模环境(如 1-2 台单机服务器);
    • 无自动化工具支持的特殊设备(如老旧工业控制器);
    • 应急临时检查(如故障后补充确认)。
  • 优缺点
    • 优点:无工具依赖、直观感知(如设备物理故障);
    • 缺点:效率极低、易漏检(如夜间突发异常)、无法实时监控、人工成本高。

2、巡检脚本(半自动化)

  • 原理:通过编写自定义脚本(如 Shell、Python、PowerShell),定时执行 “指标采集命令”(如top查 CPU、ping测连通性),并输出结果(如日志文件、邮件告警)。
  • 常见脚本场景
    • 服务器基础指标:df -h监控磁盘使用率、free -m监控内存;
    • 应用可用性:curl检测 Web 服务是否返回 200 状态码、netstat检查端口是否存活;
    • 简单告警:脚本判断指标阈值(如磁盘使用率 > 85%),触发邮件 / 短信通知。
  • 优缺点
    • 优点:灵活(可自定义指标)、轻量(无需安装复杂软件)、低成本;
    • 缺点:无统一管理平台(脚本分散)、无法可视化(需手动查日志)、扩展性差(集群环境下难维护)。

3、专业监控软件(全自动化,企业级首选)

当监控对象超过 10 台、或需监控复杂对象(如分布式应用、网络设备)时,专业监控软件是必然选择。你提到的ZabbixPrometheus是当前最主流的两款,两者定位和特点差异明显:

对比维度ZabbixPrometheus
核心定位全能型监控平台(开箱即用)云原生时代的指标监控系统(侧重灵活性)
适用场景传统 IT 环境(物理机、虚拟机、网络设备)、中小规模集群云原生环境(K8s、Docker、微服务)、大规模分布式系统
数据存储自带数据库(MySQL/PostgreSQL),适合结构化指标时序数据库(TSDB),适合高并发、高 cardinality 指标(如百万级 Pod 监控)
易用性有成熟 Web 界面,配置简单(图形化操作),适合运维新手需搭配 Grafana 做可视化,配置偏代码化(YAML),需一定学习成本
扩展性支持插件,但定制化需二次开发生态丰富(如 Alertmanager 告警、Exporter 采集),扩展性极强

二、Zabbix 监控

(一)数据获取方式

        Zabbix 的核心能力之一是 “多协议适配”,可针对不同类型的监控对象,选择最优的数据采集方式,确保采集效率和指标准确性。

1、Zabbix Agent(服务器 / 主机监控首选)

Download Zabbix agents

  • 核心定位:用于采集操作系统层指标(如 CPU、内存、磁盘、进程),是 Zabbix 监控服务器(Linux/Windows)的默认方式。
  • 工作模式
    • 被动模式(默认):Zabbix Server 主动向 Agent 发送采集请求,Agent 返回数据(适合监控端数量少的场景);
    • 主动模式:Agent 主动向 Server 上报数据(适合监控端数量多的场景,减轻 Server 压力)。
  • 适用对象:物理机、虚拟机、云服务器(ECS/VMware)。
  • 核心监控指标
    • 系统资源:CPU 使用率、内存使用率、磁盘 IO、网络吞吐量;
    • 系统状态:开机时长、进程数、登录用户数、文件句柄数;
  • 部署注意:需在被监控主机上安装对应系统的 Agent(如zabbix-agent2,支持更多指标),并开放端口(默认 10050/TCP)。

2、 SNMP 协议(网络设备监控专属)

  • 核心定位:用于采集网络设备层指标,是监控交换机、路由器、防火墙等网络设备的行业标准协议(此类设备通常不支持安装 Agent)。
  • 关键信息
    • 端口:默认使用UDP/161(数据采集)、UDP/162( Trap 告警,设备主动上报异常);
    • 版本:推荐使用SNMP v2c(稳定、兼容性好),需注意:SNMP v1 安全性差(明文传输),SNMP v3 安全性高(加密 + 认证)但配置复杂,适合对安全性要求极高的场景。
  • 适用对象:交换机(华为 / 华三 / Cisco)、路由器、防火墙、IDS/IPS、网络打印机。
  • 核心监控指标
    • 设备状态:设备在线状态、端口 UP/DOWN;
    • 网络性能:端口带宽使用率、丢包率、延迟、ARP 表项;

3、 IPMI 协议(硬件设备监控专用)

  • 核心定位:用于采集服务器硬件层指标,无需依赖操作系统(即使服务器关机 / 系统崩溃,只要通电,仍可采集硬件数据)。
  • 原理:基于服务器的 “智能平台管理接口”(如戴尔 iDRAC、惠普 iLO、华为 iBMC),直接与硬件控制器通信。
  • 适用对象:物理服务器(需支持 IPMI 协议)、存储设备。
  • 核心监控指标
    • 硬件健康:CPU 温度、主板温度、硬盘温度;
    • 硬件状态:电源模块状态(是否故障)、风扇转速、内存插槽状态、硬盘 SMART 信息;
  • 部署注意:需在服务器 BMC 界面开启 IPMI 功能,并配置 Zabbix Server 的 IP 权限。

4、JMX 协议(Java 应用监控必备)

  • 核心定位:用于采集Java 应用 / 虚拟机(JVM)指标,解决 Java 应用 “黑盒监控” 问题(如无法通过 Agent 获取 JVM 内部状态)。
  • 原理:通过 Java 的 “Java Management Extensions” 接口,获取 JVM 及 Java 应用的运行数据,需搭配Zabbix Java Gateway(Zabbix 的 Java 代理组件)实现通信。
  • 适用对象:Java 应用(如 Tomcat、Jenkins、Spring Boot 服务)、中间件(如 ActiveMQ、Elasticsearch)。
  • 核心监控指标
    • JVM 状态:堆内存使用率、非堆内存使用率、GC 次数 / 耗时、线程数(活跃 / 阻塞);
    • 应用状态:请求响应时间、请求错误率、连接池状态(如数据库连接数);
  • 部署注意:需在 Java 应用启动参数中添加 JMX 配置(如-Dcom.sun.management.jmxremote),并确保 Zabbix Java Gateway 可访问应用的 JMX 端口(默认 1099)。

(二)Zabbix Server 部署

1、时间同步配置:确保监控时序准确性

        时间同步是监控系统的基础 ——Zabbix 的告警、历史数据记录均依赖精确的时间戳,若服务器时间偏差,会导致监控数据混乱、告警时序错误。

# 配置定时任务,每30分钟同步一次时间(阿里云NTP服务器)
echo "*/30 * * * * /usr/sbin/ntpdate 120.25.115.20 &> /dev/null" >> /var/spool/cron/root
crontab -l
# 120.25.115.20(阿里云公共 NTP 服务器
# 立即执行一次时间同步,验证效果
ntpdate -v 120.25.115.20

2、添加 EPEL 源、安装PHP

        Zabbix 部署过程中需要部分第三方依赖包(如编译工具、扩展库),EPEL(Extra Packages for Enterprise Linux)源提供了这些补充包,推荐使用阿里云镜像加速下载。

# 配置阿里云CentOS 7基础源(系统必备)
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
vim /etc/yum.repos.d/php74.repo
yum clean all
yum install php
# 验证PHP版本(输出7.4.x即成功)
php -v
mkdir -p /var/run/php-fpm/
chown -R zabbix:zabbix /var/run/php-fpm/
[root@localhost ~] vim /etc/php-fpm.d/zabbix.conf
[zabbix]
user = zabbix
group = zabbix
listen.group = apache
listen.mode = 0660
listen = /var/run/php-fpm/zabbix.sock
;listen.acl_users = apache,nginx
listen.allowed_clients = 127.0.0.1;
[root@localhost ~] ls -l /var/run/php-fpm/zabbix.sock
# srw-rw----. 1 root apache 0 9月  24 18:03 /var/run/php-fpm/zabbix.sock
[root@localhost ~] chown zabbix:apache /var/run/php-fpm/
[root@localhost ~] php-fpm -t
# [24-Sep-2025 18:01:32] NOTICE: configuration file /etc/php-fpm.conf test is successful
[root@localhost ~] systemctl start php-fpm.service
[root@localhost ~] systemctl status php-fpm.service
  • “属主 zabbix” 是为了让 PHP-FPM 进程(运行在 zabbix 用户下)能正常管理 Socket 文件,同时限制进程权限,避免安全风险;
  • “属组 apache” 是为了让 Apache 进程(运行在 apache 用户下)能通过 “属组权限” 访问 Socket,实现通信需求;
  • 若都设为 apache,相当于把 “Web 服务” 和 “脚本运行” 的权限合并,一旦某一环出问题,整个服务的安全边界就会被突破,这在生产环境中是不推荐的。

问题 1:PHP-FPM 启动失败(Zabbix 专用池配置错误)
解决:

  • useradd -M -s /sbin/nologin zabbix;
  • mkdir -p /var/run/php-fpm/
  • chown -R zabbix:zabbix /var/run/php-fpm/
  • chmod 755 /var/run/php-fpm/
  • 确保 listen.allowed_clients = 127.0.0.1 结尾有分号,注释不兼容的 listen.acl_users。

问题 2:Permission denied(Apache 无权限访问 Socket)
现象:Apache 日志报 (13)Permission denied: AH02454: FCGI: attempt to connect to Unix domain socket ... failed
原因:PHP-FPM 创建的 zabbix.sock 仅允许 zabbix 用户访问,Apache 运行用户(apache)无权限
解决:编辑 Zabbix 池配置 /etc/php-fpm.d/zabbix.conf,添加权限配置:

  • listen.group = apache  # 让 Socket 属于 apache 组
  • listen.mode = 0660     # 组内用户有读写权限
  • 重启服务:systemctl restart php-fpm.service && systemctl restart httpd.service;
  • 验证权限:ls -l /var/run/php-fpm/zabbix.sock(应显示 zabbix:apache 所属,权限 rw-rw----)。

3、添加 Zabbix 官方仓库:获取稳定版本软件

PHP: Releases

      Zabbix Official Repository

      https://mirrors.aliyun.com/zabbix/zabbix

      操作命令

       Zabbix 4.0 至 6.0 版本Zabbix 官方文档明确指出,其软件包可直接用于 CentOS 7。例如:

      • Zabbix 4.0 文档中提到:"Official Zabbix packages are available for RHEL 7, CentOS 7 and Oracle Linux 7."
      • Zabbix 5.0 文档说明:"Zabbix 5.0 LTS packages for Red Hat Enterprise Linux, CentOS, and Oracle Linux are available."

      4、 安装核心软件包:部署 Zabbix 服务组件

      Zabbix Server 依赖数据库存储监控数据,需要 Web 界面供可视化操作,需安装核心组件:

      • mariadb-server:替代 MySQL 的开源数据库,兼容 MySQL 语法,用于存储 Zabbix 的监控指标、主机配置等数据;
      • zabbix-server-mysql:Zabbix 服务端主程序,负责接收 Agent 数据、处理告警逻辑;
      • zabbix-web-mysql:基于 PHP 的 Web 管理界面,提供图形化配置和监控视图。
      # 创建Zabbix仓库配置文件
      cat > /etc/yum.repos.d/zabbix.repo << EOF
      [zabbix]
      name=zabbix
      baseurl=https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/
      enabled=1
      gpgcheck=0
      EOF
      [root@localhost ~] vim /etc/yum.repos.d/zabbix.repo
      # Zabbix 官方源将 “前端组件”(Web 相关)单独放在 [zabbix-frontend] 仓库,且默认禁用(enabled=0)
      # 清理yum缓存,使仓库生效(可省略)
      yum clean all && yum makecache
      # 1. 下载与已安装的 php-common 匹配的 ldap 扩展(7.4.33 版本)
      wget https://rpms.remirepo.net/enterprise/7/php74/x86_64/php-ldap-7.4.33-15.el7.remi.x86_64.rpm
      yum install -y ./php-ldap-7.4.33-15.el7.remi.x86_64.rpm
      # 2.安装MariaDB(数据库)、Zabbix Server(服务端)、Zabbix Web(Web界面)
      yum install -y mariadb-server zabbix-server-mysql zabbix-web-mysql
      # 启动并设置Zabbix服务器开机自启
      [root@localhost ~] systemctl enable --now zabbix-server.service
      [root@localhost ~] systemctl enable --now mariadb.service
      [root@localhost ~] systemctl status zabbix-server.service
      [root@localhost ~] systemctl status mariadb.service

      5. 数据库初始化:创建 Zabbix 专属库和表

      Zabbix 需要专用数据库存储数据,需手动创建数据库、授权用户,并导入初始表结构。

      # 1.启动MariaDB并设置开机自启
      systemctl enable --now mariadb
      # 2. 初始化数据库(设置root密码,按提示操作,默认无密码直接回车)
      mysql_secure_installation
      # 3. 创建Zabbix数据库和用户(替换[your_password]为你的密码,如123456)
      mysql -u root -pSu@548165
      MariaDB [(none)]> create database zabbix charset utf8 collate utf8_bin;
      CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'zabbix123';
      GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';
      FLUSH PRIVILEGES;
      SHOW GRANTS FOR 'zabbix'@'localhost';
      exit;
      # 4. 安装Zabbix服务端和Web端
      yum install -y zabbix-server-mysql zabbix-web-mysql
      # 5. 导入Zabbix初始数据
      【4/5.0】
      [root@localhost ~] cd /usr/share/doc/zabbix-server-mysql-5.0.47/
      [root@localhost zabbix-server-mysql-5.0.47] ls
      # AUTHORS  ChangeLog  COPYING  create.sql.gz  double.sql  NEWS  README
      [root@localhost zabbix-server-mysql-5.0.47] zcat create.sql.gz | mysql -uroot zabbix -p'Su@548165'
      [root@localhost ~] mysql -u root -pSu@548165
      MariaDB [(none)]> use zabbix;
      # Database changed
      MariaDB [zabbix]> show tables;
      166 rows in set (0.00 sec)
      # Zabbix 从 5.4 版本开始调整了数据库脚本的结构和存放路径,将原来的单文件 create.sql.gz 拆分为多个独立脚本,脚本存放路径从调整为 /usr/share/zabbix-mysql/
      [root@host-10 ~] ls /usr/share/zabbix-mysql/
      # data.sql  double.sql  history_pk_prepare.sql  images.sql  schema.sql
      # 1. 先导入基础表结构
      mysql -u zabbix -p zabbix < /usr/share/zabbix-mysql/schema.sql
      # 2. 再导入历史数据相关表(可选,针对分区表)
      mysql -u zabbix -p zabbix < /usr/share/zabbix-mysql/history_pk_prepare.sql
      # 3. 导入图像数据
      mysql -u zabbix -p zabbix < /usr/share/zabbix-mysql/images.sql
      # 4. 最后导入初始数据(包含默认用户、模板等)
      mysql -u zabbix -p zabbix < /usr/share/zabbix-mysql/data.sql
      # double.sql 是可选的,用于支持高精度浮点数,根据需要导入
      # mysql -u zabbix -p zabbix < /usr/share/zabbix-mysql/double.sql
      • 数据库字符集选择utf8和collate utf8_bin,确保支持中文且区分大小写(避免表名 / 字段名冲突);
      • create.sql.gz包含 Zabbix 所需的所有表结构和初始数据(如默认用户、模板),导入过程可能耗时 1-2 分钟(视服务器性能而定)。

      6. 配置 Zabbix Server:关联数据库连接

              Zabbix Server 需通过配置文件获取数据库连接信息,才能正常读写数据。

      # 编辑Zabbix Server配置文件
      vim /etc/zabbix/zabbix_server.conf
      # 配置以下参数(确保与数据库设置一致)
      DBHost=localhost
      DBName=zabbix
      DBUser=zabbix
      DBPassword=zabbix123
      DBSocket=/var/lib/mysql/mysql.sock
      • DBHost=localhost:数据库与 Zabbix Server 同机,使用本地连接;
      • DBPassword=redhat:需与数据库授权时设置的密码一致;
      • DBSocket:指定 MySQL 套接字文件路径,本地连接效率高于 TCP/IP。

      7. 启动 Zabbix Server:验证服务运行状态

      配置完成后,启动 Zabbix Server 服务并检查端口监听状态,确认服务正常运行。

      systemctl start zabbix-server
      systemctl enable zabbix-server
      [root@localhost ~] tail -20 /var/log/zabbix/zabbix_server.log
      # 日志中出现 server #XX started [XXX] 这类信息,代表 Zabbix 的核心工作进程全部启动
      [root@localhost ~] netstat -tunlp |grep za
      # tcp        0      0 0.0.0.0:10051           0.0.0.0:*               LISTEN      62321/zabbix_server
      • 10051 端口是 Zabbix Server 与 Agent 通信的默认端口,需确保未被防火墙拦截;
      • 若服务启动失败,可查看日志排查:tail -f /var/log/zabbix/zabbix_server.log(常见问题:数据库连接失败、权限不足)。

      8. 配置 Web 界面:初始化 PHP 环境

              Zabbix Web 界面基于 PHP 开发,需配置时区确保时间显示正确,并启动 Web 服务器。

      [root@localhost ~] rpm -q httpdhttpd-2.4.6-99.el7.centos.1.x86_64
      # 安装zabbix时,会被作为依赖自动装上
      [root@localhost ~] vim /etc/httpd/conf.d/zabbix.conf
      php_value date.timezone Asia/Shanghai
      [root@localhost ~] systemctl restart httpd.service
      [root@localhost ~] systemctl enable  httpd.service
      [root@localhost ~]# netstat -tunlp |grep ht
      tcp6       0      0 :::80                   :::*                    LISTEN      62436/httpd
      [root@localhost ~] chown :zabbix /etc/zabbix/web/
      [root@localhost ~] chmod 755 /etc/zabbix/web/
      [root@localhost ~] chmod 644 /etc/zabbix/web/*
      [root@localhost ~] systemctl restart php-fpm.service
      [root@localhost ~] systemctl restart httpd.service

      9. 访问 Zabbix Web UI:完成初始化配置

      通过浏览器访问 Web 界面,完成首次配置并登录系统。

      操作步骤

      1. 访问地址:http://服务器IP/zabbix(示例:http://192.168.140.10/zabbix);
      2. 按引导完成数据库连接测试(默认已配置正确,直接下一步);
      3. 登录系统:默认用户名Admin,密码zabbix(首次登录建议立即修改密码)。

      说明

      • 首次登录后,系统会显示默认仪表盘,包含 Zabbix Server 的基础监控数据;
      • 若访问失败,检查 httpd 服务状态(systemctl status httpd)和防火墙规则(开放 80 端口)。
      # 在 Zabbix Web 目录下创建 test_timezone.php
      echo "" > /usr/share/zabbix/test_timezone.php
      http://192.168.140.22/zabbix/test_timezone.php
      2025-09-24 10:27:00

              然后在浏览器访问:http://你的服务器IP/zabbix/test_timezone.php如果显示当前中国时间(比如 2025-09-24 18:30:00),说明时区配置正确;如果显示其他时区时间(如 UTC 时间),则检查配置是否写错。

      测试完成后可以删除临时文件:

      rm -f /usr/share/zabbix/test_timezone.php

      Zabbix 默认管理员账号信息是:

      • 用户名Admin(首字母必须大写,小写会报错)
      • 密码zabbix(全小写,默认未修改时)

      汉化:

      补充:权限问题:

      [root@localhost ~] vim /etc/php-fpm.d/zabbix.conf
      [zabbix]
      user = zabbix
      group = zabbix
      listen.group = apache
      listen.mode = 0660
      若user,group是apache
      1. PHP-FPM Socket 目录(/var/run/php-fpm/)
      chown -R apache:apache /var/run/php-fpm/
      chmod 755 /var/run/php-fpm/
      2. PHP 会话目录(/var/lib/php/session/)
      chown root:apache /var/lib/php/session/
      chmod g+w /var/lib/php/session/
      3. PHP-FPM 日志文件(若配置了专属日志)
      chown apache:apache /var/log/php-fpm/zabbix-pool-error.log
      chmod 644 /var/log/php-fpm/zabbix-pool-error.log
      ✅ 最后:重启服务验证

      核心:只关注 3 个目录 + 对应的用户

              Zabbix 运行时,只有 apache 用户(Web 界面用)和 zabbix 用户(Server/Agent 服务用)需要目录权限,具体对应关系如下:

      目录路径用途需授权的用户作用
      /etc/zabbix/web/存放 Web 配置文件 zabbix.conf.phpapache(Web 服务运行身份)让 Web 界面能读取配置文件,或安装向导能写入配置文件
      /var/lib/php/session/存放 PHP 会话文件(Web 登录、安装向导需要)zabbix(PHP-FPM 运行身份)让 Zabbix Web 能创建 / 读写会话文件,避免 “无法启动 session” 报错
      /var/run/php-fpm/存放 PHP-FPM Socket 文件(Web 与 PHP 通信用)zabbix(PHP-FPM 运行身份)让 PHP-FPM 能生成 Socket 文件,Apache 能通过 Socket 调用 PHP

      三、本机监控配置(监控 Zabbix Server 自身)

              部署完成后,需配置 Zabbix 监控自身状态(如 CPU、内存使用率),验证监控链路是否通畅。此时监控自身未正确启用。

      1. 安装并配置 Zabbix Agent

              Zabbix Agent 是部署在被监控主机上的采集组件,负责收集系统指标并发送给 Server。

      [root@localhost ~] rpm -q zabbix-agent
      #未安装软件包 zabbix-agent
      [root@localhost ~] yum install zabbix-agent
      # 编辑Agent配置文件
      vim /etc/zabbix/zabbix_agentd.conf
      # 配置核心参数(指向Zabbix Server)
      Server=192.168.140.22  # Zabbix Server的IP地址(本机监控填localhost或本机IP)
      ServerActive=192.168.140.22  # 主动模式下Server的地址
      Hostname=Zabbix_server  # 主机名,需在Web界面唯一标识
      # 启动Agent并设置开机自启
      systemctl enable --now zabbix-agent
      # 检查10050端口(Agent默认端口)监听状态
      netstat -tunlp | grep zabbix_agentd
      • 工作模式
        • 被动模式(默认):Zabbix Server 主动向 Agent 发送采集请求(Server参数指定允许的 Server 地址);
        • 主动模式:Agent 主动向 Server 上报数据(ServerActive参数指定目标 Server 地址);
      • Hostname必须唯一,将在 Web 界面用于识别该主机;
      • 10050 端口需开放,确保 Server 能正常通信。

      //变绿

      2. Web 界面配置主机监控

              在 Zabbix Web 界面中添加本机为监控对象,关联基础模板实现指标采集。

      操作步骤

      (1)登录 Web 界面,进入配置 > 主机 > 创建主机

      (2)填写主机信息:

      • 主机名称:与 Agent 配置的Hostname一致(Zabbix_server);
      • 可见名称:自定义(如 “Zabbix 服务器”);
      • 群组:选择Linux servers(或新建群组);
      • IP 地址:填写本机 IP(如192.168.140.10);

      (3)切换到 “模板” 标签,搜索并链接Template OS Linux(Linux 系统基础监控模板);

      (4)点击 “添加” 完成配置。

      3. 查看监控图形:验证数据采集

      配置完成后(约 5-10 分钟),可在 Web 界面查看本机的监控指标图形。

      操作步骤

      1. 进入监控 > 图形;Zabbix 5.0 对图形功能的位置进行了调整,图形选项不再像 Zabbix 4.0 那样直接在 “监测” 菜单下,而是整合到了 “监测”→“主机”→“图形” 中。你可以检查是否找错了位置。
      2. 选择主机Zabbix_server
      3. 选择需查看的图形(如 “CPU 使用率”“内存使用率”“磁盘 I/O”);
      4. 查看实时或历史趋势数据,确认指标正常采集。

      4. 解决图形中文乱码问题

      Zabbix 默认字体不支持中文,导致图形中中文显示为方块,需替换字体文件。

      操作命令

      解决办法:1)用英文

      2)为zabbix添加字体文件

      复制一份传到虚拟机上

      [root@localhost ~] mv simkai.ttf /usr/share/zabbix/assets/fonts/
      [root@localhost ~] ls /usr/share/zabbix/assets/fonts/
      # graphfont.ttf  simkai.ttf
      [root@localhost ~] vim /usr/share/zabbix/include/defines.inc.php
      define('ZBX_GRAPH_FONT_NAME', 'simkai'); // 图形字体
      define('ZBX_FONT_NAME', 'simkai'); // 全局字体

      回去刷新

      四、添加监控机

      (一)内置监控方法

      (二)添加被监控机

      [root@host-20 ~] cat > /etc/yum.repos.d/zabbix.repo << EOF
      [zabbix]
      name=zabbix
      baseurl=https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/
      enabled=1
      gpgcheck=0
      EOF
      [root@host-20 ~] vim /etc/yum.repos.d/zabbix.repo
      [root@host-20 ~] yum install zabbix-agent
      [root@host-20 ~] vim /etc/zabbix/zabbix_agentd.conf
      Server=192.168.140.22
      ServerActive=192.168.140.22
      Hostname=za_node01
      [root@host-20 ~] systemctl enable --now zabbix-agent.service
      [root@host-20 ~] netstat -tunlp|grep za
      # tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN

      //可以先自己创几个主机组

      // 一个监控项对应一份监控数据。新添加的监控项、图形等都是空的。

      五、监控数据方法

      (一)链接模板

      //等一段时间、若能获取数据、启用会变绿

      (二)手动创建监控项 -- zabbix、agent内置的key

      // 若图形为空白

      (1)在 Zabbix Server 上用 zabbix_get 测试该键值:

      [root@localhost ~]# zabbix_get -s 192.168.140.20 -p 10050 -k "net.if.in[ens33,bytes]"

      • 若返回数字(如1497173),说明监控项正常,问题在图形关联;
      • 若返回空或 0,检查网卡名称是否正确(在 Agent 主机执行 ip addr 确认是否为 ens33)。

      (2)刷新页面或清除浏览器缓存(有时缓存会导致数据不更新)。

      (三)自定义Key做监控

      1、确保被监控端已开启自定义参数:

      # 在/etc/zabbix/zabbix_agentd.conf中设置
      UnsafeUserParameters=1
      UserParameter=, # 需要脚本只返回一个结果

      ① 无参数

      ② 有参数

      • 若参数含特殊字符(如空格),需用引号包裹,如key名称["/data/log files"]
      • $$2中的第一个$是转义符,确保 Zabbix 不解析$2,而是传递给(如:awk)作为字段引用
      • 命令权限:确保zabbix用户有权限执行命令(如 MySQL 免密配置、目录读权限等),可通过su - zabbix -c "命令"验证。
      • 结果唯一性:脚本 / 命令必须返回唯一结果(如单个数字、字符串),避免多行输出。
      • 特殊字符处理:命令中若含引号、空格等,需正确转义,例如用单引号包裹命令,内部变量用双引号:
      UserParameter=test.key[*],echo '参数是:'"$1"  # 正确拼接参数

      2、权限

      ① 所有配置的命令 / 脚本需确保 zabbix 用户有执行权限:

      chmod +x [脚本路径]
      chown zabbix:zabbix [脚本路径]  # 或通过sudo授权

      ② 源码编译软件的目录读权限(针对非默认路径软件)

              若 MySQL、Nginx 等软件是源码编译安装,而非 yum/rpm 默认路径,需额外给zabbix用户配置目录读权限,否则监控命令会因找不到二进制文件报错。

      3、应用监控示例集合

      (1)数据库监控(通用 SQL 查询型)

      前提:下载mariadb

      # 安装MariaDB服务器和客户端
      [root@host-20 ~] yum install -y mariadb mariadb-server
      # 启动并设置开机自启
      [root@host-20 ~] systemctl enable --now mariadb
      [root@host-20 ~] systemctl status mariadb
      [root@host-20 ~] netstat -tulpn | grep 3306
      tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      5248/mysqld

      ① 监控连接数量

      [root@host-20 ~] vim /etc/zabbix/zabbix_agentd.conf
      [root@host-20 ~] systemctl restart zabbix-agent.service
      UserParameter=mysql.conn.number,mysql -uroot -e "show processlist" | sed '1d' | wc -l
      [root@localhost ~] zabbix_get -s 192.168.140.20 -k mysql.conn.number
      # 1

      ② 监控MySQL用户数

      # 监控特定数据库表记录数
      (以MySQL为例)
      [root@host_21 ~] vim /etc/zabbix/zabbix_agentd.conf
      UnsafeUserParameters=1
      UserParameter=mysql.user.number,mysql -uroot -e "select count(*) from mysql.user" | sed '1d'
      [root@host-20 ~] systemctl restart zabbix-agent.service
      [root@localhost ~] zabbix_get -s 192.168.140.20 -k mysql.user.number
      # 6

       ③ MySQL 增删改查数量(mysql.trans.number[*]

      [root@host_21 ~] vim /etc/zabbix/zabbix_agentd.conf
      UserParameter=mysql.operation.number[*],mysqladmin extended-status | awk '$$2=="Com_'$1'"{print $$4}'
      [root@host-20 ~] systemctl restart zabbix-agent.service
      [root@localhost ~]# zabbix_get -s 192.168.140.20 -k mysql.operation.number[select]
      [root@localhost ~]# zabbix_get -s 192.168.140.20 -k mysql.operation.number[insert]
      [root@localhost ~]# zabbix_get -s 192.168.140.20 -k mysql.operation.number[delete]
      [root@localhost ~]# zabbix_get -s 192.168.140.20 -k mysql.operation.number[update]

       ④ MySQL 复制线程状态(mysql.slave.state[*]

      [root@lvm__100 ~]# mysql -uroot -pSu@548165
      mysql> CREATE USER 'repl'@'192.168.140.20' IDENTIFIED WITH mysql_native_password BY 'Repl@548165';
      mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.140.20';
      mysql> FLUSH PRIVILEGES;
      mysql> SHOW MASTER STATUS;
      +------------------+----------+--------------+------------------+-------------------+
      | mysql-bin.000006 |      868 |              |                  |                   |
      +------------------+----------+--------------+------------------+-------------------+
      [root@host-20 ~]# vim /etc/my.cnf.d/server.cnf
      server-id = 4
      relay_log = /var/log/mariadb/relay-bin.log  # 中继日志
      log_bin = /var/log/mariadb/mariadb-bin.log  # 可选,从库也开启binlog(用于级联复制)
      read_only = 1  # 从库设为只读(可选,增强安全性)
      [root@host-20 ~]# systemctl restart mariadb
      [root@host-20 ~]# systemctl status mariadb  # 确保显示“active (running)”
      [root@host-20 ~]# mysql -uroot
      RESET SLAVE ALL;
      # 3. 重新执行 CHANGE MASTER TO(这次确保参数正确,尤其是主库IP)
      CHANGE MASTER TOMASTER_HOST = '192.168.140.51',  # 主库实际IP,不要写错MASTER_USER = 'repl',MASTER_PASSWORD = 'Repl@548165',  # 复制用户密码,确保和主库一致MASTER_LOG_FILE = 'mysql-bin.000006',  # 主库 SHOW MASTER STATUS 的 File 值MASTER_LOG_POS = 868;  # 主库 SHOW MASTER STATUS 的 Position 值
      START SLAVE;

      # 第一步:先验证脚本本身(在被监控端执行)
      [root@host-20 ~]# vim /opt/work/check_mysql_relcation.sh
      #!/bin/bash
      #
      state=$(mysql -uroot -e "show slave status\G" | awk "/Slave_${1}_Running:/{print \$2}")
      if [ $state == "Yes" ]; thenecho 1
      elseecho 0
      fi
      [root@host-20 ~]# bash  /opt/work/check_mysql_relcation.sh IO  # 1
      [root@host-20 ~]# bash  /opt/work/check_mysql_relcation.sh SQL # 1
      [root@host-20 ~]# vim /etc/zabbix/zabbix_agentd.conf
      UserParameter=mysql.replcation.state[*],bash /opt/work/check_mysql_relcation.sh $1
      [root@localhost ~]# zabbix_get -s 192.168.140.20 -k mysql.replcation.state[SQL]
      [root@localhost ~]# zabbix_get -s 192.168.140.20 -k mysql.replcation.state[IO]

      zabbix对应这个脚本文件权限需要有读权限。

       创建监控项

      创建图表-查看

      通用步骤:在 Web 界面添加监控项和图形

      1. 登录 Zabbix Web 界面

      2. 进入 "配置" -> "主机",选择 za_node01

      3. 点击 "监控项" -> "创建监控项",为每个 key 创建对应的监控项

      4. 点击 "图形" -> "创建图形",将相关监控项添加到同一个图形中

      5. 设置合适的名称和更新间隔

      1)多个机子打开mysql -uroot
      2)创建用户
      MariaDB [(none)]> create user 'test1'@'localhost' identified by 'test123';
      MariaDB [(none)]> create user 'test2'@'localhost' identified by 'test123';
      MariaDB [(none)]> create user 'test3'@'localhost' identified by 'test123';
      MariaDB [(none)]> flush privileges;

      (2)Web 应用监控(以 Nginx 为例)

      # 监控Nginx活跃连接数
      UserParameter=nginx.active.connections,netstat -anp | grep nginx | grep ESTABLISHED | wc -l
      # 监控Nginx请求处理数
      UserParameter=nginx.requests.persecond,awk 'END{print $1}' /var/log/nginx/access.log | tail -n1
      # 监控4xx错误率
      UserParameter=nginx.4xx.rate,awk 'BEGIN{count=0;total=0} $9~/^4/{count++} {total++} END{print count/total*100}' /var/log/nginx/access.log

      (3)Java 应用监控(通过 JMXProxy 或命令行)

      # 监控Java进程堆内存使用(需要jstat工具)
      UserParameter=java.heap.used[*],jstat -gc $1 | awk 'NR==2 {print $3}'
      # 监控Java线程数
      UserParameter=java.threads.count[*],ps -p $1 -L | wc -l
      # 示例:监控特定Java进程(如PID为1234的应用)
      # 在server端测试:zabbix_get -s 目标IP -k java.heap.used[1234]

      (4) 缓存服务监控(以 Redis 为例)

      # 监控Redis已用内存
      UserParameter=redis.memory.used,redis-cli info memory | grep used_memory: | cut -d: -f2
      # 监控Redis连接数
      UserParameter=redis.connections,redis-cli info clients | grep connected_clients: | cut -d: -f2
      # 监控Redis键总数
      UserParameter=redis.keys.total,redis-cli dbsize

      (5) 消息队列监控(以 RabbitMQ 为例)

      # 监控队列消息堆积数
      UserParameter=rabbitmq.queue.messages[*],rabbitmqctl list_queues name messages | grep $1 | awk '{print $2}'
      # 监控消费者数量
      UserParameter=rabbitmq.queue.consumers[*],rabbitmqctl list_queues name consumers | grep $1 | awk '{print $2}'

      ​​​​​​

      例题:

      1. 监控 node01 主机网卡流量及错误包

      首先创建流量监控脚本:

      cat > /opt/check_network.sh << 'EOF'
      #!/bin/bash
      # 监控网卡流量及错误包
      INTERFACE=$1
      METRIC=$2
      case $METRIC inin_bytes)cat /proc/net/dev | grep "$INTERFACE" | awk '{print $2}';;out_bytes)cat /proc/net/dev | grep "$INTERFACE" | awk '{print $10}';;total_bytes)cat /proc/net/dev | grep "$INTERFACE" | awk '{print $2 + $10}';;in_errors)cat /proc/net/dev | grep "$INTERFACE" | awk '{print $3}';;out_errors)cat /proc/net/dev | grep "$INTERFACE" | awk '{print $11}';;*)echo "Invalid metric"exit 1;;
      esac
      EOF
      chmod +x /opt/check_network.sh
      chown zabbix:zabbix /opt/check_network.sh

      在 zabbix_agentd.conf 中添加:

      UserParameter=net.traffic[*],/opt/check_network.sh $1 $2

      重启 zabbix-agent:

      systemctl restart zabbix-agent

      测试(以 eth0 为例):

      zabbix_get -s 192.168.140.11 -k net.traffic[eth0,in_bytes]
      zabbix_get -s 192.168.140.11 -k net.traffic[eth0,out_bytes]

      2. 监控 /etc/passwd 文件数据变化

      在 zabbix_agentd.conf 中添加:

      UserParameter=file.passwd.checksum,md5sum /etc/passwd | awk '{print $1}'

      重启 zabbix-agent 后测试:

      zabbix_get -s 192.168.140.11 -k file.passwd.checksum

      3. 监控 ftp, httpd, mysql 服务状态

      创建服务监控脚本:

      cat > /opt/check_service.sh << 'EOF'
      #!/bin/bash
      SERVICE=$1
      if systemctl is-active --quiet $SERVICE; thenecho 1  # 服务运行中
      elseecho 0  # 服务未运行
      fi
      EOF
      chmod +x /opt/check_service.sh
      chown zabbix:zabbix /opt/check_service.sh

      在 zabbix_agentd.conf 中添加:

      UserParameter=service.status[*],/opt/check_service.sh $1

      重启 zabbix-agent 后测试:

      zabbix_get -s 192.168.140.11 -k service.status[vsftpd]
      zabbix_get -s 192.168.140.11 -k service.status[httpd]
      zabbix_get -s 192.168.140.11 -k service.status[mysqld]

      4. 监控 /opt/data 分区剩余空间

      首先添加硬盘并创建挂载点(如果尚未完成):

      # 假设新硬盘为/dev/sdb
      fdisk /dev/sdb  # 创建200M分区
      mkfs.ext4 /dev/sdb1
      mkdir -p /opt/data
      mount /dev/sdb1 /opt/data
      # 添加到fstab确保开机挂载
      echo "/dev/sdb1 /opt/data ext4 defaults 0 0" >> /etc/fstab

      在 zabbix_agentd.conf 中添加:

      UserParameter=disk.opt.data.free,df -P /opt/data | awk 'NR==2 {print $4}'

      重启 zabbix-agent 后测试:

      zabbix_get -s 192.168.140.11 -k disk.opt.data.free

      5. 监控 apache 和 mysql 用户的进程数

      在 zabbix_agentd.conf 中添加:

      UserParameter=process.count.apache,ps -u apache --no-headers | wc -l
      UserParameter=process.count.mysql,ps -u mysql --no-headers | wc -l

      重启 zabbix-agent 后测试:

      zabbix_get -s 192.168.140.11 -k process.count.apache
      zabbix_get -s 192.168.140.11 -k process.count.mysql

      6. 监控 httpd 和 mysql 进程的 CPU 和内存使用率

      创建资源监控脚本:

      cat > /opt/check_process_resources.sh << 'EOF'
      #!/bin/bash
      PROCESS=$1
      METRIC=$2
      case $METRIC incpu)ps -C $PROCESS -o %cpu --no-headers | awk '{sum += $1} END {print sum}';;mem)ps -C $PROCESS -o %mem --no-headers | awk '{sum += $1} END {print sum}';;*)echo "Invalid metric"exit 1;;
      esac
      EOF
      chmod +x /opt/check_process_resources.sh
      chown zabbix:zabbix /opt/check_process_resources.sh

      在 zabbix_agentd.conf 中添加:

      UserParameter=process.resource[*],/opt/check_process_resources.sh $1 $2

      重启 zabbix-agent 后测试:

      zabbix_get -s 192.168.140.11 -k process.resource[httpd,cpu]
      zabbix_get -s 192.168.140.11 -k process.resource[mysqld,mem]

      7. 监控物理内存剩余量和 buffer/cache 大小

      在 zabbix_agentd.conf 中添加:

      UserParameter=memory.free,free -b | awk 'NR==2 {print $4}'
      UserParameter=memory.buffer,free -b | awk 'NR==2 {print $6}'
      UserParameter=memory.cache,free -b | awk 'NR==2 {print $7}'

      重启 zabbix-agent 后测试:

      zabbix_get -s 192.168.140.11 -k memory.free
      zabbix_get -s 192.168.140.11 -k memory.buffer
      zabbix_get -s 192.168.140.11 -k memory.cache

      8. 监控 MySQL 主从复制状态

      使用之前已创建的 /opt/check_mysql_slave.sh 脚本,并添加复制延迟监控:

      在 zabbix_agentd.conf 中补充:

      UserParameter=mysql.slave.delay,mysql -uroot -e "show slave status\G" | awk '/Seconds_Behind_Master:/{print $2}'

      重启 zabbix-agent 后测试:

      zabbix_get -s 192.168.140.11 -k mysql.slave.delay

      待细化

      本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/935536.shtml

      如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

      相关文章

      dos命令和命令提示符

      打开命令提示符 方式开始菜单 win键+r 输入cmd打开 在任意文件下面,按住shift键+鼠标右键,选择在此处打开命令行窗口 资源管理器的地址栏前面加上 cmd 路径管理员方式运行 打开菜单找到命令提示符,右键选择以管理员…

      27. 移除元素 暴力+快慢指针+相向双指针

      27. 移除元素 1、暴力 解题过程 外层循环遍历nums数组,当遇到等于val的元素时,进入内层循环将后续元素均前移一位,覆盖前一个元素。 时间复杂度: O(n^2) 空间复杂度: O(1) class Solution {public int removeElemen…

      ST表学习笔记

      前置知识:倍增 其实倍增就是二进制拆分,因为有的数可能很大,我们按照2的幂次去查询,就能用 \(log_2n\) 的时间复杂度求解 ST 表 创建 ST 表运用的是倍增思想,我们可以用 \(O(nlogn)\) 的时间创建一个二维表,根据…

      谈一类易实现的非四毛子线性 RMQ

      考虑设 \(B=64\),每 \(64\) 个元素分一块。 处理跨块查询 这样的查询,是由一段的后缀拼上若干整块拼上一段前缀。 因此我们维护每个块的前后缀最值以及将每一块的最值拿出建立 \(ST\) 表。 复杂度 \(O(n+\frac{n}{B}…

      我们学会在具体情境中做出恰当判断

      当前AI的"情感"本质是数据驱动的符号运算。虽然能通过分析人类表情、语言模式生成"合理"回应,但缺乏神经递质调节和生物电信号支持5。例如,AI可以模仿安慰人的语言,却不会因共情而失眠,也不会…

      【教程】无需第三方应用,Windows自带邮箱如何绑定QQ邮箱等第三方邮箱

      无需第三方应用,Windows自带邮箱如何绑定QQ邮箱等第三方邮箱前言 CSDN主页:https://blog.csdn.net/rvdgdsva 博客园主页:https://www.cnblogs.com/hassle微软的 Outlook 按下win键弹出搜索栏,搜索栏输入邮件就会弹…

      ubuntu默认桌面解决vnc灰屏

      ubuntu默认桌面解决vnc灰屏一、安装vncserver sudo apt-get install tightvncserver 二、创建/关闭端口 # 创建端口 vncserver :1 -geometry 1920x1000 -depth 24# 关闭端口 vncserver -kill :1 三、解决VNC连接后灰…

      2025婚纱摄影影楼权威推荐榜:专业团队与创意拍摄打造梦幻婚礼

      随着婚庆行业的不断发展,越来越多的新人开始注重婚纱照的质量和创意。选择一家专业的婚纱摄影影楼,不仅能够记录下美好的瞬间,还能为婚礼增添更多浪漫与回忆。为了帮助筛选婚纱照哪家影楼更专业品牌,特此发布权威推…

      分布式结构化存储系统-HBase访问方式

      分布式结构化存储系统-HBase访问方式 HBase提供了多种访问方式,包括HBase shell,HBase API,数据收集组件(比如Flume,Sqoop等),上层算框架以及Apache Phoenix等,本篇博客将详细介绍这几种方式。 一.HBase Shell…

      智能(embodied AI)、机器人视觉 + 交互、边缘 AI

      智能(embodied AI)、机器人视觉 + 交互、边缘 AI智能(embodied AI)、机器人视觉 + 交互、边缘 AI 智能(embodied AI)、机器人视觉 + 交互、边缘 AI 智能(embodied AI)、机器人视觉 + 交互、边缘 AI 智能(embo…

      【Azure APIM】自建网关(self-host gateway)收集请求的Header和Body内容到日志中的办法

      问题描述 使用 Azure API Management(APIM)时,需要记录每个 API 请求的 Header 和 Body,以便进行问题排查和审计,如何配置才能完整捕获这些信息呢?问题解答 在配置API的时候,启用 trace 策略来收集 inbound / …

      [JAVA]JDK多版本设置

      [JAVA]JDK多版本设置windows环境背景: 经常会遇到不同项目,需要不同版本的jdk版本,每次都需要手工修改环境变量 我这里遇到需要分别使用jdk1.8和jdk17解决: 通过bat设置好版本,通过脚本实现反复快速修改。 @echo …

      Google Veo3生成跳舞视频

      Google Veo3生成跳舞视频背景 Google Veo 3 是谷歌 DeepMind 于 2025 年 5 月推出的第三代 AI 视频生成模型,在视听同步、画质表现、创作控制等方面实现了显著突破, 视听协同生成 原生音频同步技术:支持文本或图…

      【PolarCTF】stackof

      1,pwntools 2,ida pro1. 首先下载文件,得到一个没有后缀名的stack_of文件。拿到ubuntu分别用file和checksec查看。2. 我们可以看到这是一个64位ELF文件,动态链接,符号表未被剥离,看上去没什么保护。 3. 接着拿到…

      我们离“科幻”还有多远?Yoshua Bengio_From System 1 Deep Learning to System 2 Deep Learning_NeurIPS 2019 感想

      我们离“科幻”还有多远?Yoshua Bengio_From System 1 Deep Learning to System 2 Deep Learning_NeurIPS 2019 感想不用我说大伙也知道,近几年来,AI发展极为迅速,对我们的生活和发展产生了巨大的影响;我自己很深…

      C# console get current screen DPI from user32.dll and gdi32.dll

      using System.Runtime.InteropServices;namespace ConsoleApp24 {internal class Program{ [DllImport("user32.dll")]static extern bool SetProcessDPIAware();[DllImport("user32.dll")]static…

      冬天快乐

      济南的秋雨,往往摆出一副生人勿近的冷淡模样,默默撑起一片云当做遮阳伞、或者吞吐着光线,叫人难以分辨雨丝的形态;有时甚至连一点声音的余地也不留下,只有叫你伸出手并深吸一口温柔的秋香,才算是通过了她共舞的申…

      新生赛 F,H,J 题解

      F. 金苹果 搜索题。 首先在输入中记录点 \(S,P,T\) 的坐标。 第一问,搜索要求不经过点 \(P\),可以将 px,py 记录成 #,然后从 \(S\) 开始搜(dfs 或 bfs 均可)能不能到达 \(T\)。 第二问,从 \(S\) 出发能否先经过 …

      pycharm跑python项目易出错的困难

      pycharm跑python项目易出错的困难pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&q…

      双端队列的0-1BFS

      问题: B. Labyrinth 代码: #include<bits/stdc++.h> using namespace std; #define int long long #define ll long long #define fi first #define se second #define vi vector<int> #define vll vecto…