先使用外网机器下载离线安装包,然后上传至内网服务器进行全内网安装。
官网教程: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 官方文档。
离线包下载
前置准备及目标
- 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# 替换
2sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
3# 禁用防火墙
4systemctl stop firewalld
5systemctl disable firewalld
6# 重启
7reboot
文件配置和修改
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:
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 安装包,这两个包可以通过挂载 标准版镜像 进行提取。
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/
把包中的文件备份出来,上传至需要的机器上进行安装:
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
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
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/
如果没有上面两个文件
1# 先安装 再卸载,修改配置文件
2yum install centos-release-scl
3yum remove centos-release-scl
下载 zabbix 相关的包
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 的两个版本,实际使用时根据自己的需要安装。
打包
1# 安装打包工具
2yum install -y createrepo
3
4# 打包
5createrepo zabbix-all
6# 传输到内网服务器
7scp -r zabbix-all/ user@ip:/path/to
下载 PG9 离线包
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 包。然后进行一些前置准备。
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 等都是可以直接安装的。
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 文件内容
1[zabbix]
2name=zabbix
3baseurl=file:///path/to/
4enabled=1
5gpgcheck=0
pg.repo 文件内容
1[pg]
2name=pg
3baseurl=file:///path/to/
4enabled=1
5gpgcheck=0
zabixx server 和前端
1yum install -y zabbix-server-pgsql zabbix-agent zabbix-web-pgsql-scl zabbix-nginx-conf-scl
编辑 /etc/zabbix/zabbix_server.conf
配置文件,填写 pg 数据库 zabbix 用户的密码。
1DBPassword=password
编辑 /etc/zabbix/zabbix_agent.conf
文件:
1AllowRoot=1
agent2 没有该项,无须修改。
编辑 /usr/lib/systemd/system/zabbix-agent.service
文件,修改该文件是因为使用 UserParameter 时部分命令需要 root 权限,否则会出错:
1# 找到下面两项信息修改
2Uesr=root
3Group=root
agent2 请编辑
vi /usr/lib/systemd/system/zabbix-agent2.service
。
安装 PG 9
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 用户的密码。
建议直接使用下面的内容替换原本的内容(下面有额外添加的一行,开启远程连接时需要添加)。
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
。
1listen_addresses = '*'
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 挂载目录(可选)
由于浪子公司的实际需要,需要更改挂载位置。记录一下
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
之后执行以下命令:
1sudo systemctl daemon-reload
2sudo systemctl start postgresql
3# 验证是否迁移至新目录,如果不成就停止再启动
4sudo -u postgres psql -c "SHOW data_directory;"
Nginx
1listen 81;
2server_name ip;
这里推荐使用 ip,如果使用 localhost 可能会出现问题,自行尝试能用就行。
PHP
1listen.acl_users = apache,nginx
2
3; php_value[date.timezone] = Europe/Riga
4php_value[date.timezone] = Asia/Shanghai
启动服务
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
文件位置
- 配置文件位于
/etc/zabbix
目录下。 - 前端文件在
/usr/share/zabbix
。 - 日志文件在
/var/log/zabbix/
。
查看 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
清除文件内容:
1truncate -s 0 file
zabbix 其它组件
zabbix 组件中 agent 是必装的,(agent 两个版本二选一,2 的性能更好),这里对 proxy、agent 配置加以说明。proxy 组件需要使用单独数据库(不要与 server 使用相同的库,有冲突),proxy 一般是分布式监控,且单独部署在一台服务器。数据库参照上文进行数据库安装和配置,不再赘述。
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
创建数据库并初始化结构:
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
配置数据库的密码
1DBPassword=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 客户端。
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
文件:
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
修改:
1# 找到下面两项信息修改
2Uesr=root
3Group=root
重启 Agent 服务
1systemctl daemon-reload
2systemctl restart zabbix-agent
3# 查看启动用户
4ps -ef | grep zabbix
被动模式(自动发现)
zabbix server 向 agent 客户端索要信息,可能有一定的延迟。同样编辑 /etc/zabbix/zabbix_agentd.conf
文件
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
加入以下内容
1UserParameter=postgresql.status,systemctl is-active --quiet postgresql && echo "OK" || echo "ERROR"
重启 Agent 服务后就可以 zabbix_get 工具进行测试或者在 Web 端创建监控项,键值为 postgresql.status
。
1zabbix_get -s 127.0.0.1 -k postgresql.status
附
一些问题记录
访问前端页面,nginx 日志报错:
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"
解决方式:
1# 没有权限那就增加权限,如果组权限增加后还是不行就 o+w
2chmod g+w /var/opt/rh/rh-php72/lib/php/session/
3# 重启
4systemctl restart rh-php72-php-fpm
sock 文件权限不足,原因:selinux 阻止创建 sock 文件
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).
解决方案:
1sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
2# 重启
3reboot
登录发生错误,这个错误大概率是创建用户的时候出错的,因为需要输入三次密码,前两次是新创建用户的密码,最后一次是 postgres 默认用户的密码。有时候根据错误提示可能新建的用户也使用的 postgres 的密码,输入三次一样的就 OK 了。
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 安装,这些和上面步骤相同,不再赘述。
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 配置
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
文件
1DBPassword=password
编辑 /etc/opt/rh/rh-nginx116/nginx/conf.d/zabbix.conf
文件
1listen 80;
2server_name ip;
编辑 /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
文件
1listen.acl_users = apache,nginx
2
3; php_value[date.timezone] = Europe/Riga
4php_value[date.timezone] = Asia/Shanghai
重启服务
1systemctl restart zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm
proxy
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 选项
1mysql -uroot -p
2password
3mysql> set global log_bin_trust_function_creators = 0;
4mysql> quit;
编辑 /etc/zabbix/zabbix_proxy.conf
文件
1DBPassword=password
重启
1systemctl restart zabbix-proxy
Zabbix API
zabbix 提供了 API 让外部应用系统进行调用,非常容易与其它系统集成。一般请求格式如下:
1{
2 "jsonrpc": "2.0",
3 // zabbix 官网可以查找,一般为 xxx.xxx
4 "method": "zabbix method",
5 "params": {
6 },
7 "id": 1,
8 "auth": "token"
9}
复杂一些的请求:
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 的问题。
1vi /usr/lib/systemd/system/zabbix-agent.service
找到下面两项信息修改:
1Uesr=root
2Group=root
然后重新启动
1systemctl daemon-reload
2systemctl restart zabbix-agent
3# 查看启动用户
4ps -ef | grep zabbix
以获取系统 sn 和简单获取 pg 服务是否运行为例,编辑文件:vi /etc/zabbix/zabbix_agentd.d/my.conf
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 端使用以下命令测试:
1zabbix_get -s agent-ip -k get.sn.info
2zabbix_get -s agent-ip -k postgresql.status
在 web 页面的模板中添加自定义监控项,键值为上面定义的键值,不可出错!之后就可以调用 zabbix API 获取对应的信息啦!
snmp 离线包制作与安装
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 需要替换为实际位置。
1[perl]
2name=perl
3baseurl=file:///root/perl/
4enabled=1
5gpgcheck=0
1[snmp]
2name=snmp
3baseurl=file:///root/snmp/
4enabled=1
5gpgcheck=0
安装
1yum clean all
2
3# 安装
4yum install -y perl
5yum install -y net-snmp net-snmp-utils
启动
1systemctl start snmpd
2systemctl enable snmpd
配置文件
文件位置:/etc/snmp/snmpd.conf
1#添加一个采集项.1,意味着可以采集到所有mib tree的信息
2view systemview included .1
重启服务
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 小脚本
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}'
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"
1UserParameter=hardware.state,/etc/zabbix/scripts/hardware.sh
2UserParameter=software.state,/etc/zabbix/scripts/software.sh
评论