實驗環境
[root@zabbix_server ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
一、Docker
1、安裝
[root@zabbix_server ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
[root@zabbix_server ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@zabbix_server ~]# yum install -y docker-ce docker-ce-cli containerd.io
2、啓動
[root@zabbix_server ~]# systemctl start docker
[root@zabbix_server ~]# systemctl enable docker
二、Docker安裝zabbix的兩種方式
Zabbix官網手冊:https://www.zabbix.com/documentation/4.0/zh/manual/installation/containers
1、直接使用docker run示例,官網提供了三個不同示例
2、使用docker-compose命令運行yaml腳本,本文主要也是說明這個。這個命令將會爲每個 Zabbix 組件下載最新的 Zabbix 4.0 鏡像,並以 detach 模式運行
三、Docker Compose
GitHub官網:https://github.com/docker/compose/releases
1、安裝docker-compose
[root@zabbix_server ~]# curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 617 0 617 0 0 495 0 --:--:-- 0:00:01 --:--:-- 496
100 15.4M 100 15.4M 0 0 177k 0 0:01:28 0:01:28 --:--:-- 115k
#給二進制文件執行權限
[root@zabbix_server ~]# chmod +x /usr/local/bin/docker-compose
#查看版本
[root@zabbix_server ~]# docker-compose --version
docker-compose version 1.24.1, build 4667896b
2、GitHub下載腳本,這裏選擇了master節點下載
3、創建一個存放目錄,把下載所有以點開頭的環境變量文件和一個yaml文件上傳到zabbix_server服務器(因爲實驗系統是centos,所以選擇了docker-compose_v3_centos_mysql_latest.yaml,根據需求參考)
[root@zabbix_server ~]# mkdir zabbix
[root@zabbix_server ~]# cd zabbix/
4、docker-compose_v3_centos_mysql_latest.yaml還可以根據需求進一步優化
本文選擇安裝:zabbix-server、zabbix-web-apache-mysql、zabbix-agent、zabbix-snmptraps、mysql-server
注意:在每個基礎鏡像下添加restart: always,要不容器退出之後無法自動啓動
[root@zabbix_server zabbix]# vim docker-compose_v3_centos_mysql_latest.yaml
version: '3.5'
services:
zabbix-server:
image: zabbix/zabbix-server-mysql:centos-latest #基礎鏡像
restart: always #指定容器退出後的重啓策略爲始終重啓。該命令對保持服務始終運行十分有效,在生產環境中推薦配置爲always或者unless-stopped。
ports:
- "10051:10051" #暴露端口
volumes:
- /etc/localtime:/etc/localtime:ro #時間,只讀模式
- /etc/timezone:/etc/timezone:ro #時區,只讀模式
- ./zbx_env/usr/lib/zabbix/alertscripts:/usr/lib/zabbix/alertscripts:ro #映射數據卷
- ./zbx_env/usr/lib/zabbix/externalscripts:/usr/lib/zabbix/externalscripts:ro
- ./zbx_env/var/lib/zabbix/modules:/var/lib/zabbix/modules:ro
- ./zbx_env/var/lib/zabbix/enc:/var/lib/zabbix/enc:ro
- ./zbx_env/var/lib/zabbix/ssh_keys:/var/lib/zabbix/ssh_keys:ro
- ./zbx_env/var/lib/zabbix/mibs:/var/lib/zabbix/mibs:ro
- ./zbx_env/var/lib/zabbix/snmptraps:/var/lib/zabbix/snmptraps:ro
links: #容器之間建立互聯(將刪除,不推薦使用)
- mysql-server:mysql-server #第一個mysql-server是要鏈接的容器名稱,第二個mysql-server是別名
ulimits: #指定容器的 ulimits 限制值
nproc: 65535
nofile:
soft: 20000
hard: 40000
deploy: #僅用於Swarm mode
resources:
limits:
cpus: '0.70'
memory: 1G
reservations:
cpus: '0.5'
memory: 512M
env_file: #從文件中獲取環境變量,可以爲單獨的文件路徑或列表
- .env_db_mysql #這些就是剛纔上傳.開頭的隱藏文件
- .env_srv
secrets: #存儲敏感數據,例如 mysql 服務密碼
- MYSQL_USER
- MYSQL_PASSWORD
- MYSQL_ROOT_PASSWORD
user: root
depends_on: #解決容器的依賴、啓動先後的問題。以下會先啓動mysql-server和zabbix-snmptraps,再啓動zabbix-server
- mysql-server
- zabbix-snmptraps
networks: #配置容器連接的網絡
zbx_net_backend:
aliases:
- zabbix-server
- zabbix-server-mysql
- zabbix-server-centos-mysql
- zabbix-server-mysql-centos
zbx_net_frontend:
# devices:
# - "/dev/ttyUSB0:/dev/ttyUSB0"
stop_grace_period: 30s
sysctls: #配置容器內核參數
- net.ipv4.ip_local_port_range=1024 65000
- net.ipv4.conf.all.accept_redirects=0
- net.ipv4.conf.all.secure_redirects=0
- net.ipv4.conf.all.send_redirects=0
labels: #爲容器添加 Docker 元數據(metadata)信息。例如可以爲容器添加輔助說明信息
com.zabbix.description: "Zabbix server with MySQL database support"
com.zabbix.company: "Zabbix LLC"
com.zabbix.component: "zabbix-server"
com.zabbix.dbtype: "mysql"
com.zabbix.os: "centos"
zabbix-web-apache-mysql:
image: zabbix/zabbix-web-apache-mysql:centos-latest
restart: always
ports:
- "80:80"
- "443:443"
links:
- mysql-server:mysql-server
- zabbix-server:zabbix-server
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- ./zbx_env/etc/ssl/apache2:/etc/ssl/apache2:ro
deploy:
resources:
limits:
cpus: '0.70'
memory: 512M
reservations:
cpus: '0.5'
memory: 256M
env_file:
- .env_db_mysql
- .env_web
secrets:
- MYSQL_USER
- MYSQL_PASSWORD
user: root
depends_on:
- mysql-server
- zabbix-server
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 10s
timeout: 5s
retries: 3
start_period: 30s
networks:
zbx_net_backend:
aliases:
- zabbix-web-apache-mysql
- zabbix-web-apache-centos-mysql
- zabbix-web-apache-mysql-centos
zbx_net_frontend:
stop_grace_period: 10s
sysctls:
- net.core.somaxconn=65535
labels:
com.zabbix.description: "Zabbix frontend on Apache web-server with MySQL database support"
com.zabbix.company: "Zabbix LLC"
com.zabbix.component: "zabbix-frontend"
com.zabbix.webserver: "apache2"
com.zabbix.dbtype: "mysql"
com.zabbix.os: "centos"
zabbix-agent:
image: zabbix/zabbix-agent:centos-latest
restart: always
ports:
- "10050:10050"
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- ./zbx_env/etc/zabbix/zabbix_agentd.d:/etc/zabbix/zabbix_agentd.d:ro
- ./zbx_env/var/lib/zabbix/modules:/var/lib/zabbix/modules:ro
- ./zbx_env/var/lib/zabbix/enc:/var/lib/zabbix/enc:ro
- ./zbx_env/var/lib/zabbix/ssh_keys:/var/lib/zabbix/ssh_keys:ro
links:
- zabbix-server:zabbix-server
deploy:
resources:
limits:
cpus: '0.2'
memory: 128M
reservations:
cpus: '0.1'
memory: 64M
mode: global
env_file:
- .env_agent
user: root
privileged: true
pid: "host"
networks:
zbx_net_backend:
aliases:
- zabbix-agent
- zabbix-agent-passive
- zabbix-agent-centos
stop_grace_period: 5s
labels:
com.zabbix.description: "Zabbix agent"
com.zabbix.company: "Zabbix LLC"
com.zabbix.component: "zabbix-agentd"
com.zabbix.os: "centos"
zabbix-snmptraps:
image: zabbix/zabbix-snmptraps:centos-latest
ports:
- "162:162/udp"
volumes:
- ./zbx_env/var/lib/zabbix/snmptraps:/var/lib/zabbix/snmptraps:rw
deploy:
resources:
limits:
cpus: '0.5'
memory: 256M
reservations:
cpus: '0.25'
memory: 128M
user: root
networks:
zbx_net_frontend:
aliases:
- zabbix-snmptraps
zbx_net_backend:
stop_grace_period: 5s
labels:
com.zabbix.description: "Zabbix snmptraps"
com.zabbix.company: "Zabbix LLC"
com.zabbix.component: "snmptraps"
com.zabbix.os: "ubuntu"
mysql-server:
image: mysql:5.7
restart: always
command: [mysqld, --character-set-server=utf8, --collation-server=utf8_bin]
volumes:
- ./zbx_env/var/lib/mysql:/var/lib/mysql:rw
env_file:
- .env_db_mysql
secrets:
- MYSQL_USER
- MYSQL_PASSWORD
- MYSQL_ROOT_PASSWORD
user: root
stop_grace_period: 1m
networks:
zbx_net_backend:
aliases:
- mysql-server
- zabbix-database
- mysql-database
networks:
zbx_net_frontend:
driver: bridge
driver_opts:
com.docker.network.enable_ipv6: "false"
ipam:
driver: default
config:
- subnet: 172.16.238.0/24
zbx_net_backend:
driver: bridge
driver_opts:
com.docker.network.enable_ipv6: "false"
internal: true
ipam:
driver: default
config:
- subnet: 172.16.239.0/24
secrets:
MYSQL_USER:
file: ./.MYSQL_USER
MYSQL_PASSWORD:
file: ./.MYSQL_PASSWORD
MYSQL_ROOT_PASSWORD:
file: ./.MYSQL_ROOT_PASSWORD
5、安裝zabbix
因爲是聯網下載鏡像所以會很慢。推薦搭建harbor鏡像倉庫,然後通過內網去下載
[root@zabbix_server zabbix]# docker-compose -f ./docker-compose_v3_centos_mysql_latest.yaml up -d
6、查看容器
[root@zabbix_server zabbix]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6499dc6b25a7 zabbix/zabbix-web-apache-mysql:centos-latest "docker-entrypoint.sh" 16 minutes ago Up 16 minutes (healthy) 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp zabbix_zabbix-web-apache-mysql_1
9ce1cb810e49 zabbix/zabbix-agent:centos-latest "/sbin/tini -- /usr/…" 16 minutes ago Up 16 minutes zabbix_zabbix-agent_1
84bd8b1b6bcd zabbix/zabbix-server-mysql:centos-latest "/sbin/tini -- /usr/…" 16 minutes ago Up 16 minutes 0.0.0.0:10051->10051/tcp zabbix_zabbix-server_1
af9a34a8172b mysql:5.7 "docker-entrypoint.s…" 16 minutes ago Up 16 minutes zabbix_mysql-server_1
9204a93d9f76 zabbix/zabbix-snmptraps:centos-latest "/usr/bin/supervisor…" 16 minutes ago Up 16 minutes 0.0.0.0:162->162/udp zabbix_zabbix-snmptraps_1
四、解決Zabbix agent is not available
1、瀏覽器登錄http://192.168.14.216 如果無法登錄,先關閉主機防火牆
2、接口IP不能是127.0.0.1,127.0.0.1是宿主機的。
3、查看zabbix_zabbix-agent_1容器的IP地址
4、點擊進入Zabbix server修改IP地址,等會綠色就是正常