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

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

注意点

zabbix 的 agent 有两个版本,推荐使用 agent2,但是本文几乎全部以 agent 为例,因为实际部署内网的机器中部分机器不支持 V2,例如 windows server 2012,关于是否支持,请自行查阅 zabbix 官方文档。

离线包下载

前置准备及目标

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

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

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

关闭防火墙和 selinux

BASH
1# 替换
2sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
3# 禁用防火墙
4systemctl stop firewalld
5systemctl disable firewalld
6# 重启
7reboot
点击展开查看更多

文件配置和修改

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

BASH
1[zabbix-frontend]
2name=Zabbix Official Repository frontend - $basearch
3baseurl=https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/$basearch/frontend
4enabled=1
5gpgcheck=1
6gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
点击展开查看更多

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

提取两个 rpm 包

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

BASH
1# 挂载到 mnt 目录下
2sudo mount /dev/cdrom /mnt
3
4# 复制到一个目录中
5sudo cp /mnt/Packages/libxslt-1.1.28-5.el7.x86_64.rpm tmp/
6sudo cp /mnt/Packages/libtool-ltdl-2.4.2-22.el7_3.x86_64.rpm tmp/
点击展开查看更多

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

BASH
1yum 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

BASH
1[centos-sclo-rh]
2name=CentOS-7 - SCLo rh
3baseurl=http://vault.centos.org/centos/7/sclo/$basearch/rh/
4gpgcheck=1
5enabled=1
6gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
点击展开查看更多

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

BASH
1[centos-sclo-sclo]
2name=CentOS-7 - SCLo sclo
3# baseurl=http://mirror.centos.org/centos/7/sclo/$basearch/sclo/
4baseurl=http://vault.centos.org/centos/7/sclo/$basearch/rh/
5#mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=7&repo=sclo-sclo
6gpgcheck=1
7enabled=1
8gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
点击展开查看更多

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

如果没有上面两个文件

BASH
1# 先安装 再卸载,修改配置文件
2yum install centos-release-scl
3yum remove centos-release-scl
点击展开查看更多

下载 zabbix 相关的包

BASH
1yum 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 的两个版本,实际使用时根据自己的需要安装。

打包

BASH
1# 安装打包工具
2yum install -y createrepo
3
4# 打包
5createrepo zabbix-all
6# 传输到内网服务器
7scp -r zabbix-all/ user@ip:/path/to
点击展开查看更多

下载 PG9 离线包

