先使用外网机器下载离线安装包,然后上传至内网服务器进行全内网安装。

官网教程:https://www.zabbix.com/cn/download?zabbix=5.0&os_distribution=centos&os_version=7&components=proxy&db=pgsql&ws=

离线包下载

前置准备及目标

  • CentOS7 标准版镜像(DVD 版)
  • 网络连接正常
  • 基础工具(wget、vim)等常见工具不再赘述
  • zabbix5.0.x、postgresql9.2.x、php 以及 nginx 使用 scl 提供的,zabbix 与它绑定。详情请查看官网。
  • 文末 MySQL 版本目前没有测试,只是做个记录。

目标:下载的离线包需要在内网环境中最小化系统上进行安装。

在 centos-release-scl 中的 PG 10 版本虽然可以离线抽取安装包并且可以安装到内网机器上,但是启动时依然缺少库,同时使用方式也和常规安装的用法有较大区别,目录位置也不同,还会出现其它未知问题。综合考量下,PG 数据库采用默认的版本。

Nginx 和 PHP 都从 centos-release-scl 里面下载离线安装包。经实验,推荐使用该 Nginx,如果本机已安装有 Nginx,避免端口冲突可以直接启动两个 Nginx 服务。

关闭防火墙和 selinux

1
2
3
4
5
6
7
# 替换
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 禁用防火墙
systemctl stop firewalld
systemctl disable firewalld
# 重启
reboot

文件配置和修改

1
2
3
4
5
6
7
8
9
# 设置 阿里源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && yum clean all && yum makecache
# 更新系统
yum update
# 安装 createrepo 打离线包使用
yum install createrepo -y

# 添加 zabbix5 源
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-latest.el7.noarch.rpm

修改 /etc/yum.repos.d/zabbix.repo 文件把 enabled 的值改为 1:

/etc/yum.repos.d/zabbix.repo
1
2
3
4
5
6
[zabbix-frontend]
name=Zabbix Official Repository frontend - $basearch
baseurl=https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/$basearch/frontend
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591

若不修改该文件启用前端,后续下载 server web 的前端离线包时会报错误 Error: Nothing to do

提取两个 rpm 包

最小化的 CentOS7 镜像系统 中安装 zabbix5.0,需要这两个 rpm 安装包,这两个包可以通过挂载 标准版镜像 进行提取。

1
2
3
4
5
6
# 挂载到 mnt 目录下
sudo mount /dev/cdrom /mnt

# 复制到一个目录中
sudo cp /mnt/Packages/libxslt-1.1.28-5.el7.x86_64.rpm tmp/
sudo cp /mnt/Packages/libtool-ltdl-2.4.2-22.el7_3.x86_64.rpm tmp/

把包中的文件备份出来,上传至需要的机器上进行安装:

1
yum install -y libtool-ltdl-2.4.2-22.el7_3.x86_64.rpm libxslt-1.1.28-5.el7.x86_64.rpm

下载 zabbix 的离线包

为了方便,本文示例把 zabbix 的 server 端和其它各种组件全部下载到一个文件夹中,使用安装时按需下载使用。当然,你也可以自行分类后放在不同的目录中下载打包。

先修改两个文件,如果没有这两个文件,那么先安装 centos-release-scl,然后再卸载,之后修改文件后进行离线包下载。该包在安装的情况下无法下载离线包,且 scl 的官方源已经关闭,不再开放和维护。

vim /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo

/etc/yum.repos.d/CentOS-SCLo-scl-rh.repo
1
2
3
4
5
6
[centos-sclo-rh]
name=CentOS-7 - SCLo rh
baseurl=http://vault.centos.org/centos/7/sclo/$basearch/rh/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

vim /etc/yum.repos.d/CentOS-SCLo-scl.repo

/etc/yum.repos.d/CentOS-SCLo-scl.repo
1
2
3
4
5
6
7
8
[centos-sclo-sclo] 
name=CentOS-7 - SCLo sclo
# baseurl=http://mirror.centos.org/centos/7/sclo/$basearch/sclo/
baseurl=http://vault.centos.org/centos/7/sclo/$basearch/rh/
#mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=7&repo=sclo-sclo
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

也可以使用阿里的源:https://mirrors.aliyun.com/centos/7/sclo/x86_64/rh/

如果没有上面两个文件

1
2
3
# 先安装 再卸载,修改配置文件
yum install centos-release-scl
yum remove centos-release-scl

