0x01 Zabbix architecture information

- zabbix-server:zabbix的server端,负责接收 agent 发送过来的监控数据,并且提供 zabbix 的所有核心功能。
- database: 用于存储监控数据和配置信息的数据库,目前常用的有MySQL和Postgressql两种数据库。
- zabbix-web:zabbix的UI端,提供操作控制台和监控展示等功能。
- zabbix-java-gateway:用于监控 Java 的JVM 状态,zabbix本身无法直接从JVM获取监控指标,需要使用该网关来实现。
- 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 images2.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命令,添加卷挂载参数
- mysql的容器需要添加:
-v /data/mysql:/var/lib/mysql \- 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