Logo Neo93
Docker模式部署Zabbix

Docker模式部署Zabbix

January 4, 2025
4 min read
Table of Contents

0x01 Zabbix architecture information

CleanShot 2025-01-04 at 14.59.03@2x

  1. zabbix-server:zabbix的server端,负责接收 agent 发送过来的监控数据,并且提供 zabbix 的所有核心功能。
  2. database: 用于存储监控数据和配置信息的数据库,目前常用的有MySQL和Postgressql两种数据库。
  3. zabbix-web:zabbix的UI端,提供操作控制台和监控展示等功能。
  4. zabbix-java-gateway:用于监控 Java 的JVM 状态,zabbix本身无法直接从JVM获取监控指标,需要使用该网关来实现。
  5. zabbix-agent:zabbix的代理端,部署在目标主机上,用于收集主机的监控数据,并发送给zabbix server。

0x02 Docker Deployment of Zabbix

2.1 Pull Docker Images

创建专用于 zabbix 组件容器的网络

sudo docker create network zabbix-network

查看创建的 docker network

sudo docker network ls

拉取镜像

sudo docker pull zabbix/zabbix-web-nginx-mysql:latest
sudo docker pull zabbix/zabbix-server-mysql:latest
sudo docker pull mysql:8.0

查看下载的镜像文件:

sudo docker images

2.2 Run Docker Containers

启动msyql容器:

neo@dockerserver:/opt/zabbix$ sudo docker run -d \
> --name zabbix-mysql \
> --network zabbix_network \
> -e MYSQL_DATABASE="zabbix" \
> -e MYSQL_USER="zabbix" \
> -e MYSQL_PASSWORD="zabbix" \
> -e MYSQL_ROOT_PASSWORD="root" \
> -v mysql_data:/var/lib/mysql \
> mysql:8.0 \
> --character-set-server=utf8 --collation-server=utf8_bin \
> --default-authentication-plugin=mysql_native_password
8d41dd0bd68c1b832d36635ceaf0663afc2d9374fa42e1a00bf3bf924f150ff9
 
 
# 参数解读
-v mysql_data:/var/lib/mysql:这里的mysql_data是一个Docker volume名称,不需要在宿主机上创建目录
当使用这个参数时:
1. Docker会自动创建一个名为 mysql_data 的volume
2. 这个volume的数据实际存储在Docker的默认目录下,通常是 /var/lib/docker/volumes/mysql_data/_data
可以通过命令查看volume:
 
docker volume ls # 查看所有volume
docker volume inspect mysql_data

如果希望将数据持久化,则可以存储到本地,则需要在原来的基础上增加以下操作:

创建mysql数据目录

sudo mkdir -p /data/mysql
sudo chmod 777 /data/mysql

目录需要注意权限

sudo chown -R 1997:1995 /data/zabbix

创建zabbix相关目录

sudo mkdir -p /data/zabbix/alertscripts  # 告警脚本目录
sudo mkdir -p /data/zabbix/externalscripts  # 外部脚本目录
sudo mkdir -p /data/zabbix/modules          # 模块目录  
sudo mkdir -p /data/zabbix/enc              # 加密配置目录
sudo mkdir -p /data/zabbix/ssh_keys         # ssh秘钥目录
sudo mkdir -p /data/zabbix/mibs             # snmp mib目录
sudo mkdir -p /data/zabbix/snmptraps        # snmp陷阱目录

然后需要修改之前的docker命令,添加卷挂载参数

  1. mysql的容器需要添加:
-v /data/mysql:/var/lib/mysql \
  1. zabbix server容器需要添加:
-v /data/zabbix/alertscripts:/usr/lib/zabbix/alertscripts \
-v /data/zabbix/externalscripts:/usr/lib/zabbix/externalscripts \
-v /data/zabbix/modules:/var/lib/zabbix/modules \
-v /data/zabbix/enc:/var/lib/zabbix/enc \
-v /data/zabbix/ssh_keys:/var/lib/zabbix/ssh_keys \
-v /data/zabbix/mibs:/var/lib/zabbix/mibs \
-v /data/zabbix/snmptraps:/var/lib/zabbix/snmptraps \

启动后验证测试:

neo@dockerserver:/opt/zabbix$ sudo docker exec -it zabbix-mysql /bin/bash
 
