Zabbix容器化部署

Zabbix容器化部署。

Zabbix容器化部署

前言

以下是zabbix仓库中的一些镜像

组件 类型/说明 Docker 仓库
Zabbix agent - zabbix/zabbix-agent
Zabbix server 支持 MySQL zabbix/zabbix-server-mysql
Zabbix server 支持 PostgreSQL zabbix/zabbix-server-pgsql
Zabbix Web 界面 基于 Apache2 Web 服务器,支持 MySQL zabbix/zabbix-web-apache-mysql
Zabbix Web 界面 基于 Apache2 Web 服务器,支持 PostgreSQL zabbix/zabbix-web-apache-pgsql
Zabbix Web 界面 基于 Nginx Web 服务器,支持 MySQL zabbix/zabbix-web-nginx-mysql
Zabbix Web 界面 基于 Nginx Web 服务器,支持 PostgreSQL zabbix/zabbix-web-nginx-pgsql
Zabbix proxy 支持 SQLite3 zabbix/zabbix-proxy-sqlite3
Zabbix proxy 支持 MySQL zabbix/zabbix-proxy-mysql
Zabbix Java 网关 - zabbix/zabbix-java-gateway

创建zabbix组件容器的网络

docker network create \
    --subnet 172.20.0.0/16 \
    --ip-range 172.20.240.0/20 \
    zabbix-net

选择数据库

一般来说是不需要开放端口的,本身就是内部之间通过容器名进行通信,开放端口是后续连接测试用的

Mysql

docker pull mysql:8

-p 宿主机端口:容器端口

docker rm -f mysql-server &>/dev/null
docker run --name mysql-server -d \
      --restart unless-stopped \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="123456" \
      -e MYSQL_ROOT_PASSWORD="123456" \
      --network=zabbix-net \
      -p 3306:3306 \
      mysql:8 \
      --character-set-server=utf8mb4 \
      --collation-server=utf8mb4_bin

出现下面的信息正常

[root@qianyios ~]# mysql -u root -p123456 -h 127.0.0.1 -e"show databases;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| zabbix             |
+--------------------+

PostgreSQL

docker pull postgres:17-alpine

-p 宿主机端口:容器端口

docker run --name pg-server -d \
      -e POSTGRES_DB="zabbix" \
      -e POSTGRES_USER="zabbix" \
      -e POSTGRES_PASSWORD="123456" \
      --network zabbix-net \
      -p 5432:5432 \
      --restart unless-stopped \
      postgres:17-alpine

出现下面的信息是正常的

[root@qianyios ~]# docker exec -it pg-server psql -U zabbix -d zabbix -c "\l"
                                                 List of databases
   Name    | Owner  | Encoding | Locale Provider |  Collate   |   Ctype    | Locale | ICU Rules | Access privileges
-----------+--------+----------+-----------------+------------+------------+--------+-----------+-------------------
 postgres  | zabbix | UTF8     | libc            | en_US.utf8 | en_US.utf8 |        |           |
 template0 | zabbix | UTF8     | libc            | en_US.utf8 | en_US.utf8 |        |           | =c/zabbix        +
           |        |          |                 |            |            |        |           | zabbix=CTc/zabbix
 template1 | zabbix | UTF8     | libc            | en_US.utf8 | en_US.utf8 |        |           | =c/zabbix        +
           |        |          |                 |            |            |        |           | zabbix=CTc/zabbix
 zabbix    | zabbix | UTF8     | libc            | en_US.utf8 | en_US.utf8 |        |           |
(4 rows)

部署java网关

docker pull zabbix/zabbix-java-gateway:alpine-7.4-latest
docker run --name zabbix-java-gateway -t \
      --network=zabbix-net \
      --restart unless-stopped \
      -d zabbix/zabbix-java-gateway:alpine-7.4-latest

部署zabbix server

并且关联到前面的数据库实例

mysql

DB_SERVER_HOST="mysql-server" 是前面的mysql的容器名,在docker,容器名可以作为内部通信的

