本文主要是介绍【Zabbix】安装部署历险记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
环境描述:
操作系统:Ubuntu20+docker
参考过程:5 从容器中安装
【方案一】
这个示例采用的是基于mysql数据库+ Zabbix Server 、基于 Nginx Web 服务器的 Zabbix Web 界面和 Zabbix Java 网关
由于是首个hello world,重点先不放在安装过程,力求最快速安装,所以参考的都是官方文档上的步骤。(数据库安装后起不来,无法继续,暂时搁置此方案)
步骤:
1 创建专用于 Zabbix 组件容器的网络:
# docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net
2. 启动空的 MySQL 服务器实例:
# 宿主机上的进行目录映射rm -r /home/data/mysqlmkdir /home/data/mysqlmkdir /home/data/mysql/logmkdir /home/data/mysql/datamkdir /home/data/mysql/configdocker run --name mysql-server -t \--privileged=true \-e MYSQL_DATABASE="zabbix" \-e MYSQL_USER="zabbix" \-e MYSQL_PASSWORD="zabbix_pwd" \-e MYSQL_ROOT_PASSWORD="root_pwd" \-v /home/data/mysql/data:/var/lib/mysql:rw \-v /home/data/mysql/log:/var/log/mysql:rw \-v /home/data/mysql/config:/etc/mysql:rw \-v /etc/localtime:/etc/localtime:ro \--network=zabbix-net \-d mysql:8.0 \-p 3306:3306 \--restart unless-stopped \--character-set-server=utf8 --collation-server=utf8_bin \--default-authentication-plugin=mysql_native_password
实际安装后验证数据库时发现按照这个装出来的数据库一直起不来,网上找了很多办法,依然不行,只能暂时搁置这个方案
3. 启动 Zabbix Java 网关do实例:
root-:# docker run --name zabbix-java-gateway -t \--network=zabbix-net \--restart unless-stopped \-d zabbix/zabbix-java-gateway:alpine-5.4-latest
4. 启动 Zabbix server 实例,并将其关联到已创建的 MySQL server 实例:
root-:# docker run --name zabbix-server-mysql -t \-e DB_SERVER_HOST="mysql-server" \-e MYSQL_DATABASE="zabbix" \-e MYSQL_USER="zabbix" \-e MYSQL_PASSWORD="zabbix_pwd" \-e MYSQL_ROOT_PASSWORD="root_pwd" \-e ZBX_JAVAGATEWAY="zabbix-java-gateway" \--network=zabbix-net \-p 10051:10051 \--restart unless-stopped \-d zabbix/zabbix-server-mysql:alpine-5.4-latest
注意:Zabbix server 实例将 10051/TCP 端口(Zabbix trapper)暴露给主机。
5. 启动 Zabbix Web 界面,并将其关联到已创建的 MySQL server 和 Zabbix server 实例:
root-:# docker run --name zabbix-web-nginx-mysql -t \-e ZBX_SERVER_HOST="zabbix-server-mysql" \-e DB_SERVER_HOST="mysql-server" \-e MYSQL_DATABASE="zabbix" \-e MYSQL_USER="zabbix" \-e MYSQL_PASSWORD="zabbix_pwd" \-e MYSQL_ROOT_PASSWORD="root_pwd" \--network=zabbix-net \-p 80:8080 \--restart unless-stopped \-d zabbix/zabbix-web-nginx-mysql:alpine-5.4-latest
注意:Zabbix web 界面实例将 80/TCP 端口(HTTP)暴露给主机
【方案二】
该示例示范了如何运行 PostgreSQL 数据库支持的 Zabbix server、基于 Nginx Web 服务器的 Zabbix Web 界面和 SNMP trap功能。
1. 创建专用于 Zabbix 组件容器的网络:
root-:# docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net
2. 启动空的 PostgreSQL server 实例:
root-:# docker run --name postgres-server -t \-e POSTGRES_USER="zabbix" \-e POSTGRES_PASSWORD="zabbix_pwd" \-e POSTGRES_DB="zabbix" \--network=zabbix-net \-p 5432:5432 \--restart unless-stopped \-d postgres:latest
3. 启动 Zabbix snmptraps 实例:
# 3. 启动 Zabbix snmptraps 实例
docker rm zabbix-snmptraps
root-:# docker run --name zabbix-snmptraps -t \-v /zbx_instance/snmptraps:/var/lib/zabbix/snmptraps:rw \-v /var/lib/zabbix/mibs:/usr/share/snmp/mibs:ro \--network=zabbix-net \-p 162:1162/udp \--restart unless-stopped \-d zabbix/zabbix-snmptraps:alpine-5.4-latest
注意:Zabbix snmptrap 实例将 162/UDP 端口(SNMP traps)暴露给主机。
4. 启动 Zabbix server 实例,并将其关联到已创建的 PostgreSQL server 实例:
root-:# docker run --name zabbix-server-pgsql -t \-e DB_SERVER_HOST="postgres-server" \-e POSTGRES_USER="zabbix" \-e POSTGRES_PASSWORD="zabbix_pwd" \-e POSTGRES_DB="zabbix" \-e ZBX_ENABLE_SNMP_TRAPS="true" \--network=zabbix-net \-p 10051:10051 \--volumes-from zabbix-snmptraps \--restart unless-stopped \-d zabbix/zabbix-server-pgsql:alpine-5.4-latest
注意:Zabbix server 实例将 10051/TCP 端口(Zabbix trapper)暴露给主机。
5. 启动 Zabbix Web 界面,并将其关联到已创建的 PostgreSQL server 和 Zabbix server 实例:
root-:# docker run --name zabbix-web-nginx-pgsql -t \-e ZBX_SERVER_HOST="zabbix-server-pgsql" \-e DB_SERVER_HOST="postgres-server" \-e POSTGRES_USER="zabbix" \-e POSTGRES_PASSWORD="zabbix_pwd" \-e POSTGRES_DB="zabbix" \--network=zabbix-net \-p 443:8443 \-p 80:8080 \-v /etc/ssl/nginx:/etc/ssl/nginx:ro \--restart unless-stopped \-d zabbix/zabbix-web-nginx-pgsql:alpine-5.4-latest
注意:Zabbix web 界面实例将 443/TCP 端口(HTTPS)暴露给主机。
/etc/ssl/nginx 目录必须包含具有所需名称的证书。
检查容器是否启动
root@host116:/home/wgh# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9d52a2aafffd zabbix/zabbix-web-nginx-pgsql:alpine-5.4-latest "docker-entrypoint.sh" 11 seconds ago Up 9 seconds 0.0.0.0:80->8080/tcp, :::80->8080/tcp, 0.0.0.0:443->8443/tcp, :::443->8443/tcp zabbix-web-nginx-pgsql
38e4e50d50be zabbix/zabbix-server-pgsql:alpine-5.4-latest "/sbin/tini -- /usr/…" About a minute ago Up About a minute 0.0.0.0:10051->10051/tcp, :::10051->10051/tcp zabbix-server-pgsql
862c505ce525 zabbix/zabbix-snmptraps:alpine-5.4-latest "/usr/sbin/snmptrapd…" 2 minutes ago Up 2 minutes 0.0.0.0:162->1162/udp, :::162->1162/udp zabbix-snmptraps
2fc391f270d5 postgres:latest "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp postgres-server
4个容器都是up状态表示正常了。
测试zabbix网页
http://192.168.0.116/zabbix
出现这个页面就表示安装成功 ,登录超级用户名Admin,口令zabbix
【实验一】新增管理员组新用户
(这里一开始走了点弯路,没有新增用户组,直接新增用户,结果之后发现新用户添加主机的时候无法选择用户组,后面即使再添加用户组,关联用户,也没法解决这个问题,无奈,删除用户,从用户组从头开始一步步操作,终于解决了这个问题)
1. 用超级用户名Admin登录(http://192.168.0.116/zabbix)
1.1 补充操作:添加用户组[Administration]- [User groups]
用户组名称自定义,下面用户可以不选
添加权限
这里要注意选项[无]就是删除的意思,也就是如果上面列表里已经有了,你再选择一次同样的权限组,然后这里选择[无],点[Add]的时候就会删除上面列表中的权限组。这个功能有点反人类,又没有提示,我一开始怎么操作都加不上去,还以为是zabbix的bugger,费了老大劲,最后无意中去点了读写,才发现这个骚操作。
最后点最下面的[Add]保存退出,用户组添加成功
2. 菜单路径[Administration]- [Users]
点击[Create user],填入必填内容,
[Users]tab页中[Groups]选择Zabbix administrators,[Language]可以选择Chinese(zh_CN),[Time zone]可以选择Asia/Shanghai
[Media]tab页中设置和这个用户相关的信息反馈方式,这里[Type]选择Email,输入要反馈的邮箱地址,可以指定反馈时间
[Permissions]tab页中设置用户角色为Admin role
全部设置完点击[Add]添加成功
注销超级用户,再用新用户登录
由于我们在创建的时候设置了中文语言,所以新用户的界面是中文的。(这个语言只能显示web页面上的元素,监控信息中展示的文字会出现乱码,网上看到方法是要把本地windows的字符上传到zabbix服务器上,操作复杂,所以建议还是切换回英文)。
实验一完成。
【实验二】新增一个被监控主机
1. 准备一台新虚拟服务器,安装操作系统(这里和zabbix服务器一样,ip不一样)
利用vbox就直接复制了一个虚拟机,修改一下IP启动(新ip:192.168.0.117)
2. 在新虚拟机上安装zabbix-agent(不要用容器,直接安装在虚拟机上)
apt-get install zabbix-agent*## 这里有个大坑,ZBX_SERVER_HOST="192.168.0.116"是指zabbix服务器的IP地址,这里是从网上找来的,当时没注意,人家是基于物理机的,而我这个测试环境用的是容器环境,关于这个agent的安装配置,官网也没有详细说明,其实这里要用容器中的IP地址,容器内的ip地址可以用下面的命令查看
docker inspect 容器名/id | grep IPAddress
3. 参照下面的要求配置agent配置文件 /etc/zabbix/zabbix_agentd.conf/
Agent常用参数 :
[root@localhost zabbix]# cat zabbix_agentd.conf | grep -v ^$ | grep -v ^#
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log #错误日志
LogFileSize=1024 #log的回滚大小
Server=192.168.0.106 #被动模式下必填,将zabbix-server端的ip填入
ServerActive=192.168.0.106 #主动模式下填写,主动将数据推送给哪个服务端,服务端处于被动模式下(将数据通知给哪个server,如果本机既是server又是agent,不能去掉127.0.0.1)
ListenPort=10050 #启动监听端口
ListenIP=0.0.0.0 #0.0.0.0监听所有IP,zabbix agent监听的ip地址(用于agent端向服务端自动注册时,指定本地网卡监听的地址)
Hostname=Api1Bearead #本机的hostname,此值必须与zabbix的网页上创建的主机名一致即可
EnableRemoteCommands=1 #开启监控命令
Timeout=3 #默认超时时间3秒
Include=/etc/zabbix/zabbix_agentd.d/ #开启自定阈值
AllowRoot=0 #调用脚本直接以root用户执行(慎重开启 , 0关闭/1开启)
4.检查服务器页面
在服务器web页面的【自动发现】页面里,就能看到这台新服务器了,不过这里还没配自动注册,所以还是通过手工方式添加新主机,参考步骤如下:
4.1 【配置】-【主机】
点击添加,完成新主机。
可用性有三个状态颜色
绿色表示主机连接正常
红色表示有问题,可以点击看具体问题内容,再排除问题
灰色表示无法识别,就是可能配置有问题,这个就不太好搞了,检查agent配置文件,检查agent端的日志/var/log/zabbix/zabbix_agentd.log
一般配置没问题的话过几分钟自动会变绿。
6. 做完外部的,顺便把本机监控本机一起搞了,重复步骤2直接在服务器上安装agent,按照非本地的方式在本机上操作了一遍,结果还是报错了
在管理页面发现本机监控状态按钮为红色,报错信息如下:
127.0.0.1:10050
Not available Get value from agent failed: cannot connect to [[127.0.0.1]:10050]: [111] Connection refused
经过一番折腾,按照网上的介绍,修改了/etc/zabbix/zabbix_agentd.d没什么效果,最后才发现原来是容器搞的鬼,具体解决步骤参考【问题处理3】
【实验三】监控数据库服务器(Postgresql12)
有关更多设置帮助参考官方说明文档:Browse Zabbix / Zabbix - ZABBIX GIT
以下是实验操作步骤(其实并未严格按照官方说明做的)
1. 准备实验环境
在虚拟机(192.168.0.117)上安装postgresql数据库
# 安装数据库
# apt-get install postgresql-14#简单配置访问权限
# su - postgres
$ vi postgresql.conf
# 把 #listener='localhost' 改为listener='*'
$ vi pg_hba.conf
# 增加 host all all 0.0.0.0/0 md5
# 修改 local相关的条目最后验证方式全部改为trust
# 重启数据库服务
$ systemctl restart postgresql
# 确认服务状态
$ systemctl status postgresql
# 验证数据库并修改超级管理员密码
$ psql
postgres=# alter user postgres password 'postgres';
ALTER ROLE
# 至此实验环境数据库准备就绪
2. 安装agent2(agent2提供了PG的支持)
# 查看 阿里源
# curl -o - "https://mirrors.aliyun.com/zabbix/zabbix-official-repo.key" | apt-key add -% Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent Left Speed
100 2938 100 2938 0 0 33386 0 --:--:-- --:--:-- --:--:-- 33386
OK# 增加阿里源
# echo "deb https://mirrors.aliyun.com/zabbix/zabbix/5.4/ubuntu $(lsb_release -cs) main" >> /etc/apt/sources.list
# apt update# 安装agent2
# apt -y install zabbix-agent2
3. 修改agent2配置文件
/etc/zabbix/zabbix_agent2.conf
参考/etc/zabbix/zabbix_agent.conf
注意:如果已经装过agent了,agent2就不要用默认的10050端口了,另外选一个否则服务起不来。
4. 重启agent2服务
如有问题查看日志:/var/log/zabbix/zabbix_agent2.log
root@host117:/var/log/zabbix# systemctl restart zabbix-agent2
root@host117:/var/log/zabbix# systemctl status zabbix-agent2
● zabbix-agent2.service - Zabbix Agent 2Loaded: loaded (/lib/systemd/system/zabbix-agent2.service; disabled; vendor preset: enabled)Active: active (running) since Sat 2022-04-02 10:07:17 UTC; 7s agoMain PID: 12716 (zabbix_agent2)Tasks: 5 (limit: 4612)Memory: 3.6MCGroup: /system.slice/zabbix-agent2.service└─12716 /usr/sbin/zabbix_agent2 -c /etc/zabbix/zabbix_agent2.confApr 02 10:07:17 host117 systemd[1]: zabbix-agent2.service: Succeeded.
Apr 02 10:07:17 host117 systemd[1]: Stopped Zabbix Agent 2.
Apr 02 10:07:17 host117 systemd[1]: Started Zabbix Agent 2.
Apr 02 10:07:17 host117 zabbix_agent2[12716]: Starting Zabbix Agent 2 (5.4.11)
Apr 02 10:07:17 host117 zabbix_agent2[12716]: Zabbix Agent2 hostname: [host117]
Apr 02 10:07:17 host117 zabbix_agent2[12716]: Press Ctrl+C to exit.
5. 在zabbix服务器页面上新增一个主机(实验环境因为有2个agent了)
步骤可参考【实验二】。hostname=host117_pg
关于模板的选择请参照下面:
再设置[宏]
这里要设置的参数可以从[继承以及主机宏]这里点每个参数旁的修改键自动继承过来,最后改一下[值]就可以了。
保存,配置结束。
等几分钟,主机显示正常。
但是这个还是监控没有成功,后续继续解决监控的问题。
【后续】,截止上面的操作,没有检测到数据库运行数据,经过检查对比前人的操作步骤
修改了宏中的参数{$PG.URI}改为:tcp://localhost:5432,等几分钟后,在面板里看到了数据库监控数据,如下图所示,至此postgresql的配置完成
【实验四】监控一个ORACLE19数据库的容器数据库(PDB)
这里的实验环境,被监控数据库是安装在windows操作系统上的ORACLE19c,里面有一个容器数据库ORCLPDB,我们使用zabbix-agent2来配置监控。
在开始配置前,先确保被监控的数据库服务器上相应的监听和tns都工作正常。(能够通过tns正常访问就没问题了)
1. 先下载windows版的zabbix-agent2,官方下载路径如下:
https://cdn.zabbix.com/zabbix/binaries/stable/5.0/5.0.14/zabbix_agent2-5.0.14-windows-amd64-openssl.msi
安装过程中注意要配置zabbix服务器的信息和被监控的主机名,记下来后面在web页面添加主机的时候注意保持一致即可。这里我用的主机名是LAPTOP-KKMICAPD
安装完成后检查相关服务,打开windows服务窗口
可以看到zabbix-agent2
如果要修改zabbix-agent2的配置怎么办,找到配置文件(在服务里右击zabbix-agent2查看属性有相关的安装路径)zabbix_agent2.conf,然后修改配置信息,保存后重启服务即可。注意如果没有自动把路径放到环境变量PATH中,就需要手工加一下。
2. 在被监控的数据库中创建zabbix监控用户并授权
CREATE USER zabbix_mon IDENTIFIED BY zabbix_pwd;
-- Grant access to the zabbix_mon user.
GRANT CONNECT, CREATE SESSION TO zabbix_mon;
GRANT SELECT ON DBA_TABLESPACE_USAGE_METRICS TO zabbix_mon;
GRANT SELECT ON DBA_TABLESPACES TO zabbix_mon;
GRANT SELECT ON DBA_USERS TO zabbix_mon;
GRANT SELECT ON SYS.DBA_DATA_FILES TO zabbix_mon;
GRANT SELECT ON V_$ACTIVE_SESSION_HISTORY TO zabbix_mon;
GRANT SELECT ON V_$ARCHIVE_DEST TO zabbix_mon;
GRANT SELECT ON V_$ASM_DISKGROUP TO zabbix_mon;
GRANT SELECT ON V_$DATABASE TO zabbix_mon;
GRANT SELECT ON V_$DATAFILE TO zabbix_mon;
GRANT SELECT ON V_$INSTANCE TO zabbix_mon;
GRANT SELECT ON V_$LOG TO zabbix_mon;
GRANT SELECT ON V_$OSSTAT TO zabbix_mon;
GRANT SELECT ON V_$PGASTAT TO zabbix_mon;
GRANT SELECT ON V_$PROCESS TO zabbix_mon;
GRANT SELECT ON V_$RECOVERY_FILE_DEST TO zabbix_mon;
GRANT SELECT ON V_$RESTORE_POINT TO zabbix_mon;
GRANT SELECT ON V_$SESSION TO zabbix_mon;
GRANT SELECT ON V_$SGASTAT TO zabbix_mon;
GRANT SELECT ON V_$SYSMETRIC TO zabbix_mon;
GRANT SELECT ON V_$SYSTEM_PARAMETER TO zabbix_mon;
在web页添加主机,选择对应的模板和配置数据库连接参数
** 这里填的是监控用户
至此完成配置,检查web页面监控正常。
有关oracle监控的官方配置参考文档:
Oracle monitoring and integration with Zabbix
中间遇到了点问题,主机连接报错,查看日志zabbix_agent2.log,报错内容节选:
2022/04/08 10:09:48.729806 [101] active check configuration update from [192.168.0.106:10051] started to fail (dial tcp :0->192.168.0.106:10051: i/o timeout)
2022/04/08 10:10:21.284376 cannot accept incoming connection for peer: 192.168.0.116
解决方法:检查zabbix_agent2.conf文件中的配置信息,发现zabbix主机服务器ip配置错了,修改为正确的地址,参考如下:
ServerActive=192.168.0.116
Server=192.168.0.116
保存退出,重启zabbix-agent2服务。稍等片刻,问题消除。
报错2:
2022/04/08 11:07:20.059664 [Oracle] Cannot fetch data: dpiStmt_execute: ORA-00942: table or view does not exist.
原因:第一次配置的时候没有看官方文档,所以没有建专门的监控用户(其实不建也可以,只要给当前用户相应的权限即可),具体内容参考:Browse Zabbix / Zabbix - ZABBIX GIT
问题处理
【1】构建专用网络组报错
root@gant-ThinkPad-T430:/home/gant# docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net
Error response from daemon: Failed to Setup IP tables: Unable to enable SKIP DNAT rule: (iptables failed: iptables --wait -t nat -I DOCKER -i br-0b78c8a6552a -j RETURN: iptables: No chain/target/match by that name.
解决办法:
重启docker服务
root@gant-ThinkPad-T430:/home/gant# service docker restart
【2】snap的问题
在安装【方案二】的过程中遇到了很多奇怪的报错,在折腾过程多次看到有前人提到一个snap的名字,经了解,这是ubuntu16.4以后提供的一个应用工具,用来管理各种应用软件。回想测试系统在安装的过程中有提示安装预装软件,当时没想那么多觉得可能都用得上,就一股脑全装了,于是重新安装操作系统,到提示预装软件选择的时候一个都没选,操作系统安装完成后,手动安装docker
# apt-get update & apt-get docker
再重复【方案二】的安装步骤,顺利完成安装过程,测试通过。
【3】监控的主机无法连接
先修改agent配置vi /etc/zabbix/zabbix_agentd.conf
Hostname=Zabbix server #这个是管理页面上添加主机时的主机名称 不能包含"字符
Server=127.0.0.1 #这两个没改,就是zabbix server所在的主机IP,因为是he
ServerActive=127.0.0.1 #这两个没改,就是zabbix server所在的主机IP
systemctl stop zabbix-agent.service
systemctl start zabbix-agent.service
systemctl status zabbix-agent.service
root@host116:/home/wgh# systemctl status zabbix-agent.service
● zabbix-agent.service - Zabbix AgentLoaded: loaded (/lib/systemd/system/zabbix-agent.service; enabled; vendor preset: enabled)Active: active (running) since Fri 2022-04-01 08:57:57 UTC; 2s agoDocs: man:zabbix_agentdMain PID: 12195 (zabbix_agentd)Tasks: 6 (limit: 4612)Memory: 3.3MCGroup: /system.slice/zabbix-agent.service├─12195 /usr/sbin/zabbix_agentd --foreground├─12210 /usr/sbin/zabbix_agentd: collector [idle 1 sec]├─12211 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection]├─12212 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection]├─12213 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection]└─12214 /usr/sbin/zabbix_agentd: active checks #1 [getting list of active checks]
等了几分钟,还是不行
网上也百度了很多方法,都不行,查看agent日志(位置在zabbix_agentd.conf中有配置可找到)
# tail -f /var/log/zabbix-agent/zabbix_agentd.log20353:20220401:140356.115 failed to accept an incoming connection: connection from "172.20.240.3" rejected, allowed hosts: "127.0.0.1"20353:20220401:140456.166 failed to accept an incoming connection: connection from "172.20.240.3" rejected, allowed hosts: "127.0.0.1"
第一次发现172.*.*.*这个地址,这个是什么?猛然想起来,在最初安装zabbix组件前,执行了一段建网络的脚本。一直都是拿宿主机的地址在验证,因为zabbix-server是装在容器中的,因为访问数据库是通过宿主机的IP访问的,一直想当然的人为zabbix-server也是用这个地址。
修改zabbix_agentd.conf
Server=172.20.240.3 #这两个没改,就是zabbix server所在的主机IP,因为是he
ServerActive=172.20.240.3 #这两个没改,就是zabbix server所在的主机IP
重启agent服务
systemctl stop zabbix-agent.service
systemctl start zabbix-agent.service
systemctl status zabbix-agent.service
zabbix页面配置上主机地址改成宿主机的实际IP
等待几分钟,状态终于变绿了
至此终于解决了容器zabbix服务器本地监控的问题。
这篇关于【Zabbix】安装部署历险记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!