1、测试环境准备

一个完整的 Zabbix 堆至少包括以下内容:

A database (MySQL/MySQL fork, PostgreSQL, or Oracle)

A Zabbix server

Apache or NGINX running the Zabbix frontend with PHP 8.0 or higher

组件及其相互之间的通信图如下

Zabbix 7 step by step_nginx

# 准备3台服务器,安装rocky 9 系统
[root@zbx-ha-db ~]# cat /etc/os-release
NAME="Rocky Linux"
VERSION="9.4 (Blue Onyx)"

# 服务器名称和IP地址规划,我们部署2台zabbix server做HA,1台数据库
# 异地环境的话你也可以部署zabbix porxy Load Balancing
zbx-ha1 (10.180.10.241)
zbx-ha2 (10.180.10.242)
zbx-ha-db (10.180.10.243)
virtual IP (VIP) (10.180.10.250)

# 测试环境在每台服务器上关闭防火墙,禁用selinux
systemctl disable firewalld
systemctl stop firewalld

vim /etc/selinux/config
SELINUX=disabled

shutdown -r now


2、建立数据库

# 指定需要安装的mariadb版本,dnf包管理工具默认安装的是11.40.02,启动zabbix会报错,MariaDB database version Must not be higher than (11.03.xx),需要去zabbix配置中setting AllowUnsupportedDBVersions=1,并且不保证没问题。
wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash -s -- --mariadb-server-version="mariadb-10.6"
chmod +x mariadb_repo_setup
./mariadb_repo_setup --mariadb-server-version="mariadb-10.6"
dnf install mariadb-server mariadb-backup
systemctl enable mariadb
systemctl start mariadb

mariadb-secure-installation

第一个:Enter current password for root (enter for none):
要求输入正确的原root密码,因为我们是新装,没有密码,所以直接回车
第二个:Switch to unix_socket authentication [Y/n]
是否切换到unix_socket 权限验证,因为这个验证不需要密码不安全,所以输入n,回车
第三个:Change the root password? [Y/n]
是否修改root密码,参考其他文章说跟系统有联系所以不建议修改,输入n回车
第四个:Remove anonymous users? [Y/n]
删除匿名用户,y
第五个:Disallow root login remotely? [Y/n]
禁止root远程登录,y
第六个:Remove test database and access to it? [Y/n]
删除测试库,y
第7个:Reload privilege tables now? [Y/n]
刷新授权表,使设置立即生效,y

mariadb -u root -p

create database zabbix character set utf8mb4 collate utf8mb4_bin;
create user zabbix@'10.180.10.241' identified by '123456';
create user zabbix@'10.180.10.242' identified by '123456';
create user zabbix@'10.180.10.250' identified by '123456';
grant all privileges on zabbix.* to 'zabbix'@'10.180.10.241' identified by '123456';
grant all privileges on zabbix.* to 'zabbix'@'10.180.10.242' identified by '123456';
grant all privileges on zabbix.* to 'zabbix'@'10.180.10.250' identified by '123456';
set global log_bin_trust_function_creators = 1;
quit

# 当把 zabbix database schema 导入到新创建的zabbix数据库中后再次禁用log_bin_trust_function_creators
mysql -u root -p

set global log_bin_trust_function_creators = 0;
quit

3、安装zabbix服务器集群节点一

rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rocky/9/x86_64/zabbix-release-7.0-4.el9.noarch.rpm
dnf clean all
dnf install zabbix-server-mysql zabbix-selinux-policy

# 启用zabbix HA
vim /etc/zabbix/zabbix_server.conf
DBHost=10.180.10.243
DBPassword=123456
HANodeName=zbx-ha1
NodeAddress=10.180.10.241

systemctl enable zabbix-server
systemctl start zabbix-server

# 把 zabbix database schema 导入到后端的zabbix数据库
dnf install zabbix-sql-scripts MariaDB-client
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mariadb -h 10.180.10.243 --default-character-set=utf8mb4 -u zabbix -p zabbix