BASH
1yum install postgresql-server.x86_64 postgresql.x86_64 --downloadonly --downloaddir=pg
2
3# 创建离线包
4createrepo pg
5
6# 传输到内网服务器
7scp pg/* user@ip:/path/to
点击展开查看更多

离线安装

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

BASH
1yum install -y libtool-ltdl-2.4.2-22.el7_3.x86_64.rpm libxslt-1.1.28-5.el7.x86_64.rpm
2
3# 关闭 selinux
4sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
5# 禁用防火墙
6systemctl stop firewalld
7systemctl disable firewalld
点击展开查看更多

创建本地 yum 源(非必须)

创建本地源的目的是,可以让 yum 解决先后安装的顺序,无需自己操心。除了 zabbix server、zabbix proxy 外,其他的一些组件例如 zabbix-agent、zabbix-get、zabbix-sender 等都是可以直接安装的。

BASH
 1# 备份原有文件
 2mkdir /etc/yum.repos.d/bak
 3mv /etc/yum.repos.d/* /etc/yum.repos.d/bak
 4
 5# zabbix,文件内容下面单独列出
 6vi /etc/yum.repos.d/zabbix-all.repo
 7# pg
 8vi /etc/yum.repos.d/pg.repo
 9
10yum clean all
点击展开查看更多

zabbix-all.repo 文件内容

BASH
1[zabbix]
2name=zabbix
3baseurl=file:///path/to/
4enabled=1
5gpgcheck=0
点击展开查看更多

pg.repo 文件内容

BASH
1[pg]
2name=pg
3baseurl=file:///path/to/
4enabled=1
5gpgcheck=0
点击展开查看更多

zabixx server 和前端

BASH
1yum install -y zabbix-server-pgsql zabbix-agent zabbix-web-pgsql-scl zabbix-nginx-conf-scl
点击展开查看更多

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

BASH
1DBPassword=password
点击展开查看更多

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

BASH
1AllowRoot=1
点击展开查看更多

agent2 没有该项,无须修改。

编辑 /usr/lib/systemd/system/zabbix-agent.service 文件,修改该文件是因为使用 UserParameter 时部分命令需要 root 权限,否则会出错:

BASH
1# 找到下面两项信息修改
2Uesr=root
3Group=root
点击展开查看更多

agent2 请编辑 vi /usr/lib/systemd/system/zabbix-agent2.service

安装 PG 9

BASH
1# 安装 pg
2yum install postgresql-server.x86_64 postgresql.x86_64
3# 初始化 pg
4postgresql-setup initdb
5# 启动
6systemctl start postgresql
点击展开查看更多

设置密码

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

建议直接使用下面的内容替换原本的内容(下面有额外添加的一行,开启远程连接时需要添加)。

BASH
 1# TYPE  DATABASE        USER            ADDRESS                 METHOD
 2
 3# "local" is for Unix domain socket connections only
 4local   all             all                                     trust
 5# IPv4 local connections:
 6host    all             all             127.0.0.1/32            md5
 7# 添加这一行内容,允许所有 ip 访问,开启远程访问
 8host    all             all             0.0.0.0/0            md5
 9# IPv6 local connections:
10host    all             all             ::1/128                 md5
11# Allow replication connections from localhost, by a user with the
12# replication privilege.
13local   replication     postgres                                md5
14host    replication     postgres        127.0.0.1/32            md5
15host    replication     postgres        ::1/128                 md5
点击展开查看更多

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

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

BASH
1listen_addresses = '*'
点击展开查看更多
BASH
 1# 重启服务
 2systemctl restart postgresql
 3# 进入 pg bash
 4psql -U postgres
 5# pg bash 环境中设置密码,注意,密码需要输入两次
 6\password postgres
 7
 8# 修改完毕退出 bash
 9\q
10
11# 然后 vi /var/lib/pgsql/data/pg_hba.conf 文件把刚刚修改的 trust 的一行也设置为 md5
12
13# 重启
14systemctl restart postgresql
15
16# 再次登录就可以使用密码啦
17psql -U postgres
18
19# 创建初始数据库
20# 前两次输入新创建用户 zabbix 密码,最后一次输入 postgres 用户的密码
21sudo -i -u postgres createuser --pwprompt zabbix
22# 创建 zabbix 数据库,使用 postgres 用户密码
23sudo -i -u postgres createdb -O zabbix zabbix
24
25# 导入初始架构和数据,系统将提示您输入新创建的密码。
26# zabbix 用户的密码
27zcat /usr/share/doc/zabbix-server-pgsql-5.0.44/create.sql.gz | sudo -u zabbix psql zabbix
点击展开查看更多

更改 PG 的 data 挂载目录(可选)

由于浪子公司的实际需要,需要更改挂载位置。记录一下

BASH
1sudo systemctl stop postgresql
2mkdir -p /home/workspace/pgsql
3cp -R /var/lib/pgsql/* /home/workspace/pgsql
4
5chown -R postgres:postgres /home/workspace/pgsql
6chmod -R 700 /home/workspace/pgsql
点击展开查看更多

修改 /home/workspace/pgsql/data/postgresql.conf 文件:data_directory = '/home/workspace/pgsql/data'

修改 /usr/lib/systemd/system/postgresql.service 文件:Environment=PGDATA=/home/workspace/pgsql/data

之后执行以下命令:

BASH
1sudo systemctl daemon-reload
2sudo systemctl start postgresql
3# 验证是否迁移至新目录,如果不成就停止再启动
4sudo -u postgres psql -c "SHOW data_directory;"
点击展开查看更多

Nginx

BASH
1listen 81;
2server_name ip;
点击展开查看更多

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

PHP

BASH
1listen.acl_users = apache,nginx
2
3; php_value[date.timezone] = Europe/Riga
4php_value[date.timezone] = Asia/Shanghai
点击展开查看更多

启动服务

BASH
1# 重启服务
2systemctl restart zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm
3# 设置开机自启
4systemctl enable zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm
点击展开查看更多

文件位置

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

清除文件内容:

BASH
1truncate -s 0 file
点击展开查看更多

zabbix 其它组件

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

BASH
 1# 实际使用按需安装
 2yum install -y zabbix-proxy zabbix-agent zabbix-agent2 zabbix-java-gateway zabbix-get zabbix-sender
 3
 4# 启动服务并加入自启动
 5systemctl start zabbix-proxy
 6systemctl enable zabbix-proxy
 7
 8systemctl start zabbix-agent
 9systemctl enable zabbix-agent
10
11systemctl start zabbix-agent2
12systemctl enable zabbix-agent2
13
14systemctl start zabbix-java-gateway
15systemctl enable zabbix-java-gateway
点击展开查看更多

zabbix proxy

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

BASH
1# 安装
2yum install -y zabbix-proxy
3
4# 前两次输入新创建用户 zabbix 密码,最后一次输入 postgres 用户的密码
5sudo -i -u postgres createuser --pwprompt zabbix
6# 使用 postgres 用户密码 创建 zabbix_proxy 数据库
7sudo -i -u postgres createdb -O zabbix zabbix_proxy
8# 导入数据 使用 zabbix 用户的密码
9zcat /usr/share/doc/zabbix-proxy-pgsql-5.0.44/schema.sql.gz | sudo -u zabbix psql zabbix_proxy
点击展开查看更多

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

BASH
1DBPassword=password
点击展开查看更多

配置

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 客户端。

BASH
1UserParameter=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 文件:

BASH
 1# port 如果不是 10051 需要添加
 2ServerActive=zabbix_server_ip:port
 3# hostname
 4Hostname=hostname
 5# 如果是 root 用户运行 agent 服务需要添加
 6AllowRoot=1
 7
 8# 主动模式推荐配置下面的信息,自动注册动作时使用方便
 9# 你也可以使用其它的,只要动作注册能识别就 OK
10HostMetadata=system.uname
11HostMetadataItem=system.uname
点击展开查看更多

重启服务:systemct restart zabbix-agent

如果按照网络其它资料配置了 StartAgents=0,那么就关闭了被动模式。不推荐关闭被动模式。 若使用 agent2 ,则无须设置 AllowRoot=1,因为压根就没有 🤣。

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

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

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

BASH
1# 找到下面两项信息修改
2Uesr=root
3Group=root
点击展开查看更多

重启 Agent 服务

BASH
1systemctl daemon-reload
2systemctl restart zabbix-agent
3# 查看启动用户
4ps -ef | grep zabbix
点击展开查看更多

被动模式(自动发现)

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

BASH
1Server=127.0.0.1,zabbix_server_ip
2Hostname=agent1
3
4# 如果是 root 用户运行添加下面配置,agent2 无须设置
5AllowRoot=1
点击展开查看更多

重启服务:systemct restart zabbix-agent

推荐保留 127.0.0.1,可以直接在 agent 客户端使用 zabbix_get 工具进行 UserParameter 的测试:zabbix_get -s 127.0.0.1 -k xxx.xxx

通过 UserParameter 自定义监控项

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

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

BASH
1UserParameter=postgresql.status,systemctl is-active --quiet postgresql && echo "OK" || echo "ERROR"
点击展开查看更多

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

BASH
1zabbix_get -s 127.0.0.1 -k postgresql.status
点击展开查看更多

一些问题记录

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

BASH
1FastCGI 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
2PHP 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
3PHP message: PHP Fatal error:  Uncaught Exception: Cannot start session. in /usr/share/zabbix/include/classes/core/CSession.php:46
4Stack trace:
5#0 /usr/share/zabbix/setup.php(67): CSession::start()
6#1 {main}
7  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"
点击展开查看更多

解决方式:

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

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

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

解决方案:

BASH
1sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
2# 重启
3reboot
点击展开查看更多

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

BASH
 1*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
 2Stack trace:
 3#0 /usr/share/zabbix/include/classes/setup/CSetupWizard.php(322): makeMessageBox('msg-bad', NULL, 'Cannot connect ...', false, true)
 4#1 /usr/share/zabbix/include/classes/setup/CSetupWizard.php(160): CSetupWizard->stage2()
 5#2 /usr/share/zabbix/include/classes/setup/CSetupWizard.php(111): CSetupWizard->getStage()
 6#3 /usr/share/zabbix/include/classes/html/CTag.php(67): CSetupWizard->bodyToString()
 7#4 /usr/share/zabbix/include/classes/html/CObject.php(89): CTag->toString(false)
 8#5 /usr/share/zabbix/include/classes/html/CObject.php(66): unpack_object(Object(CSetupWizard))
 9#6 /usr/share/zabbix/include/classes/html/CTag.php(86): CObject->addItem(Object(CSetupWizard))
10#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 安装,这些和上面步骤相同,不再赘述。

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

Server 配置

BASH
 1mysql -uroot -p
 2password
 3mysql> create database zabbix character set utf8 collate utf8_bin;
 4mysql> create user zabbix@localhost identified by 'password';
 5mysql> grant all privileges on zabbix.* to zabbix@localhost;
 6mysql> set global log_bin_trust_function_creators = 1;
 7mysql> quit;
 8
 9# 导入初始架构和数据,系统将提示您输入新创建的密码。
10zcat /usr/share/doc/zabbix-server-mysql/create.sql.gz | mysql -uzabbix -p zabbix
11
12# 禁用 log_bin_trust_function_creators 全局选项
13mysql -uroot -p
14password
15mysql> set global log_bin_trust_function_creators = 0;
16mysql> quit;
点击展开查看更多

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

BASH
1DBPassword=password
点击展开查看更多

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

BASH
1listen 80;
2server_name ip;
点击展开查看更多

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

BASH
1listen.acl_users = apache,nginx
2
3; php_value[date.timezone] = Europe/Riga
4php_value[date.timezone] = Asia/Shanghai
点击展开查看更多

重启服务

BASH
1systemctl restart zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm
点击展开查看更多

proxy

BASH
 1mysql -uroot -p
 2password
 3mysql> create database zabbix_proxy character set utf8 collate utf8_bin;
 4mysql> create user zabbix@localhost identified by 'password';
 5mysql> grant all privileges on zabbix_proxy.* to zabbix@localhost;
 6mysql> set global log_bin_trust_function_creators = 1;
 7mysql> quit;
 8
 9# 导入初始架构和数据,系统将提示您输入新创建的密码。
10zcat /usr/share/doc/zabbix-server-mysql/schema.sql.gz | mysql -uzabbix -p zabbix_proxy
点击展开查看更多

禁用 log_bin_trust_function_creators 选项

BASH
1mysql -uroot -p
2password
3mysql> set global log_bin_trust_function_creators = 0;
4mysql> quit;
点击展开查看更多

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

BASH
1DBPassword=password
点击展开查看更多

重启

BASH
1systemctl restart zabbix-proxy
点击展开查看更多

Zabbix API

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

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

复杂一些的请求:

JSON
 1{
 2    "jsonrpc": "2.0",
 3    // zabbix 官网可以查找,一般为 xxx.xxx
 4    "method": "zabbix method",
 5    "params": {
 6        // 官网有相关示例
 7        // extend 查询全部信息
 8        // 可以使用 output: ["xxx"] 把想要获取的字段写入
 9        "output": "extend",
10        // 查询指定 host 机器的监控项
11        "host": "",
12
13        // 查询指定 hostid 的机器的监控项
14        "hostid": "",
15
16        // 仅返回与给定过滤条件完全匹配的结果。
17        // 过滤条件是一个数组,其中键是属性名,值可以是单个值或要匹配的值数组。
18        // 不适用于 text 字段。
19        "filter": {
20            "itemid": ""
21        },
22
23        // 对指定 key 的 value 模糊查询
24        "search": {
25          "key": ""
26        },
27    },
28    // 登录认证接口后返回的一个 token,默认不会过期
29    "auth": "token",
30    "id": 1
31}
点击展开查看更多

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

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

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

BASH
1vi /usr/lib/systemd/system/zabbix-agent.service
点击展开查看更多

找到下面两项信息修改:

BASH
1Uesr=root
2Group=root
点击展开查看更多

然后重新启动

BASH
1systemctl daemon-reload
2systemctl restart zabbix-agent
3# 查看启动用户
4ps -ef | grep zabbix
点击展开查看更多

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

BASH
1UserParameter=get.sn.info,echo "`/usr/sbin/dmidecode |egrep -A4 'System Information'|egrep 'Serial Number'|awk -F: '{print $NF}'`"
2UserParameter=postgresql.status,systemctl is-active --quiet postgresql && echo 1 || echo 2
点击展开查看更多

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

BASH
1zabbix_get -s agent-ip -k get.sn.info
2zabbix_get -s agent-ip -k postgresql.status
点击展开查看更多

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

snmp 离线包制作与安装

BASH
1# 下载 perl 离线包
2yum install perl --downloadonly --downloaddir=perl
3
4# 下载 snmp 离线包
5yum install net-snmp net-snmp-utils --downloadonly --downloaddir=snmp
6
7# 打包
8createrepo perl
9createrepo snmp
点击展开查看更多

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

BASH
1[perl]
2name=perl
3baseurl=file:///root/perl/
4enabled=1
5gpgcheck=0
点击展开查看更多
BASH
1[snmp]
2name=snmp
3baseurl=file:///root/snmp/
4enabled=1
5gpgcheck=0
点击展开查看更多

安装

BASH
1yum clean all
2
3# 安装
4yum install -y perl
5yum install -y net-snmp net-snmp-utils
点击展开查看更多

启动

BASH
1systemctl start snmpd
2systemctl enable snmpd
点击展开查看更多

配置文件

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

BASH
1#添加一个采集项.1,意味着可以采集到所有mib tree的信息
2view systemview included .1
点击展开查看更多

重启服务

BASH
1systemctl restart snmpd.service
2ss -nlp | grep snmp
3
4# 查看具体信息
5snmpget -v 2c -c public 192.168.164.145 .1.3.6.1.2.1.1.1.0
点击展开查看更多

UserParameter 小脚本

BASH
 1#!/bin/bash
 2
 3# 获取 IP 地址和主机名
 4ip=$(hostname -I | awk '{print $1}')
 5hostname=$(hostname)
 6
 7# 获取 CPU 使用率
 8cpu_usage=$(top -bn1 | grep 'Cpu(s)' | awk '{print $2 + $4}')
 9
10# 获取内存使用率
11mem_usage=$(free -m | awk 'NR==2{printf "%.2f\n", $3*100/$2 }')
12
13# 获取磁盘使用率
14disk_usage=$(df -h | awk '{print $5}' | sort -rn | head -1 | tr -d '%')
15
16# 获取 mac
17mac_address=$(ip link show | grep link/ether | awk '{print $2}' | head -n 1)
18
19# 输出 JSON 格式的数据
20echo '{
21    "hardware": {
22        "ip": "'$ip'",
23        "hostname": "'$hostname'",
24        "mac": "'$mac_address'",
25        "info": [
26            {
27                "cpu": {
28                    "total": "'$cpu_usage'"
29                },
30                "memory": {
31                    "total": "'$mem_usage'"
32                },
33                "disk": {
34                    "total": "'$disk_usage'"
35                }
36            }
37        ]
38    }
39}'
点击展开查看更多
BASH
 1#!/bin/bash
 2
 3# 定义服务及其端口
 4declare -A services=(
 5    [8080]="mysql"
 6)
 7
 8# 获取 IP 地址
 9ip=$(hostname -I | awk '{print $1}')
10
11# 获取主机名
12hostname=$(hostname)
13
14# 初始化 JSON 输出
15json_output='{"software":{"ip":"'"$ip"'","hostname":"'"$hostname"'","info":['
16
17# 检查每个服务的状态
18first=1
19for port in "${!services[@]}"; do
20    name=${services[$port]}
21    state=$(ss -tuln | grep -w ":$port " | wc -l)
22
23    if [ $state -eq 0 ]; then
24        state="false"
25    else
26        state="true"
27    fi
28
29    # 构建 JSON 对象
30    if [ $first -eq 1 ]; then
31        json_output+=$(printf '{"%d":{"name":"%s","port":%d,"state":"%s"}}' "$port" "$name" "$port" "$state")
32        first=0
33    else
34        json_output+=$(printf ',{"%d":{"name":"%s","port":%d,"state":"%s"}}' "$port" "$name" "$port" "$state")
35    fi
36done
37
38# 完成 JSON 输出
39json_output+=']}}'
40
41# 输出 JSON
42echo "$json_output"
点击展开查看更多
BASH
1UserParameter=hardware.state,/etc/zabbix/scripts/hardware.sh
2UserParameter=software.state,/etc/zabbix/scripts/software.sh
点击展开查看更多

版权声明

作者: 浮生一梦

链接: /posts/2024/11/centos-install-zabbix5/

许可证: 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

评论

开始搜索

输入关键词搜索文章内容

↑↓
ESC
⌘K 快捷键