下载 zabbix 相关的包

1
yum install zabbix-server-pgsql zabbix-agent centos-release-scl zabbix-web-pgsql-scl zabbix-nginx-conf-scl zabbix-proxy-pgsql zabbix-agent zabbix-agent2 zabbix-java-gateway zabbix-get zabbix-sender --downloadonly --downloaddir=zabbix-all

这里同时下载了 agent 的两个版本,实际使用时根据自己的需要安装。

打包

1
2
3
4
5
6
7
# 安装打包工具
yum install -y createrepo

# 打包
createrepo zabbix-all
# 传输到内网服务器
scp -r zabbix-all/ user@ip:/path/to

下载 PG9 离线包

1
2
3
4
5
6
7
yum install postgresql-server.x86_64 postgresql.x86_64 --downloadonly --downloaddir=pg

# 创建离线包
createrepo pg

# 传输到内网服务器
scp pg/* user@ip:/path/to

离线安装

把上面所有的软件包上传至内网服务器中。若是 内网最小化 CentOS7 系统,先安装开头提到的两个 rpm 包。然后进行一些前置准备。

1
2
3
4
5
6
7
yum install -y libtool-ltdl-2.4.2-22.el7_3.x86_64.rpm libxslt-1.1.28-5.el7.x86_64.rpm

# 关闭 selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 禁用防火墙
systemctl stop firewalld
systemctl disable firewalld

创建本地 yum 源

1
2
3
4
5
6
7
8
9
10
# 备份原有文件
mkdir /etc/yum.repos.d/bak
mv /etc/yum.repos.d/* /etc/yum.repos.d/bak

# zabbix
vi /etc/yum.repos.d/zabbix-all.repo
# pg
vi /etc/yum.repos.d/pg.repo

yum clean all

zabbix-all.repo 文件内容

/etc/yum.repos.d/zabbix-all.repo
1
2
3
4
5
[zabbix]
name=zabbix
baseurl=file:///path/to/
enabled=1
gpgcheck=0

pg.repo 文件内容

/etc/yum.repos.d/pg.repo
1
2
3
4
5
[pg]
name=pg
baseurl=file:///path/to/
enabled=1
gpgcheck=0

zabixx server 和前端

1
yum install -y zabbix-server-pgsql zabbix-agent zabbix-web-pgsql-scl zabbix-nginx-conf-scl

编辑 /etc/zabbix/zabbix_server.conf 配置文件,填写 pg 数据库 zabbix 用户的密码。

/etc/zabbix/zabbix_server.conf
1
DBPassword=password

编辑 /etc/zabbix/zabbix_agent.conf 文件:

1
AllowRoot=1

编辑 /usr/lib/systemd/system/zabbix-agent.service 文件:

/usr/lib/systemd/system/zabbix-agent.service
1
2
3
# 找到下面两项信息修改
Uesr=root
Group=root

安装 PG 9

1
2
3
4
5
6
# 安装 pg
yum install postgresql-server.x86_64 postgresql.x86_64
# 初始化 pg
postgresql-setup initdb
# 启动
systemctl start postgresql

设置密码

由于 PG9 默认使用的 peer/ident 认证,使用的时候会出现一些认证问题,所以我们需要修改 /var/lib/pgsql/data/pg_hba.conf 文件,除了第一行之外全部改为 md5。不然无法进入 pg bash 修改 postgres 用户的密码。

建议直接使用下面的内容替换原本的内容。

/var/lib/pgsql/data/pg_hba.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# 添加这一行内容,允许所有 ip 访问,开启远程访问
host all all 0.0.0.0/0 md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication postgres md5
host replication postgres 127.0.0.1/32 md5
host replication postgres ::1/128 md5

trust 不需要认证,可以临时使用,后续是否使用自行斟酌。

如果需要远程连接,编辑文件:vi /var/lib/pgsql/data/postgresql.conf

/var/lib/pgsql/data/postgresql.conf
1
listen_addresses = '*'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 重启服务
systemctl restart postgresql
# 进入 pg bash
psql -U postgres
# pg bash 环境中设置密码,注意,密码需要输入两次
\password postgres

# 修改完毕退出 bash
\q

# 然后 vi /var/lib/pgsql/data/pg_hba.conf 文件把刚刚修改的 trust 的一行也设置为 md5

# 重启
systemctl restart postgresql

# 再次登录就可以使用密码啦
psql -U postgres

# 创建初始数据库
# 前两次输入新创建用户 zabbix 密码,最后一次输入 postgres 用户的密码
sudo -i -u postgres createuser --pwprompt zabbix
# 创建 zabbix 数据库,使用 postgres 用户密码
sudo -i -u postgres createdb -O zabbix zabbix

# 导入初始架构和数据,系统将提示您输入新创建的密码。
# zabbix 用户的密码
zcat /usr/share/doc/zabbix-server-pgsql-5.0.44/create.sql.gz | sudo -u zabbix psql zabbix

Nginx

/etc/opt/rh/rh-nginx116/nginx/conf.d/zabbix.conf
1
2
listen 81;
server_name ip;

这里推荐使用 ip,如果使用 localhost 可能会出现问题,自行尝试能用就行。

PHP

/etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
1
2
3
4
listen.acl_users = apache,nginx

; php_value[date.timezone] = Europe/Riga
php_value[date.timezone] = Asia/Shanghai

启动服务

1
2
3
4
# 重启服务
systemctl restart zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm
# 设置开机自启
systemctl enable zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm

文件位置

  • 配置文件位于 /etc/zabbix 目录下。
  • 前端文件在 /usr/share/zabbix
  • 日志文件在 /var/log/zabbix/

查看 zabbix server 启动日志:cat /var/log/zabbix/zabbix_server.log
查看 nginx 日志:cat /var/opt/rh/rh-nginx116/log/nginx/error.log
查看 php 日志:cat /var/opt/rh/rh-php72/log/php-fpm/error.log

清除文件内容:

1
truncate -s 0 file

zabbix 其它组件

zabbix 组件中 agent 是必装的,(agent 两个版本二选一,2 的性能更好),这里对 proxy、agent 配置加以说明。proxy 组件需要使用单独数据库(不要与 server 使用相同的库,有冲突),proxy 一般是分布式监控,且单独部署在一台服务器。数据库参照上文进行数据库安装和配置,不再赘述。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 实际使用按需安装
yum install -y zabbix-proxy zabbix-agent zabbix-agent2 zabbix-java-gateway zabbix-get zabbix-sender

# 启动服务并加入自启动
systemctl start zabbix-proxy
systemctl enable zabbix-proxy

systemctl start zabbix-agent
systemctl enable zabbix-agent

systemctl start zabbix-agent2
systemctl enable zabbix-agent2

systemctl start zabbix-java-gateway
systemctl enable zabbix-java-gateway

zabbix proxy

创建数据库并初始化结构:

1
2
3
4
5
6
7
8
9
# 安装
yum install -y zabbix-proxy

# 前两次输入新创建用户 zabbix 密码,最后一次输入 postgres 用户的密码
sudo -i -u postgres createuser --pwprompt zabbix
# 使用 postgres 用户密码 创建 zabbix_proxy 数据库
sudo -i -u postgres createdb -O zabbix zabbix_proxy
# 导入数据 使用 zabbix 用户的密码
zcat /usr/share/doc/zabbix-proxy-pgsql-5.0.44/schema.sql.gz | sudo -u zabbix psql zabbix_proxy

编辑文件 /etc/zabbix/zabbix_proxy.conf 配置数据库的密码

/etc/zabbix/zabbix_proxy.conf
1
DBPassword=password

配置

  • 监控项(items):zabbix 监控的具体信息,由键值绑定识别,可以通过 zabbix_get 工具测试,是监控的最小单位。比如硬盘已使用空间、硬盘剩余空间等具体指标;
  • 应用集(applications):可以简单理解为监控项的分类,例如硬盘有多种监控指标:使用率、剩余空间等,但他们都归到 硬盘(disk) 分类;
  • 触发器(triggers):zabbix 监控的 item 达到一定阈值后自动触发其它操作,例如警报等,具有依赖关系
  • 图形(graphs):对 item 的指标图形化展示,更加直观友好
  • 自动发现规则(Auto Discover Rules):自动发现的时间间隔、使用接口(键值)、名称和分类等信息
  • 模板(Template):就是上面一系列信息的组合,方便快速绑定具体主机。模板可以继承,若 A 模板继承 B 模板,那么 A 就会自动绑定 B 具有的监控项、应用集和触发器等。

server 端

开启自动获取资产记录

管理(Administration) -> 常规(General) -> 左上角(GUI)点击切换到 其它(Other) -> 默认主机资产记录模式(Default host inventory mode) 改为 自动(Automatic),然后点击更新(Update)。

创建模板

点击配置 -> 模板 -> 右上角创建模板 -> 填入相关信息 -> 群组选择需要绑定的主机组(可选) -> 点击添加

创建模板时可以直接绑定主机群组,这样群组中的主机都会自动链接到该模板。由于模板之间可以继承,你也可以在 链接的模板 页面进行模板链接,使新创建的模板可以快速拥有监控项(不过这样不如直接全克隆的方式更快)。

创建监控项

监控项是 zabbix 监控的各项指标信息,我们可以在这里添加 zabbix 内置的一些监控指标,也可以自定义 UserParameter 实现自己想要监控的服务,需要注意的是,键值必须唯一,不可冲突,重复的键值模板在链接时会报错。

单击监控项 -> 输入名称 -> 键值选择自己想要监控的项(后面有如何添加自定义监控键值) -> 信息类型选则对应键值返回的类型,否则测试时会报错,根据错误提示修改即可(比如 hostname 的信息类型应是文本)-> 更新间隔根据自己的需要设置。

如果我们想要自定义监控的键值,比如使用 systemctl 简单的判断服务运行状态,就可以使用 UserParameter,以 postgresql 服务为例,可以编辑文件 vi /etc/zabbix/zabbix_agentd.d/my.conf 加入以下内容后重启 Agent 客户端。

/etc/zabbix/zabbix_agentd.d/my.conf
1
UserParameter=postgresql.status,systemctl is-active --quiet postgresql && echo "OK" || echo "ERROR"

在 Web 端就可以创建新的监控项,键值为 postgresql.status,如果选择的类型不是主动式的,我们还可以直接对其进行测试。测试通过后,就可以调用 Zabbix API 获取对应键值的信息(前提是获取的主机已经配置该监控项或者链接到具有该监控项的模板)。

应用集也是可选的,例如可以把 CPU、DISK、Memory 都归类为 硬件,在新建监控项的时候可以直接对其进行新建,也可以选择已有的应用集。

agent 端

Agent 客户端 有两种模式,它们之间的区别可以参看:https://www.zabbix.com/documentation/5.0/zh/manual/appendix/items/activepassive

首先,所有 agent 客户端的 hostname 必须要被 server 端识别,本机可以使用 hostnamectl set-hostname [name] 进行配置,然后编辑各个机器上的 /etc/hosts 文件进行添加修改,比较简单,不再赘述。

主动模式和被动模式同时存在,可以让一部分主机监控项处于被动模式,另一部分处于主动模式。

主动模式(自动注册)

zabbix agent 客户端周期性的从本机收集信息并主动向 server 端上报信息。编辑 /etc/zabbix/zabbix_agentd.conf 文件:

/etc/zabbix/zabbix_agentd.conf
1
2
3
4
5
6
7
8
9
10
11
# port 如果不是 10051 需要添加
ServerActive=zabbix_server_ip:port
# hostname
Hostname=agent1
# 如果是 root 用户运行 agent 服务需要添加
AllowRoot=1

# 主动模式推荐配置下面的信息,自动注册动作时使用方便
# 你也可以使用其它的,只要动作注册能识别就 OK
HostMetadata=system.uname
HostMetadataItem=system.uname

重启服务:systemct restart zabbix-agent

如果按照网络其它资料配置了 StartAgents=0,那么就关闭了被动模式。不推荐关闭被动模式。

然后打开 server web 端,创建动作 -> 自动注册动作 -> 创建动作

条件: 主机元数据 包含 Linux(这就是 HostMetadata、HostMetadataItem 给 server 的信息中包含)
操作: 添加主机、添加到主机组(选择主机分类)、链接到模板(选择绑定的模板)

如果客户端配置了自定义的 UserParamter(后文有示例),可能会出现 Permission denied 的问题,此时我们需要设置 root 用户管理 zabbix-agent。编辑文件:vi /usr/lib/systemd/system/zabbix-agent.service,修改下面的两个配置后。

/usr/lib/systemd/system/zabbix-agent.service
1
2
3
# 找到下面两项信息修改
Uesr=root
Group=root

重启 Agent 服务

1
2
3
4
systemctl daemon-reload
systemctl restart zabbix-agent
# 查看启动用户
ps -ef | grep zabbix

被动模式(自动发现)

zabbix server 向 agent 客户端索要信息,可能有一定的延迟。同样编辑 /etc/zabbix/zabbix_agentd.conf 文件

/etc/zabbix/zabbix_agentd.conf
1
2
3
4
5
Server=zabbix_server_ip
Hostname=agent1

# 如果是 root 用户运行添加下面配置
AllowRoot=1

重启服务:systemct restart zabbix-agent

通过 UserParameter 自定义监控项

UserParameter 是一个比较好用的自定义检测扩展,可以让我们更方便的添加 zabbix 中没有的监控项。我们可以把所有的配置文件都放在 /etc/zabbix/zabbix_agentd.d/ 目录下,这样不会干扰原有的配置文件,并且还可以被 agent 加载使用。

编辑文件 vi /etc/zabbix/zabbix_agentd.d/my.conf 加入以下内容

/etc/zabbix/zabbix_agentd.d/my.conf
1
UserParameter=postgresql.status,systemctl is-active --quiet postgresql && echo "OK" || echo "ERROR"

重启 Agent 服务后就可以 zabbix_get 工具进行测试或者在 Web 端创建监控项,键值为 postgresql.status

1
zabbix_get -s 127.0.0.1 -k postgresql.status

一些问题记录

访问前端页面,nginx 日志报错:

/var/opt/rh/rh-nginx116/log/nginx/error.log
1
2
3
4
5
6
7
FastCGI sent in stderr: "PHP message: PHP Warning:  session_start(): open(/var/opt/rh/rh-php72/lib/php/session//sess_2dcabc26in3n1mthl06q7vls0a, O_RDWR) failed: Permission denied (13) in /usr/share/zabbix/include/classes/core/CSession.php on line 45
PHP message: PHP Warning: session_start(): Failed to read session data: files (path: /var/opt/rh/rh-php72/lib/php/session/) in /usr/share/zabbix/include/classes/core/CSession.php on line 45
PHP message: PHP Fatal error: Uncaught Exception: Cannot start session. in /usr/share/zabbix/include/classes/core/CSession.php:46
Stack trace:
#0 /usr/share/zabbix/setup.php(67): CSession::start()
#1 {main}
thrown in /usr/share/zabbix/include/classes/core/CSession.php on line 46" while reading response header from upstream, client: 192.168.164.1, server: 192.168.164.139, request: "GET /setup.php HTTP/1.1", upstream: "fastcgi://unix:/var/opt/rh/rh-php72/run/php-fpm/zabbix.sock:", host: "192.168.164.139:81"

解决方式:

1
2
3
4
# 没有权限那就增加权限,如果组权限增加后还是不行就 o+w
chmod g+w /var/opt/rh/rh-php72/lib/php/session/
# 重启
systemctl restart rh-php72-php-fpm

sock 文件权限不足,原因:selinux 阻止创建 sock 文件

1
2
3
4
5
6
10201:20241016:230627.693 cannot start LLD manager service: Cannot bind socket to "/var/run/zabbix/zabbix_server_lld.sock": [13] Permission denied.
10183:20241016:230627.693 One child process died (PID:10201,exitcode/signal:1). Exiting ...
zabbix_server [10183]: Error waiting for process with PID 10201: [10] No child processes
10183:20241016:230627.706 syncing trend data...
10183:20241016:230627.706 syncing trend data done
10183:20241016:230627.706 Zabbix Server stopped. Zabbix 5.0.44 (revision b786c42bc9a).

解决方案:

1
2
3
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 重启
reboot

登录发生错误,这个错误大概率是创建用户的时候出错的,因为需要输入三次密码,前两次是新创建用户的密码,最后一次是 postgres 默认用户的密码。有时候根据错误提示可能新建的用户也使用的 postgres 的密码,输入三次一样的就 OK 了。

1
2
3
4
5
6
7
8
9
10
*31 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught TypeError: Argument 2 passed to makeMessageBox() must be of the type array, null given, called in /usr/share/zabbix/include/classes/setup/CSetupWizard.php on line 322 and defined in /usr/share/zabbix/include/func.inc.php:1614
Stack trace:
#0 /usr/share/zabbix/include/classes/setup/CSetupWizard.php(322): makeMessageBox('msg-bad', NULL, 'Cannot connect ...', false, true)
#1 /usr/share/zabbix/include/classes/setup/CSetupWizard.php(160): CSetupWizard->stage2()
#2 /usr/share/zabbix/include/classes/setup/CSetupWizard.php(111): CSetupWizard->getStage()
#3 /usr/share/zabbix/include/classes/html/CTag.php(67): CSetupWizard->bodyToString()
#4 /usr/share/zabbix/include/classes/html/CObject.php(89): CTag->toString(false)
#5 /usr/share/zabbix/include/classes/html/CObject.php(66): unpack_object(Object(CSetupWizard))
#6 /usr/share/zabbix/include/classes/html/CTag.php(86): CObject->addItem(Object(CSetupWizard))
#7 /usr/share/zabbix/include/classes/html/CObject.php(73): CTag->addItem" while reading response header from upstream, client: 192.168.164.1, server: 192.168.164.141, request: "POST /setup.php HTTP/1.1", upstream: "fastcgi://unix:/var/opt/rh/rh-php72/run/php-fpm/zabbix.sock:", host: "192.168.164.141:81", referrer: "http://192.168.164.141:81/setup.php"

解决方式:直接使用 postgres 用户登录数据库。

zabbix web 前端管理页面使用中文,部分页面出现乱码。解决方式,下载一款支持中英文的字体,备份 zabbix server web 的原有字体,字体位置:/usr/share/fonts/dejavu/DejaVuSans.ttf,然后覆盖 DejaVuSans.ttf 字体。

MySQL 版记录

MySQL 只是简单提一下。这里分的镜像更细了,上面只分了 zabbix 和 pg。centos-release-scl 的源和 zabbix server 前端需要自己进行配置后才可以正常使用 yum 安装,这些和上面步骤相同,不再赘述。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 注意 centos-release-scl 的源配置和上面一样
yum install centos-release-scl --downloadonly --downloaddir=zabbix-centos
# server
yum install zabbix-server-mysql zabbix-agent --downloadonly --downloaddir=zabbix-mysql-server
# server web 前端
yum install zabbix-web-mysql-scl zabbix-nginx-conf-scl --downloadonly --downloaddir=zabbix-mysql-frontend
# proxy
yum install zabbix-proxy-mysql --downloadonly --downloaddir=zabbix-mysql-proxy
# agent
yum install zabbix-agent zabbix-agent2 --downloadonly --downloaddir=zabbix-mysql-agent
# Java 网关
yum install zabbix-java-gateway --downloadonly --downloaddir=zabbix-mysql-gateway

# 打包
createrepo zabbix-centos
createrepo zabbix-mysql-server
createrepo zabbix-mysql-frontend
createrepo zabbix-mysql-proxy
createrepo zabbix-mysql-agent
createrepo zabbix-mysql-gateway

Server 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql -uroot -p
password
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> create user zabbix@localhost identified by 'password';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> set global log_bin_trust_function_creators = 1;
mysql> quit;

# 导入初始架构和数据,系统将提示您输入新创建的密码。
zcat /usr/share/doc/zabbix-server-mysql/create.sql.gz | mysql -uzabbix -p zabbix

# 禁用 log_bin_trust_function_creators 全局选项
mysql -uroot -p
password
mysql> set global log_bin_trust_function_creators = 0;
mysql> quit;

编辑 /etc/zabbix/zabbix_server.conf 文件

1
DBPassword=password

编辑 /etc/opt/rh/rh-nginx116/nginx/conf.d/zabbix.conf 文件

1
2
listen 80;
server_name ip;

编辑 /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf 文件

1
2
3
4
listen.acl_users = apache,nginx

; php_value[date.timezone] = Europe/Riga
php_value[date.timezone] = Asia/Shanghai

重启服务

1
systemctl restart zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm

proxy

1
2
3
4
5
6
7
8
9
10
mysql -uroot -p
password
mysql> create database zabbix_proxy character set utf8 collate utf8_bin;
mysql> create user zabbix@localhost identified by 'password';
mysql> grant all privileges on zabbix_proxy.* to zabbix@localhost;
mysql> set global log_bin_trust_function_creators = 1;
mysql> quit;

# 导入初始架构和数据,系统将提示您输入新创建的密码。
zcat /usr/share/doc/zabbix-server-mysql/schema.sql.gz | mysql -uzabbix -p zabbix_proxy

禁用 log_bin_trust_function_creators 选项

1
2
3
4
mysql -uroot -p
password
mysql> set global log_bin_trust_function_creators = 0;
mysql> quit;

编辑 /etc/zabbix/zabbix_proxy.conf 文件

1
DBPassword=password

重启

1
systemctl restart zabbix-proxy

Zabbix API

zabbix 提供了 API 让外部应用系统进行调用,非常容易与其它系统集成。一般请求格式如下:

1
2
3
4
5
6
7
8
9
{
"jsonrpc": "2.0",
// zabbix 官网可以查找,一般为 xxx.xxx
"method": "zabbix method",
"params": {
},
"id": 1,
"auth": "token"
}

复杂一些的请求:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
{
"jsonrpc": "2.0",
// zabbix 官网可以查找,一般为 xxx.xxx
"method": "zabbix method",
"params": {
// 官网有相关示例
// extend 查询全部信息
// 可以使用 output: ["xxx"] 把想要获取的字段写入
"output": "extend",
// 查询指定 host 机器的监控项
"host": "",

// 查询指定 hostid 的机器的监控项
"hostid": "",

// 仅返回与给定过滤条件完全匹配的结果。
// 过滤条件是一个数组,其中键是属性名,值可以是单个值或要匹配的值数组。
// 不适用于 text 字段。
"filter": {
"itemid": ""
},

// 对指定 key 的 value 模糊查询
"search": {
"key": ""
},
},
// 登录认证接口后返回的一个 token,默认不会过期
"auth": "token",
"id": 1
}

查询服务器信息使用的 API:host.get
查询服务器监控项使用的 API:item.get

zabbix agent 添加自定义键值获取硬件信息

Linux 下读取一些文件的信息必须使用 root 用户,所以对于某些 UserParamter 来说,会出现 Permission denied 的问题。

/usr/lib/systemd/system/zabbix-agent.service
1
vi /usr/lib/systemd/system/zabbix-agent.service

找到下面两项信息修改:

1
2
Uesr=root
Group=root

然后重新启动

1
2
3
4
systemctl daemon-reload
systemctl restart zabbix-agent
# 查看启动用户
ps -ef | grep zabbix

以获取系统 sn 和简单获取 pg 服务是否运行为例,编辑文件:vi /etc/zabbix/zabbix_agentd.d/my.conf

/etc/zabbix/zabbix_agentd.d/my.conf
1
2
UserParameter=get.sn.info,echo "`/usr/sbin/dmidecode |egrep -A4 'System Information'|egrep 'Serial Number'|awk -F: '{print $NF}'`"
UserParameter=postgresql.status,systemctl is-active --quiet postgresql && echo 1 || echo 2

保存之后重启 agent 服务。然后在 server 端使用以下命令测试:

1
2
zabbix_get -s agent-ip -k get.sn.info
zabbix_get -s agent-ip -k postgresql.status

在 web 页面的模板中添加自定义监控项,键值为上面定义的键值,不可出错!之后就可以调用 zabbix API 获取对应的信息啦!

snmp 离线包制作与安装

1
2
3
4
5
6
7
8
9
# 下载 perl 离线包
yum install perl --downloadonly --downloaddir=perl

# 下载 snmp 离线包
yum install net-snmp net-snmp-utils --downloadonly --downloaddir=snmp

# 打包
createrepo perl
createrepo snmp

新建 /etc/yum.repo.d/perl.repo/etc/yum.repo.d/snmp.repo 两个文件,内容如下,baseurl 需要替换为实际位置。

/etc/yum.repo.d/perl.repo
1
2
3
4
5
[perl]
name=perl
baseurl=file:///root/perl/
enabled=1
gpgcheck=0
/etc/yum.repo.d/snmp.repo
1
2
3
4
5
[snmp]
name=snmp
baseurl=file:///root/snmp/
enabled=1
gpgcheck=0

安装

1
2
3
4
5
yum clean all

# 安装
yum install -y perl
yum install -y net-snmp net-snmp-utils

启动

1
2
systemctl start snmpd
systemctl enable snmpd

配置文件

文件位置:/etc/snmp/snmpd.conf

/etc/snmp/snmpd.conf
1
2
#添加一个采集项.1,意味着可以采集到所有mib tree的信息
view systemview included .1

重启服务

1
2
3
4
5
systemctl restart snmpd.service
ss -nlp | grep snmp

# 查看具体信息
snmpget -v 2c -c public 192.168.164.145 .1.3.6.1.2.1.1.1.0

本站由 江湖浪子 使用 Stellar 1.29.1 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。