ZBX_JAVAGATEWAY="zabbix-java-gateway" 也是类似的意思

docker pull zabbix/zabbix-server-mysql:alpine-7.4-latest
docker rm -f zabbix-server-mysql &> /dev/null
docker run --name zabbix-server-mysql -t \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_PORT="3306" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="123456" \
      -e MYSQL_ROOT_PASSWORD="123456" \
      -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
      --network=zabbix-net \
      -p 10052:10051 \
      --restart unless-stopped \
      -d zabbix/zabbix-server-mysql:alpine-7.4-latest

postgresql

DB_SERVER_HOST="pg-server" 是前面的postgresql的容器名,在docker,容器名可以作为内部通信的

ZBX_JAVAGATEWAY="zabbix-java-gateway" 也是类似的意思

docker pull zabbix/zabbix-server-pgsql:alpine-7.4-latest
docker run --name zabbix-server-pgsql -t \
      -e DB_SERVER_HOST="pg-server" \
      -e POSTGRES_DB="zabbix" \
      -e POSTGRES_USER="zabbix" \
      -e POSTGRES_PASSWORD="123456" \
      -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
      --network=zabbix-net \
      -p 10053:10051 \
      --restart unless-stopped \
      -d zabbix/zabbix-server-pgsql:alpine-7.4-latest

部署zabbix web

并将其关联到已创建的 数据库实例 和 Zabbix server(对应数据库) 实例

我这里选用的是Nginx

官方默认账号密码(固定不变)

