docker搭建并使用Zabbix
0 zabbix基础知识
- zabbix-server
zabbix 的server 端,负责接收agent发送过来的监控数据,并且提供zabbix的所有核心功能。- database
用于存储监控数据和配置信息的数据库,目前常用的有mysql和postgresql两种数据库。- zabbix-web
zabbix的UI端,提供操作控制台和监控展示等功能。- zabbix-java-gateway
用于监控Java程序的JVM状态,zabbix本身无法直接从jvm获取监控指标,需使用该网关来实现。- zabbbix-agent
zabbix的代理端,部署在目标主机上,用于收集主机的监控数据,并提供给到zabbix server。
1 安装并启动docker
yum install -y yum-utils
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
yum install docker
systemctl start docker
2 拉取mysql、zabbix-server等镜像
docker pull mysql:5.7
docker pull docker.io/zabbix/zabbix-web-nginx-mysql:centos-5.4-latest
docker pull docker.io/zabbix/zabbix-server-mysql:centos-5.4-latest
①运行mysql
- 创建存储卷,用于持久化mysql数据
docker volume create -d local mysql_data # 存放mysql的数据
docker volume create -d local mysql_logs # 存放mysql的日志
docker volume create -d local mysql_conf # 存放mysql的配置文件
说明:存储卷默认存储位置路径为:/var/lib/docker/volume/${volume_name}。
- 创建并运行mysql8容器
docker run --name mysql-server -t \
-v mysql_data:/var/lib/mysql \
-v mysql_logs:/var/log/mysql \
-v mysql_conf:/etc/mysql \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="123456" \
--restart=unless-stopped \
-d mysql:8.0 \
--character-set-server=utf8 --collation-server=utf8_bin \
--default-authentication-plugin=mysql_native_password
说明:zabbix6.x版本要求使用mysql8.0。
②运行zabbix-java-gateway
docker run --name zabbix-java-gateway -t \
--restart=unless-stopped \
-d zabbix/zabbix-java-gateway:alpine-6.2-latest
③运行zabbix-server
- 创建存储卷,用于存储zabbix的配置文件
docker volume create -d local zabbix_server
- 创建并启动zabbix-server
运行zabbix-server容器,开放10051/TCP端口,用于接收监控数据。添加–link参数,实现mysql和java-gateway容器间的互相通信。
docker run --name zabbix-server-mysql -t \
-v zabbix_server:/etc/zabbix \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="123456" \
-e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
--link mysql-server:mysql \
--link zabbix-java-gateway:zabbix-java-gateway \
--restart=unless-stopped \
-p 10051:10051 \
-d zabbix/zabbix-server-mysql:alpine-6.2-latest
注意:
此方式适合所有容器部署在同一台主机上,如果是分开部署,则在前面的步骤需要开放相关端口,并通过局域网进行连接。
④运行zabbix-web
运行zabbix-web容器,默认暴露端口80
docker run --name zabbix-web-nginx-mysql -t \
-e PHP_TZ="Asia/Shanghai" \
-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="123456" \
--link mysql-server:mysql \
--link zabbix-server-mysql:zabbix-server \
-p 80:8080 \
--restart unless-stopped \
-d zabbix/zabbix-web-nginx-mysql:alpine-6.2-latest
如果提示端口占用:
方式一:先删除镜像,然后更换没有占用的端口(例如:zabbix-web-nginx-mysql的80端口已经被占用)
- 删除镜像:docker rm zabbix-web-nginx-mysql
- 更换映射端口
-p 80:8080更换为-p 9000:8080
即可方式二:杀死占用端口的进程
- 执行命令找到占用端口的进程号(list open files:lsof命令可以列出当前系统中被打开的文件和网络连接,包括文件名、进程ID、用户、文件类型、文件描述符等详细信息):
sudo lsof -i :80
- 杀死进程:
sudo kill 进程号(processID)
执行结果:
3 运行zabbix-agent
如果我们想要监控zabbix-server服务器上的信息,那么我们需要安装zabbix-agent
3.1 通过安装包部署(推荐)
- 通过rpm安装zabbix对应仓库
rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm
# 清除本地yum缓存
yum clean all
- 安装zabbix-agent
yum install -y zabbix-agent
- 启动zabbix-agent
systemctl restart zabbix-agent
# 设置开机自启
# systemctl enable zabbix-agent
3.2 通过docker部署
如果我们在docker中部署zabbix-agent,那么zabbix-server监控到的就是容器状态,而非是宿主机状态
- 通过docker部署我们需要修改容器中配置文件的ZBX_Server_HOST,但是如果修改之后重启之后会丢失修改,所以需要编写一个DockerFile,然后构建自己的zabbix-agent镜像
- 部分命令:
#编写DockerFile vi Dockerfile # DockerFile中填写下面两行信息 FROM zabbix/zabbix-agent:alpine-6.2-latest COPY zabbix_agentd.conf /etc/zabbix/zabbix_agentd.conf # 构建自己的镜像 docker build -t my-zabbix-agent #通过自己的镜像运行容器 docker run -d \ --name zabbix-agent \ -v /var/log/zabbix:/var/log/zabbix \ -p 10050:10050 \ --restart=unless-stopped \ --privileged \ my-zabbix-agent
通过Docker部署:
# ZBX_SERVER_HOST更换为自己zabbix-server的所在地址
# 并且在zabbix的web页面中也需要填写agent的容器地址
docker run -d \
--name zabbix-agent \
-v /etc/zabbix \
-v /var/log/zabbix:/var/log/zabbix \
-e ZBX_HOSTNAME="client-01" \
-e ZBX_SERVER_HOST="10.253.50.145" \
-e ZBX_SERVER_PORT=10051 \
-p 10050:10050 \
--restart=unless-stopped \
--privileged \
zabbix/zabbix-agent:alpine-6.2-latest
3.3 设置web为中文及bug处理
- 修改zabbix的web页面,设置页面显示为中文
User settings - Profile - Language - Chinese,最后点击下方的update
2. 修改zabbix的监控地址为agent地址
检测 - 主机 - 选择我们的zabbix-server - 鼠标单击然后选择配置
更换agent的地址为zabbix-server的地址
因为我们此刻是在zabbix-server的机器上安装了一台zabbix-agent,目的是为了检测我们zabbix-server所在机器的状态。
- 如果大家将zabbix-agent安装在了其他机器上,更换为对应机器ip地址即可
3. 等待几分钟刷新页面即可
bug1:
如果发现可用性仍然没有变成绿色,并且页面报错
Asuming that agent dropped connect because of access permision
,表明是我们没有开启对应的权限
- 首先查看是否关闭了防火墙
- 关闭防火墙命令:systemctl stop firewalld
- 如果使用的是云服务器,查看云服务器的对应安全组策略是否开启
- 权限不够:修改zabbix-agent的配置文件
- vim /etc/zabbix/zabbix_agentd.conf
- 找到Server位置,将其修改为自己server所在ip地址加网段,如:172.159.92.3/24;如果为了方便也可以将其修改为0.0.0.0/0(代表运行所有的服务器访问)
完成之后,:wq
保存退出,systemctl restart zabbix-agent.service
重启zabbix-agent,等待几分钟之后在刷新zabbix的web页面即可- 如果上述方法都不行,就对应查看日志报错信息,来对应处理:
查看日志信息:tail -f /var/log/zabbix/zabbix_agentd.log
- 报错信息:Unable to connect to [127.0.0.1]:10051 [cannot connect to [[127.0.0.1]:10051]: [111] Connection refused]
- 表明是服务器地址配置错了,
vim /etc/zabbix/zabbix_agentd.conf
,将配置文件中的ServerActive更改为zabbix-server的地址,如:10.253.50.145,记住只需要修改ip,不用携带port端口
bug2:
如果查询agent的日志文件发现报错信息:
23946:20230722:121107.962 no active checks on server [10.253.50.145:10051]: host [Zabbix server] not found
- 查询日志文件命令:tail -f /var/log/zabbix/zabbix_agentd.log
- 解决办法:修改agent配置文件中的Hostname,
- 查看配置文件中的HostName:
cat /etc/zabbix/zabbix_agentd.conf | grep Hostname- 在zabbix web页面Monitoring->Configuration->Hosts 页面更改Host name和zabbix_agentd.conf里面的Hostname一样。
- 重启zabbix-agent
参考文章:https://blog.csdn.net/chang_chunhua/article/details/127846551