# 设置带有HA的nginx (为了确保前端也可以HA,将使用Keepalived设置它们)
dnf install -y keepalived
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf

# 清除所有内容
:%d 

# 添加如下内容
vrrp_track_process chk_nginx {
 process nginx
 weight 10
}
vrrp_instance ZBX_1 {
 state MASTER
 interface ens32
 virtual_router_id 51
 priority 244
 advert_int 1
 authentication {
 auth_type PASS
 auth_pass 123456
 }
 track_process {
 chk_nginx
 }
 virtual_ipaddress {
 10.180.10.250/24
 }
}

dnf install nginx zabbix-web-mysql zabbix-nginx-conf

vim /etc/nginx/conf.d/zabbix.conf
listen 80;
server_name 10.180.10.250;

systemctl enable nginx keepalived
systemctl start nginx keepalived

# 查看系统默认已有的语言包
localectl list-locales
# 查看当前生效的语言包
localectl
# 筛选出需要的中文语言包
dnf list |grep glibc-langpack|grep zh
# 安装中文语言包
dnf install glibc-langpack-zh.x86_64
# 修改当前生效语言包为中文zh_CN.UTF-8
localectl set-locale LANG="zh_CN.UTF-8"
# 重启zabbix server相关服务
systemctl restart zabbix-server nginx

4、安装zabbix服务器集群节点二

rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rocky/9/x86_64/zabbix-release-7.0-4.el9.noarch.rpm
dnf clean all
dnf install zabbix-server-mysql zabbix-selinux-policy

vim /etc/zabbix/zabbix_server.conf

DBHost=10.180.10.243
DBPassword=123456
HANodeName=zbx-ha2
NodeAddress=10.180.10.242

systemctl enable zabbix-server
systemctl start zabbix-server

dnf install -y keepalived
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf

# 清除所有内容
:%d 

# 添加如下内容
vrrp_track_process chk_nginx {
 process nginx
 weight 10
}
vrrp_instance ZBX_1 {
 state BACKUP
 interface ens32
 virtual_router_id 51
 priority 243
 advert_int 1
 authentication {
 auth_type PASS
 auth_pass 123456
 }
 track_process {
 chk_nginx
 }
 virtual_ipaddress {
 10.180.10.250/24
 }
}

dnf install nginx zabbix-web-mysql zabbix-nginx-conf

vim /etc/nginx/conf.d/zabbix.conf
listen 80;
server_name 10.180.10.250;

systemctl enable nginx keepalived
systemctl start nginx keepalived

dnf install glibc-langpack-zh.x86_64
localectl set-locale LANG="zh_CN.UTF-8"
systemctl restart zabbix-server nginx

5、配置zabbix前端