用户名:Admin(A 大写

密码:zabbix(全小写)

mysql

docker pull zabbix/zabbix-web-nginx-mysql:alpine-7.4-latest
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="123456" \
      -e MYSQL_ROOT_PASSWORD="123456" \
      --network=zabbix-net \
      -p 81:8080 \
      --restart unless-stopped \
      -d zabbix/zabbix-web-nginx-mysql:alpine-7.4-latest

postgresql

docker pull zabbix/zabbix-web-nginx-pgsql:alpine-7.4-latest
docker run --name zabbix-web-nginx-pgsql -t \
      -e ZBX_SERVER_HOST="zabbix-server-pgsql" \
      -e DB_SERVER_HOST="pg-server" \
      -e POSTGRES_DB="zabbix" \
      -e POSTGRES_USER="zabbix" \
      -e POSTGRES_PASSWORD="123456" \
      --network=zabbix-net \
      -p 82:8080 \
      --restart unless-stopped \
      -d zabbix/zabbix-web-nginx-pgsql:alpine-7.4-latest

部署zabbix-agent

用来监控宿主机 + 所有容器

一般来说只需要一个agent,但是前面我们区分两个数据库版本的web server,那我这里就举两个例子

基础知识

-v 名字:容器路径 = Docker 命名数据卷(自动管理、持久化)

-v 路径:容器路径 = 宿主机目录挂载

--privileged = 自动拥有宿主机所有目录权限

-p 宿主机端口:容器端口

下面都是数据卷的方式

查看数据卷的具体位置(举例)

[root@qianyios ~]# docker volume inspect zabbix-agent-mysql-conf
[
    {
        "CreatedAt": "2026-05-21T12:37:07+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/zabbix-agent-mysql-conf/_data",
        "Name": "zabbix-agent-mysql-conf",
        "Options": null,
        "Scope": "local"
    }
]
[root@qianyios ~]#
#这样你就可以把你的conf放进去了

mysql

只监控容器

一般来说,都是要在对应要监控的机子部署agent,一般不会监控容器内的东西的,所以这个一般不要,只会用下面监控宿主机

docker pull zabbix/zabbix-agent:alpine-7.4-latest
# 启动 Zabbix Agent 对接 zabbix-server-mysql
docker rm -f zabbix-agent-mysql &> /dev/null
docker run --name zabbix-agent-mysql -d \
      --network zabbix-net \
      -p 10051:10050 \
      -e ZBX_HOSTNAME="zabbix-agent-mysql" \
      -e ZBX_SERVER_HOST="zabbix-server-mysql" \
      -v zabbix-agent-conf:/etc/zabbix/zabbix_agentd.d \
      -v zabbix-agent-modules:/var/lib/zabbix/modules \
      -v zabbix-agent-enc:/var/lib/zabbix/enc \
      --restart unless-stopped \
      zabbix/zabbix-agent:alpine-7.4-latest

监控宿主机

--privileged = 自动拥有宿主机所有目录权限

# 对接MySQL版server,可采集宿主机CPU/内存/磁盘/网络整机数据
docker rm -f zabbix-agent-mysql &> /dev/null
docker run --name zabbix-agent-mysql -d \
    --network zabbix-net \
    -p 10051:10050 \
    -e ZBX_HOSTNAME="zabbix-agent-mysql" \
    -e ZBX_SERVER_HOST="zabbix-server-mysql" \
    -v zabbix-agent-mysql-conf:/etc/zabbix/zabbix_agentd.d \
    -v zabbix-agent-mysql-modules:/var/lib/zabbix/modules \
    -v zabbix-agent-mysql-enc:/var/lib/zabbix/enc \
    --privileged \
    --restart unless-stopped \
    zabbix/zabbix-agent:alpine-7.4-latest

image.png

postgresql

只监控容器

一般来说,都是要在对应要监控的机子部署agent,一般不会监控容器内的东西的,所以这个一般不要,只会用下面监控宿主机

docker pull zabbix/zabbix-agent:alpine-7.4-latest
# 启动 Zabbix Agent 对接 zabbix-server-pgsql
docker rm -f zabbix-agent-pgsql &> /dev/null
docker run --name zabbix-agent-pgsql -d \
      --network zabbix-net \
      -p 10052:10050 \
      -e ZBX_HOSTNAME="zabbix-agent-pgsql" \
      -e ZBX_SERVER_HOST="zabbix-server-pgsql" \
      -v zabbix-agent-pg-conf:/etc/zabbix/zabbix_agentd.d \
      -v zabbix-agent-pg-modules:/var/lib/zabbix/modules \
      -v zabbix-agent-pg-enc:/var/lib/zabbix/enc \
      --restart unless-stopped \
      zabbix/zabbix-agent:alpine-7.4-latest

监控宿主机

--privileged = 自动拥有宿主机所有目录权限

docker rm -f zabbix-agent-pgsql &> /dev/null
docker run --name zabbix-agent-pgsql -d \
    --network zabbix-net \
    -p 10055:10050 \
    -e ZBX_HOSTNAME="zabbix-agent-pgsql" \
    -e ZBX_SERVER_HOST="zabbix-server-pgsql" \
    -v zabbix-agent-pg-conf:/etc/zabbix/zabbix_agentd.d \
    -v zabbix-agent-pg-modules:/var/lib/zabbix/modules \
    -v zabbix-agent-pg-enc:/var/lib/zabbix/enc \
    --privileged \
    --restart unless-stopped \
    zabbix/zabbix-agent:alpine-7.4-latest

image.png

官方文档没写的变量

前言

这是我在容器里面去找到的变量

docker exec -it zabbix-agent-mysql sh -c 'grep "=\${" /etc/zabbix/*.conf'
# -------------------------- 核心通信模式(主动+被动)
Server=${ZBX_PASSIVESERVERS} # 被动模式:允许的Server地址
ServerActive=${ZBX_ACTIVESERVERS} # 主动模式:上报的Server地址
StartAgents=${ZBX_STARTAGENTS} # 被动模式:监听进程数(0=关闭被动)
Hostname=${ZBX_HOSTNAME} # 主机名(主动模式必须与Web一致)
HostnameItem=${ZBX_HOSTNAMEITEM} # 自动获取主机名的监控项
Timeout=${ZBX_TIMEOUT} # 数据收发超时时间

# -------------------------- 主动模式高级参数
RefreshActiveChecks=${ZBX_REFRESHACTIVECHECKS} # 主动配置刷新间隔
BufferSend=${ZBX_BUFFERSEND} # 数据缓冲发送频率
BufferSize=${ZBX_BUFFERSIZE} # 数据缓冲最大存储大小
MaxLinesPerSecond=${ZBX_MAXLINESPERSECOND} # 每秒最大发送数据行数
HeartbeatFrequency=${ZBX_HEARTBEAT_FREQUENCY} # 主动模式心跳频率

# -------------------------- 主机自动注册(主动模式用)
HostMetadata=${ZBX_METADATA} # 主机注册元数据
HostMetadataItem=${ZBX_METADATAITEM} # 自动获取元数据
HostInterface=${ZBX_HOSTINTERFACE} # 主机注册接口
HostInterfaceItem=${ZBX_HOSTINTERFACEITEM} # 自动获取主机接口

# -------------------------- 网络监听(被动模式用)
ListenPort=${ZBX_LISTENPORT} # 监听端口(默认10050)
ListenIP=${ZBX_LISTENIP} # 监听IP地址
ListenBacklog=${ZBX_LISTENBACKLOG} # 监听队列长度
SourceIP=${ZBX_SOURCEIP} # 对外连接的源IP

# -------------------------- 安全与运行权限
AllowRoot=${ZBX_ALLOWROOT} # 是否允许root运行
User=${ZBX_USER} # 运行Agent的系统用户

# -------------------------- TLS加密配置
TLSConnect=${ZBX_TLSCONNECT} # TLS发起连接方式
TLSAccept=${ZBX_TLSACCEPT} # TLS接受连接方式
TLSCAFile=${ZBX_TLSCAFILE} # CA证书文件
TLSCRLFile=${ZBX_TLSCRLFILE} # 证书吊销列表文件
TLSServerCertIssuer=${ZBX_TLSSERVERCERTISSUER} # 服务器证书颁发者
TLSServerCertSubject=${ZBX_TLSSERVERCERTSUBJECT} # 服务器证书主题
TLSCertFile=${ZBX_TLSCERTFILE} # 本地证书文件
TLSKeyFile=${ZBX_TLSKEYFILE} # 本地私钥文件
TLSPSKIdentity=${ZBX_TLSPSKIDENTITY} # PSK身份标识
TLSPSKFile=${ZBX_TLSPSKFILE} # PSK密钥文件
TLSCipherCert=${ZBX_TLSCIPHERCERT} # 证书加密套件
TLSCipherCert13=${ZBX_TLSCIPHERCERT13} # TLS1.3证书加密套件
TLSCipherPSK=${ZBX_TLSCIPHERPSK} # PSK加密套件
TLSCipherPSK13=${ZBX_TLSCIPHERPSK13} # TLS1.3 PSK加密套件
TLSCipherAll=${ZBX_TLSCIPHERALL} # 全部加密套件
TLSCipherAll13=${ZBX_TLSCIPHERALL13} # TLS1.3全部加密套件

# -------------------------- 日志与调试
DebugLevel=${ZBX_DEBUGLEVEL} # 日志调试级别
LogRemoteCommands=${ZBX_LOGREMOTECOMMANDS} # 是否记录远程执行命令

# -------------------------- 模块与自定义参数
LoadModulePath=${ZBX_LOADMODULEPATH} # 模块加载路径
UnsafeUserParameters=${ZBX_UNSAFEUSERPARAMETERS} # 允许不安全自定义参数
UserParameterDir=${ZBX_USERPARAMETERDIR} # 用户自定义参数目录

0 条评论

请先 登录 后评论
严千屹
严千屹

1 篇文章

作家榜 »

  1. 乐维君 516 文章
  2. YOHOHO 14 文章
  3. 细雨闲花 13 文章
  4. 机灵小和尚 13 文章
  5. 我是一只小菜鸡 12 文章
  6. 。。。 9 文章
  7. 御前侍卫张五哥 9 文章
  8. 小黄人 8 文章