一篇猛攻zabbix

一、部署zabbix

1.部署zabbix安装源

bash 复制代码
#安装官方源到系统中
[root@zabbix ~]# rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rhel/9/x86_64/zabbix-release-latest-7.0.el9.noarch.rpm
[root@zabbix ~]# dnf clean all
[root@zabbix ~]# dnf install zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent -y

#查看信息
[root@zabbix ~]# cd /etc/yum.repos.d/
[root@zabbix yum.repos.d]# ls
redhat.repo  rhel9.repo  zabbix.repo  zabbix-tools.repo

2.安装zabbix服务端

bash 复制代码
[root@zabbix ~]# dnf install zabbix-agent.x86_64  zabbix-server-mysql.x86_64 -y

3.安装zabbix前端及客户端

bash 复制代码
[root@zabbix ~]# dnf install zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-agent  -y

4.安装数据库

mysql数据库官网:www.mysql.com

bash 复制代码
#下载mysql8的rpm包
[root@zabbix ~]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.39-1.el9.x86_64.rpm-bundle.tar

#解压mysql8软件包归档文件
[root@zabbix ~]# tar xf mysql-8.0.39-1.el9.x86_64.rpm-bundle.tar

#安装mysql8
[root@zabbix ~]# dnf install mysql-community-client-8.0.39-1.el9.x86_64.rpm  \
mysql-community-client-plugins-8.0.39-1.el9.x86_64.rpm \
mysql-community-common-8.0.39-1.el9.x86_64.rpm \
mysql-community-icu-data-files-8.0.39-1.el9.x86_64.rpm \
mysql-community-server-8.0.39-1.el9.x86_64.rpm \
mysql-community-libs-8.0.39-1.el9.x86_64.rpm -y

#启动数据库
[root@zabbix ~]# systemctl enable --now mysqld

#查看数据库密码
[[root@zabbix ~]# grep password /var/log/mysqld.log
2026-05-10T06:26:37.360106Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: JMFd.amNY9Qm


#数据库安全初始化
[root@zabbix ~]# mysql_secure_installation
Securing the MySQL server deployment.

Enter password for user root:
The 'validate_password' component is installed on the server.
The subsequent steps will run with the existing configuration
of the component.
Using existing password for root.

Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : no

 ... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) :

 ... skipping.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) :

 ... skipping.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) :

 ... skipping.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) :

 ... skipping.
All done!

5.为zabbix建立数据库

bash 复制代码
#建立zabbix所需用户并授权
[root@zabbix ~]# mysql -uroot -p6751515ming+ZLN
password
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
mysql> create user zabbix@localhost identified by '6751515ming+ZLN';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> set global log_bin_trust_function_creators = 1;
mysql> quit; 

#向数据库中导入zabbix的数据
[root@zabbix ~]# zcat  /usr/share/zabbix-sql-scripts/mysql/server.sql.gz  | mysql --default-character-set=utf8mb4 -uzabbix -p6751515ming+ZLN zabbix

6.设置zabbix服务端配置

bash 复制代码
#编辑主配置文件
[root@zabbix ~]# vim /etc/zabbix/zabbix_server.conf
DBPassword=6751515ming+ZLN

#启动zabbix
[root@zabbix ~]# systemctl enable --now  zabbix-server zabbix-agent httpd php-fpm

7.设置zabbix server