导航到vip地址(http://10.180.10.250/)

对于第一个节点,将zabbix服务器名称设置为zbx-ha1,并选择时区,然后点击下一步和完成

Zabbix 7 step by step_服务器_02

Zabbix 7 step by step_zabbix_03

Zabbix 7 step by step_服务器_04

Zabbix 7 step by step_zabbix_05

Zabbix 7 step by step_zabbix_06

完成后在第一个节点中执行以下操作

systemctl stop nginx

再次导航到vip地址(http://10.180.10.250/),填写相同的配置向导,将zabbix服务器名设置为zbx-ha2,完成向导后再次启用zbx-ha1的前端

systemctl start nginx

Zabbix 7 step by step_nginx_07

Zabbix 7 step by step_nginx_08

Zabbix 7 step by step_zabbix_09

Zabbix 7 step by step_服务器_10

Zabbix 7 step by step_zabbix_11

Zabbix 7 step by step_服务器_12

登录zabbix管理控制台,查看带有HA信息的Zabbix服务器系统信息,默认凭据为 Username:Admin  Password:zabbix

Zabbix 7 step by step_zabbix_13

Zabbix 7 step by step_服务器_14

将语言改为中文

Zabbix 7 step by step_zabbix_15

熟悉相关界面后我们将开始设置相关功能。


6、启用LDAP 验证,启用准时(JIT)服务开通

如果您只使用LDAP设置用户密码身份验证,您仍然需要在 Zabbix 中手动创建具有相应权限的用户。为解决此问题,可以设置 Just In Time (JIT) 用户配置,该功能从 Zabbix 6.4 开始引入,此新功能允许我们将 Zabbix 用户组和角色分配给 LDAP 服务器上的用户组,在这种情况下,不需要用户已经存在于 Zabbix 中。当用户第一次登录 Zabbix 时,可以创建用户账户。当LDAP用户输入其LDAP登录名和密码时,Zabbix 会检查默认 LDAP 服务器是否存在此用户。如果用户存在但在 Zabbix 中尚无账户,则会在 Zabbix 中创建新用户,并允许用户登录。

Zabbix 7 step by step_nginx_16


Zabbix 7 step by step_服务器_17

Zabbix 7 step by step_nginx_18


Zabbix 7 step by step_zabbix_19

使用活动目录中的组成员登录测试成功,其中lmt和zbxadmin是2个活动目录中的域账户,登录成功后在zabbix管理控制台中会自动创建2个相同的zabbix用户。

Zabbix 7 step by step_zabbix_20

Zabbix 7 step by step_服务器_21


我们先是在活动目录中新建用户组,并添加组成员用于登录zabbix控制台,如下我们新建了2个组Zabbix_Admin_test和IT_test,并添加了组成员zbxadmin和lmt

Zabbix 7 step by step_zabbix_22


Zabbix 7 step by step_zabbix_23


然后在zabbix控制台新建了用户群组,组名和活动目录中新建的用户组需同名,将前端访问设为LDAP,并设置LDAP服务器地址,设置模板权限和主机权限。(因为我们已经登录过,所有这里可以看到组用户中已经有了用户了,但是是灰色的,是zabbix系统自动添加的)

Zabbix 7 step by step_nginx_24


Zabbix 7 step by step_zabbix_25

然后就可以实现 Active Directory JIT Provisioning 了。


7、Setting up Zabbix agent monitoring

从 Zabbix 5 的发布开始,Zabbix 也正式开始支持新的 Zabbix Agent 2。Zabbix Agent 2 带来了一些重大改进,甚至是用另一种编码语言——Golang(而不是 C)编写的,要开始使用 Zabbix Agent 2,我们只需要将其安装在想要监控的主机上。


7.1、安装 Zabbix Agent 2

# 在想要监控的 Linux 主机上安装 Zabbix Agent 2

# rocky linux 9
rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rocky/9/x86_64/zabbix-release-7.0-4.el9.noarch.rpm
dnf clean all
dnf -y install zabbix-agent2
systemctl enable zabbix-agent2
systemctl restart zabbix-agent2

# centos 7
rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rhel/7/x86_64/zabbix-release-7.0-1.el7.noarch.rpm
yum clean all
yum install zabbix-agent2 zabbix-agent2-plugin-*
systemctl enable zabbix-agent2
systemctl restart zabbix-agent2

# Ubuntu
wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_7.0-1+ubuntu22.04_all.deb
dpkg -i zabbix-release_7.0-1+ubuntu22.04_all.deb
apt install zabbix-agent2
systemctl enable zabbix-agent2
systemctl restart zabbix-agent2

7.2 使用被动模式的 Zabbix 代理

# Using a Zabbix agent in passive mode

vim /etc/zabbix/zabbix_agent2.conf

# 将“Server”的值改为监控该被动代理的Zabbix服务器的IP地址
# 将“Hostname”的值改为监控服务器的主机名

Server=127.0.0.1
Hostname=Zabbix server

systemctl restart zabbix-agent2

转到 Zabbix 服务器的前端,添加此主机进行监控,转至数据采集 | 主机,并在右上角单击“创建主机”。

主机名称:用于标识主机(必须唯一)。

主机群组:将主机逻辑分组。

接口:在特定的接口上监控此主机。没有接口意味着没有通信。在 Zabbix 7 中,如果没有需要,可以有一个没有接口的主机。在 Zabbix-agent-monited 主机的情况下,需要一个代理接口。

模板:添加模板到主机也很重要。在 Zabbix 7 中,可以在同一个选项卡上完成此操作。由于这是一个由 Zabbix 代理监控的 Linux 服务器,让我们添加正确的出厂模板

点击“添加”按钮来完成此代理主机的创建。现在你已经创建了此主机,请确保 ZBX 图标变为绿色,表示此主机已启动并正在被被动 Zabbix 代理监控

Zabbix 7 step by step_zabbix_26

Zabbix 7 step by step_zabbix_27

Zabbix 7 step by step_zabbix_28

Zabbix 7 step by step_zabbix_29

由于我们配置了主机并添加了带有项目的模板,因此现在可以通过转到“监测”|“主机”并检查“最新数据”按钮来查看此主机上项目的值

Zabbix 7 step by step_nginx_30


7.3 使用主动模式的Zabbix代理

# Using a Zabbix agent in active mode

vim /etc/zabbix/zabbix_agent2.conf

# 将 ServerActive 的值改为监控此被动代理的 Zabbix 服务器的 IP
# 将 Hostname 的值改为您的主机名

ServerActive=127.0.0.1
Hostname=Zabbix server

systemctl restart zabbix-agent2

# 如果您使用多个Zabbix服务器或Zabbix代理服务器,例如在运行高可用性Zabbix服务器时,当使用ServerActive参数时,您需要填写所有Zabbix服务器或Zabbix代理服务器的 IP 地址
# 高可用性(HA)节点由分号(;)分隔,而不同的 Zabbix代理服务器环境 IP 由逗号(,)分隔。

转到 Zabbix 服务器的前端,使用模板添加另一个主机进行主动检查,而不是被动检查。

对于一个主动的 Zabbix 代理,Zabbix 代理配置文件中的主机名需要与我们在 Zabbix 前端看到的主机配置匹配。对于被动代理,情况并非如此。

Zabbix 7 step by step_zabbix_31

Zabbix 7 step by step_zabbix_32

Zabbix 7 step by step_nginx_33

Zabbix 7 step by step_nginx_34

7.4 agent 如何工作的

被动代理(passive agent)通过 Zabbix 代理(zabbix agent)从我们的主机收集数据。每当主机上的项目达到更新间隔时,Zabbix 服务器就会询问 Zabbix 代理(zabbix agent)当前值是多少:

Zabbix 7 step by step_服务器_35

当您在想要从 Zabbix 服务器或 Zabbix 代理端(Zabbix proxy side)发起通信的环境中工作时,被动代理非常有用。例如,当防火墙只允许来自 Zabbix 服务器或代理端(Zabbix proxy side)的出站流量时。

主动代理(active agent)通过将数据从 Zabbix 代理(Zabbix agent)发送到 Zabbix 服务器或 Zabbix 代理(Zabbix proxy)来工作。每当我们的代理(agent)上的项目达到其更新间隔时,代理(agent)就会收集值并将其发送到我们的服务器:

Zabbix 7 step by step_nginx_36

当您在一个防火墙只接受出站连接的环境中工作时,主动代理非常有用,我们允许主机向 Zabbix 发送数据,而不是允许 Zabbix 服务器访问所有不同的子网(这是一个更大的风险),另一方面,让 Zabbix 代理(Zabbix agent)以主动模式(active agent)运行也可以更有效率。将数据发送到 Zabbix 服务器的大部分负载现在都在 Zabbix 代理端(Zabbix agent side)

我们可以同时使用这两种类型的检查,使我们能够配置我们需要的每一种类型的检查。在这种情况下,我们的设置看起来像这样

Zabbix 7 step by step_zabbix_37

使用Zabbix代理进行日志文件监控必须使用主动的Zabbix代理完成。(log file monitoring with the Zabbix agent must be done with an active Zabbix agent.)