先使用外网机器下载离线安装包,然后上传至内网服务器进行全内网安装。
官网教程: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 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 yum install createrepo -y 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 sudo mount /dev/cdrom /mntsudo 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://vault.centos.org/centos/7/sclo/$basearch /rh/ 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 sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config systemctl stop firewalld systemctl disable firewalld
创建本地 yum 源(非必须)
创建本地源的目的是,可以让 yum 解决先后安装的顺序,无需自己操心。除了 zabbix server、zabbix proxy 外,其他的一些组件例如 zabbix-agent、zabbix-get、zabbix-sender 等都是可以直接安装的。
1 2 3 4 5 6 7 8 9 10 mkdir /etc/yum.repos.d/bakmv /etc/yum.repos.d/* /etc/yum.repos.d/bakvi /etc/yum.repos.d/zabbix-all.repo 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
编辑 /etc/zabbix/zabbix_agent.conf
文件:
agent2 没有该项,无须修改。
编辑 /usr/lib/systemd/system/zabbix-agent.service
文件,修改该文件是因为使用 UserParameter 时部分命令需要 root 权限,否则会出错:
/usr/lib/systemd/system/zabbix-agent.service
agent2 请编辑 vi /usr/lib/systemd/system/zabbix-agent2.service
。
安装 PG 9
1 2 3 4 5 6 yum install postgresql-server.x86_64 postgresql.x86_64 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 local all all trusthost all all 127.0.0.1/32 md5 host all all 0.0.0.0/0 md5 host all all ::1/128 md5 local replication postgres md5host 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 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 psql -U postgres \password postgres \q systemctl restart postgresql psql -U postgres sudo -i -u postgres createuser --pwprompt zabbixsudo -i -u postgres createdb -O zabbix zabbixzcat /usr/share/doc/zabbix-server-pgsql-5.0.44/create.sql.gz | sudo -u zabbix psql zabbix
更改 PG 的 data 挂载目录(可选)
由于浪子公司的实际需要,需要更改挂载位置。记录一下
1 2 3 4 5 6 sudo systemctl stop postgresqlmkdir -p /home/workspace/pgsqlcp -R /var/lib/pgsql/* /home/workspace/pgsqlchown -R postgres:postgres /home/workspace/pgsqlchmod -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
之后执行以下命令:
1 2 3 4 sudo systemctl daemon-reloadsudo systemctl start postgresqlsudo -u postgres psql -c "SHOW data_directory;"
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
查看 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
清除文件内容:
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 sudo -i -u postgres createuser --pwprompt zabbixsudo -i -u postgres createdb -O zabbix zabbix_proxyzcat /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
配置
监控项(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 ServerActive=zabbix_server_ip:port Hostname=hostname AllowRoot=1 HostMetadata=system.uname HostMetadataItem=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
修改:
/usr/lib/systemd/system/zabbix-agent.service
重启 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=127.0.0.1,zabbix_server_ip Hostname=agent1 AllowRoot=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
加入以下内容
/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 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 yum install centos-release-scl --downloadonly --downloaddir=zabbix-centos yum install zabbix-server-mysql zabbix-agent --downloadonly --downloaddir=zabbix-mysql-server yum install zabbix-web-mysql-scl zabbix-nginx-conf-scl --downloadonly --downloaddir=zabbix-mysql-frontend yum install zabbix-proxy-mysql --downloadonly --downloaddir=zabbix-mysql-proxy yum install zabbix-agent zabbix-agent2 --downloadonly --downloaddir=zabbix-mysql-agent 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 mysql -uroot -p password mysql> set global log_bin_trust_function_creators = 0; mysql> quit;
编辑 /etc/zabbix/zabbix_server.conf
文件
编辑 /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 systemctl restart zabbix-proxy
zabbix 提供了 API 让外部应用系统进行调用,非常容易与其它系统集成。一般请求格式如下:
1 2 3 4 5 6 7 8 9 { "jsonrpc" : "2.0" , "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" , "method" : "zabbix method" , "params" : { "output" : "extend" , "host" : "" , "hostid" : "" , "filter" : { "itemid" : "" } , "search" : { "key" : "" } , } , "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 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 yum install perl --downloadonly --downloaddir=perl 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 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
UserParameter 小脚本
/etc/zabbix/scripts/hardware.sh 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 32 33 34 35 36 37 38 39 #!/bin/bash ip=$(hostname -I | awk '{print $1}' ) hostname=$(hostname) cpu_usage=$(top -bn1 | grep 'Cpu(s)' | awk '{print $2 + $4}' ) mem_usage=$(free -m | awk 'NR==2{printf "%.2f\n", $3*100/$2 }' ) disk_usage=$(df -h | awk '{print $5}' | sort -rn | head -1 | tr -d '%' ) mac_address=$(ip link show | grep link /ether | awk '{print $2}' | head -n 1) echo '{ "hardware": { "ip": "' $ip '", "hostname": "' $hostname '", "mac": "' $mac_address '", "info": [ { "cpu": { "total": "' $cpu_usage '" }, "memory": { "total": "' $mem_usage '" }, "disk": { "total": "' $disk_usage '" } } ] } }'
/etc/zabbix/scripts/software.sh 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 32 33 34 35 36 37 38 39 40 41 42 #!/bin/bash declare -A services=( [8080]="mysql" ) ip=$(hostname -I | awk '{print $1}' ) hostname=$(hostname) json_output='{"software":{"ip":"' "$ip " '","hostname":"' "$hostname " '","info":[' first=1 for port in "${!services[@]} " ; do name=${services[$port]} state=$(ss -tuln | grep -w ":$port " | wc -l) if [ $state -eq 0 ]; then state="false" else state="true" fi if [ $first -eq 1 ]; then json_output+=$(printf '{"%d":{"name":"%s","port":%d,"state":"%s"}}' "$port " "$name " "$port " "$state " ) first=0 else json_output+=$(printf ',{"%d":{"name":"%s","port":%d,"state":"%s"}}' "$port " "$name " "$port " "$state " ) fi done json_output+=']}}' echo "$json_output "
/etc/zabbix/zabbix_agent2.d/my.conf 1 2 UserParameter=hardware.state,/etc/zabbix/scripts/hardware.sh UserParameter=software.state,/etc/zabbix/scripts/software.sh