bash 复制代码
[root@zabbix ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.254.100  zabbix zabbix.timinglee.org







8.修改字体文件

在zabbix中如果使用中文字体图形显示会有错误,需要手动调整字体来解决问题


解决字体问题方法:

bash 复制代码
[root@zabbix mnt]# ls
hgfs  simkai.ttf✔	#下载好字体包
[root@zabbix mnt]# cd /usr/share/zabbix/assets/fonts/
[root@zabbix fonts]# cp /mnt/simkai.ttf .
[root@zabbix fonts]# rm -rf graphfont.ttf
[root@zabbix fonts]# ln -s /usr/share/zabbix/assets/fonts/simkai.ttf /usr/share/zabbix/assets/fonts/graphfont.ttf

二、zabbix agent 部署与使用

Zabbix Agent 是 Zabbix 监控系统的重要组件,主要部署在被监控的目标设备(如服务器、虚拟机、网络设备等)上,负责收集本地系统的各类数据(如 CPU 使用率、内存占用、磁盘空间、进程状态等),并将数据发送给 Zabbix Server 或 Zabbix Proxy 进行处理和存储。

Zabbix Agent 的核心作用

  1. 数据采集:主动主动或被动方式收集被监控设备的性能指标、系统状态、应用程序数据等。
  2. 数据传输:将采集到的数据发送给 Zabbix Server/Proxy,确保监控数据的实时性和准确性。
  3. 执行命令:接收并执行 Zabbix Server 下发的远程命令(如脚本执行、服务启停等),支持监控场景的自动化操作。

两种运行模式

  1. 被动模式(默认)
    • 由 Zabbix Server 主动向 Agent 发起数据请求,Agent 被动响应并返回数据。
    • 优势:节省 Agent 端资源,适合监控大规模设备时降低客户端压力。
    • 劣势:Server 端请求压力可能较大,需合理配置超时时间和并发数。
  2. 主动模式
    • Agent 主动向 Server/Proxy 发送采集到的数据,无需 Server 发起请求。
    • 优势:减轻 Server 端请求压力,适合跨网段、广域网等网络条件复杂的场景。
    • 配置:需在 Agent 配置文件中指定 ServerActive(目标 Server/Proxy 地址),并在 Server 端将监控项类型设为 "主动式"。

1.被动模式如何添加监控节点

bash 复制代码
#在要被监控节点中安装agent
[root@servera ~]# rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rhel/9/x86_64/zabbix-release-latest-7.0.el9.noarch.rpm
[root@servera ~]# dnf install zabbix-agent.x86_64 -y
[root@servera ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=172.25.254.100 #zabbix server主机,允许谁来取监控数据(主动模式)
ServerActive=172.25.254.100 #允许讲监控数据提交给谁(被动模式)
Hostname=servera #指定主机名
UnsafeUserParameters=1 #是否限制用户定义key时是同特殊字符,1表示不限制
AllowKey=system.run[*] #是否接收远程操作命令
LogRemoteCommands=1 #把远程执行动作记录在日志中
#启动agent
[root@servera ~]# systemctl enable --now zabbix-agent.service
[root@servera ~]# netstat -antlupe | grep zabbix
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN
980 59055 32814/zabbix_agentd
tcp6 0 0 :::10050 :::* LISTEN
980 59056 32814/zabbix_agentd

创建主机群组

Zabbix 主机群组(Host Group)的核心作用是按业务 / 环境 / 用途对主机做逻辑归类,从而实现权限、配置、告警、可视化的批量与分层管理,是大规模监控的基础组织单元Zabbix

在zabbix的server端添加要被监控的主机

!NOTE

此时 被监控主机可用性为铅色,意味着没有取到监控数据,这是因为没有添加监控项的原因

创建监控项

要在Zabbix管理页面创建一个监控项,请执行以下操作:

  • 进入到: 数据采集主机
  • 在主机所在的行单击 监控项
  • 点击屏幕右上角的创建监控项
  • 输入表单中监控项的参数

你也可以打开一个已经存在的监控项,点击克隆 按钮,然后重命名保存。

任何一个被监控项,如果想要能够被监控,一定要在zabbix-server端定义了能够连接至zabbix-agent端,并且能够获取命令。或者在agent端定义了能够让server端获取命令。一般都是内建的命令,都对应的有其名字,被我们称之为key

创建不带参数监控项
bash 复制代码
[root@zabbix ~]# dnf install zabbix-get -y
[root@zabbix ~]# zabbix_get -s 172.25.254.10 -k system.uptime -p 10050
1518
带参数的监控项

示例1:监控一个文件大小

bash 复制代码
#在要被监控的主机中建立一个大文件
[root@servera ~]# dd if=/dev/zero of=/mnt/timinglee bs=1M count=1024

示例2.监控cpu负载

示例3.监控端口

bash 复制代码
[root@servera ~]# dnf install httpd -y
[root@servera ~]# systemctl enable --now httpd

创建触发器

触发器简介
  • 触发器就是用来判断监控项监控到的数据是否是在一个合理的范围之内
  • 当我们的采集的值定义完了以后,就可以来定义触发器了。
  • 我们触发器的定义是:界定某特定的监控项采集到的数据的非合理区间或非合理状态。通常为逻辑表达式。

!NOTE

一般,我们评定采样数值是否为合理区间的比较稳妥的方法是------根据最后N次的平均值来判定结果;这个最后N几分钟通常有两种定义方式:

  1. 最近N分钟所得结果的平均值
  2. 最近N次所得结果的平均值
触发器表达式
复制代码
{<server>:<key>.<function>(<parameter>)}<operator><constant>
server:		主机名称;

key:		主机上关系的相应监控项的key;

function:	评估采集到的数据是否在合理范围内时所使用的函数,目前触发器所支持的函数有
			 avg(平均)、count(计数)、change(变化)、date(日期)、dayofweek(星期)、delta(增量)
             diff、iregexp、last()、max(最大值)、min(最小值)、nodata(无数据)、now(现在)
             sum(总和)等
             
parameter:	函数参数;大多数数值函数可以接受秒数为其参数,而如果在数值参数之前使用"#"做为前缀
			 则表示为最近几次的取值,如sum(300)表示300秒内所有取值之和
			 而sum(#10)则表示最近10次取值之和
配置一个触发器
  • 进入: 数据采集主机
  • 点击主机一行的 触发器
  • 点击右上角的 创建触发器 (或者点击触发器名称去修改一个已存在的触发器)
  • 在窗口中输入触发器的参数





模拟问题观察数据
bash 复制代码
[root@servera ~]# systemctl stop httpd
自动执行脚本动作(action)
创建脚本并提权zabbix用户
bash 复制代码
[root@servera ~]# visudo
 99 ## Allow root to run any commands anywhere
100 root    ALL=(ALL)   ALL
101 zabbix  ALL=(ALL)   NOPASSWD: ALL		#为zabbix授权
[root@servera ~]# sudo -u zabbix  sudo whoami
root
bash 复制代码
#记录远程动作执行情况
[root@servera ~]# vim /etc/zabbix/zabbix_agentd.conf
LogRemoteCommands=1
创建触发器动作




测试问题
bash 复制代码
[root@servera ~]# systemctl stop sshd
bash 复制代码
#查看自动做的命令
[root@servera ~]# cat /var/log/zabbix/zabbix_agentd.log | tail -n 1
  1075:20260513:184045.264 Executing command 'sudo systemctl restart httpd'
设置告警媒介





添加告警







测试
bash 复制代码
[root@servera ~]# systemctl stop httpd




中文告警模板
复制代码
问题 模板配置如下
主题: 故障发生 {EVENT.NAME}
消息:
**************错误**************
告警地址:{HOSTNAME1}
告警主机:{HOST.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE1}
当前状态:{TRIGGER.STATUS}
事件ID:{EVENT.ID}

问题恢复 模板配置如下
主题: 故障恢复 {TRIGGER. NAME} {EVENT.DURATION}: {EVENT.NAME}
消息:
**************恢复**************
恢复地址:{HOSTNAME1}
恢复主机:{HOST.NAME}
恢复时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
恢复信息: {TRIGGER.NAME}
恢复项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE1}
当前状态:{TRIGGER.STATUS}
持续时间:{EVENT.AGE}
事件ID:{EVENT.ID}



2.zabbix创建自定义模板

优势:

  1. 告别一台一台手动配置
  2. 统一监控标准,杜绝配置混乱
  3. 后期维护只改模板,所有主机自动更新
  4. 可打包全套监控能力
  5. 区分业务类型,分类管理
  6. 不碰官方内置模板,升级不被覆盖
  7. 支持导入导出,备份 / 迁移超方便

先把触发器和监控项删除(必须先删触发器再删监控项)

创建自定义模板




因为模板没有主机接口,所以测试要手动填写IP和端口

测试成功就可以添加了


磁盘监控项

复制代码
fs 是文件系统的具体实例。一个具体的挂载点,如/home或者/boot等等;
<mode> 参数决定了如何计算文件系统的大小。通常,以下是一些常见的模式:
total: 返回文件系统的总大小,包括所有已使用的和未使用的空间。
used:返回文件系统中已经使用的空间大小。
free: 返回文件系统中剩余的可用空间大小。
available: 返回文件系统中可以分配给普通用户的空间。


创建监控项图形

进入后点创建图表


添加自定义模板到主机




3.主动模式如何添加监控节点

bash 复制代码
#在node2节点中也安装agent
[root@serverb ~]# rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rhel/9/x86_64/zabbix-release-latest-7.0.el9.noarch.rpm
[root@serverb ~]# dnf install zabbix-agent.x86_64 -y
#直接复制node1的配置文件
[root@servera ~]# scp /etc/zabbix/zabbix_agentd.conf root@172.25.254.20:/etc/zabbix/zabbix_agentd.conf
[root@serverb ~]# vim /etc/zabbix/zabbix_agentd.conf
182 Hostname=serverb

[root@serverb ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.254.20   serverb
172.25.254.10   servera
172.25.254.100  zabbix zabbix.timinglee.org

[root@serverb ~]# for i in {10,100};do scp /etc/hosts root@172.25.254.$i:/etc/hosts;done
[root@serverb ~]# systemctl enable --now zabbix-agent.service
[root@serverb ~]# netstat -antlupe | grep zabbix
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      991        83983      30552/zabbix_agentd
tcp6       0      0 :::10050                :::*                    LISTEN      991        83984      30552/zabbix_agentd





4.自动注册(被动模式)

在 Zabbix 中,自动注册(Auto-registration) 是一种让 Zabbix Agent 主动向 Zabbix Server 报到并请求被监控的机制。与 "自动发现"(Server 主动扫描)不同,自动注册是 Agent 主动发起注册请求,适用于动态环境(如容器、云服务器)中快速纳入新部署的设备,缓解Server压力。

核心原理

  1. 当 Zabbix Agent 启动时,会根据配置文件中的 ServerActive 参数,向指定的 Zabbix Server/Proxy 发送注册请求(包含自身 Hostname、IP 等信息)。
  2. Zabbix Server 接收请求后,根据预设的 "自动注册动作" 判断是否接受该 Agent,并自动执行配置操作(如添加主机、关联模板等)。

在做自动注册实验时确保自动发现动作已经全部停止


配置自动注册:

bash 复制代码
#确保a和b配置正确
[root@servera ~]# grep -E '^Server=|^ServerActive=|^Hostname=|^UnsafeUserParameters=|^AllowKey=|^LogRemoteCommands=' /etc/zabbix/zabbix_agentd.conf
Server=172.25.254.100 #zabbix server主机,允许谁来取监控数据(主动模式)
ServerActive=172.25.254.100 #允许讲监控数据提交给谁(被动模式)
Hostname=servera #指定主机名
UnsafeUserParameters=1 #是否限制用户定义key时是同特殊字符,1表示不限制
AllowKey=system.run[*] #是否接收远程操作命令
LogRemoteCommands=1 #把远程执行动作记录在日志中
相关推荐
想唱rap1 小时前
NAT、内网穿透、代理服务
java·linux·网络·网络协议·udp·智能路由器
取谖慕12.1 小时前
面试运维岗位所遇到的问题
运维·面试·职场和发展
森旺电子1 小时前
关键路径+松弛时间
linux·运维·服务器
liulilittle2 小时前
TCP BBR调优及监控
linux·网络·网络协议·tcp/ip·win
金玉满堂@bj2 小时前
Inspect.exe:Windows 桌面自动化的定位利器与 Pywinauto 实战
运维·windows·自动化
handler012 小时前
TCP(传输控制协议)核心机制与底层原理
linux·网络·c++·笔记·网络协议·tcp/ip·操作系统
运维全栈笔记2 小时前
Harbor生产级部署实战:PostgreSQL+Redis+MinIO全解耦架构详解
linux·运维·服务器·笔记·架构·kubernetes·k8s
W23035765732 小时前
Linux C++ 基于 timerfd + epoll 实现高性能定时器队列(完整源码 + 超详细解析)
linux·开发语言·c++·线程池
wanhengidc2 小时前
云手机中虚拟技术的功能
运维·服务器·网络·安全·web安全·智能手机