bash-5.1# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.40 MySQL Community Server - GPL
 
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
 
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

接下来启动 zabbix Java gateway 容器

neo@dockerserver:/opt/zabbix$ sudo docker run -d \
> --name zabbix-java-gateway \
> --network zabbix_network \
> -e ZBX_TIMEOUT=30 \
> zabbix/zabbix-java-gateway:latest
ed487c9ee503ae6b9ec8f511e10c8ff7602122223f47fb3ecd7f73926baa5efc

然后,启动 zabbix server 容器

neo@dockerserver:/opt/zabbix$ sudo docker run -d \
> --name zabbix-server \
> --network zabbix_network \
> -e DB_SERVER_HOST="zabbix-mysql" \
> -e MYSQL_DATABASE="zabbix" \
> -e MYSQL_USER="zabbix" \
> -e MYSQL_PASSWORD="zabbix" \
> -e MYSQL_ROOT_PASSWORD="root" \
> -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
> -p 10051:10051 \
> zabbix/zabbix-server-mysql:latest
2fe6f9047fe5e97bdd67e49f79ffb71de2571a8147c6d1799e10e7055e92bdb8

最后,还需要启动一个 zabbix Web UI 容器

neo@dockerserver:/opt/zabbix$ sudo docker run -d \
> --name zabbix-web \
> --network zabbix_network \
> -e ZBX_SERVER_HOST="zabbix-server" \
> -e DB_SERVER_HOST="zabbix-mysql" \
> -e MYSQL_DATABASE="zabbix" \
> -e MYSQL_USER="zabbix" \
> -e MYSQL_PASSWORD="zabbix" \
> -e PHP_TZ="Asia/Shanghai" \
> -p 18080:8080 \
> zabbix/zabbix-web-nginx-mysql:latest
9a358a332fa65bcc14d6b7916dc83e5113dd0753d09c7f9e7af245706b9b231f

查看容器状态:

neo@dockerserver:/opt/zabbix$ sudo docker ps
CONTAINER ID   IMAGE                                     COMMAND                  CREATED          STATUS          PORTS                                                     NAMES
9a358a332fa6   zabbix/zabbix-web-nginx-mysql:latest      "docker-entrypoint.sh"   32 seconds ago   Up 32 seconds   8443/tcp, 0.0.0.0:18080->8080/tcp, [::]:18080->8080/tcp   zabbix-web
2fe6f9047fe5   zabbix/zabbix-server-mysql:latest         "/usr/bin/docker-ent…"   3 minutes ago    Up 3 minutes    0.0.0.0:10051->10051/tcp, :::10051->10051/tcp             zabbix-server
ed487c9ee503   zabbix/zabbix-java-gateway:latest         "docker-entrypoint.s…"   6 minutes ago    Up 6 minutes    10052/tcp                                                 zabbix-java-gateway
8d41dd0bd68c   mysql:8.0                                 "docker-entrypoint.s…"   23 minutes ago   Up 23 minutes   3306/tcp, 33060/tcp                                       zabbix-mysql
7e5140b23b10   prom/prometheus:latest                    "/bin/prometheus --c…"   28 hours ago     Up 28 hours     0.0.0.0:19090->9090/tcp, [::]:19090->9090/tcp             prometheus
4016a9d1abec   quay.io/prometheus/node-exporter:latest   "/bin/node_exporter …"   29 hours ago     Up 29 hours                                                               node_exporter
neo@dockerserver:/opt/zabbix$ 

2.3 Install zabbix-agent

安装zabbix-agent,直接在物理机上安装

db@localhost:~$ wget https://repo.zabbix.com/zabbix/7.2/release/ubuntu/pool/main/z/zabbix-release/zabbix-release_7.2-0.1%2Bubuntu24.04_all.deb
 
db@localhost:~$ sudo dpkg -i zabbix-release_7.2-0.1+ubuntu24.04_all.deb 
 
sudo apt update
 
sudo apt install zabbix-agent2 -y
 
vim /etc/zabbix/zabbix_agent2.conf
# 主要修改的参数:
Server=你的zabbix服务器IP
ServerActive=你的zabbix服务器IP
Hostname=这台主机的名称
 
systemctl restart zabbix-agent2
systemctl enable zabbix-agent2
systemctl status zabbix-agent2