Docker compose搭建Zabbix

应用部署先决条件 基础YUM源和优化系统 # 此脚本能优化CentOS7、8的系统(非必要操作) curl -L https://drive.flycloud.club/d/Shell/system.sh | sh # docker软件源 wget -O /etc/yum.repos.d/dock

应用部署先决条件

  • 基础YUM源和优化系统
# 此脚本能优化CentOS7、8的系统(非必要操作)
curl -L https://drive.flycloud.club/d/Shell/system.sh | sh

# docker软件源
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 安装docker并运行
# 安装Docker
yum clean all && yum makecache
yum -y install docker-ce

#修改docker配置文件(可选优化操作)
mkdir /etc/docker

cat << EOF | tee /etc/docker/daemon.json
{
  "graph": "/data/docker",
  "registry-mirrors": ["http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn"],
  "live-restore": true
}
EOF

# 启动docker服务并设置开机启动

systemctl daemon-reload && systemctl enable --now docker
  • 安装docker-compose
# 下载二进制文件
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.6.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

# 赋予执行权限
chmod +x /usr/local/bin/docker-compose

# 查看版本
docker-compose -v

docker-compose部署Zabbix

# 安装使用docker部署的时候遇到服务器无法拉去镜像,需要部署阿里云公共镜像源。
# 登录阿里云Docker Registry
$ docker login --username=mr_hu******@163.com registry.cn-shanghai.aliyuncs.com
用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
  • 下载解压部署文件
wget --no-check-certificate https://drive.flycloud.club/d/Linux/Docker/Zabbix/zabbix-docker.tar.gz
tar xf zabbix-docker.tar.gz
cd zabbix-docker
  • 按照自己的环境编辑docker compose
# 持久化目录修改 volumes 在compose里很多目录都是在当前目录下运行,如果不修改,
启动后的容器目录就是你存放docker-compose.yaml这个目录下

# 修改使用centos系统的容器镜像(默认使用alpine系统的容器镜像)
sed -i 's#alpine-6.0#centos-6.2#g' docker-compose.yaml
  • 部署基础功能版本
# 使用cd进到下载的部署文件目录

# 运行Zabbix容器(必须要和启动yaml文件在同级目录)
docker-compose -f docker-compose.yaml up -d

# 关闭Zabbix容器(必须要和启动yaml文件在同级目录)
docker-compose down

# 修改使用centos系统的容器镜像(默认使用alpine系统的容器镜像)
sed -i 's#alpine-6.0#centos-6.2#g' docker-compose.yaml

# docker-compose 默认模版镜像alpine系统版本,如果你的主机是centos 使用以上命令修改所有 alpine-6.0为 centos-6.2

# alpine-6.0 后面的数字为zabbix版本 alpine为操作系统类型
  • 部署完整功能版本
# --profile=all 完整版请在后面加上这个

# 运行Zabbix容器(必须要和启动yaml文件在同级目录)
docker-compose -f docker-compose.yaml --profile=all up -d

# 关闭Zabbix容器(必须要和启动yaml文件在同级目录)
docker-compose -f docker-compose.yaml --profile=all down

# 修改使用centos系统的容器镜像(默认使用alpine系统的容器镜像)
sed -i 's#alpine-6.0#centos-6.2#g' docker-compose.yaml
Snipaste_2023-07-11_17-55-53.png

解决报错Zabbix agent is not available (for 3m)

  • 容器部署Agent(这里指的是本服务器运行)
# 查看Agent的IP地址
docker inspect zabbix-agent | grep IPAddress 

# Web控制修改Zabbix server主机IP地址
修改为zabbix-agent容器的IP地址
  • 二进制部署Agent
# 通过脚本安装Agent2(支持CentOS7、Centos8)
wget --no-check-certificate https://drive.flycloud.club/d/Shell/install-agent2.sh

sh install-agent2.sh
# ZBX_SERVER_HOST指定Zabbix server宿主机IP地址   
docker run --name zabbix-agent -it \
      -p 10050:10050 \
      -e ZBX_HOSTNAME="zabbix-server" \
      -e ZBX_SERVER_HOST="宿主机IP地址" \
      -e ZBX_SERVER_PORT=10051 \
      -d zabbix/zabbix-agent:alpine-6.0-latest  

解决Docker Compose部署时候Zabbix Server无法启动(已经优化)

#打开zabbix后看见下方提示
#zabbix server is not running: the information displayed may not be current
docker logs -f zabbix-server
​
#出现zabbix server is not running的两种原因
mysql连接数量受限制
zabbix server的缓存大小受限制
​
#zabbix server的缓存大小调整
ZBX_CACHESIZE=2048M
​
#mysql连接数量调整
max_connections=2000
mysqlx_max_connections=2000
​
#重新启动服务
docker-compose --profile=all restart

解决中文乱码

#拷贝Windows字体(微软雅黑、仿宋常规字体均可以解决)
C:\Windows\Fonts
​
#将字体目录映射到宿主机
vim docker-compose.yaml
 zabbix-web-nginx-mysql:
  image: zabbix/zabbix-web-nginx-mysql:centos-6.0-latest
  container_name: zabbix-web-nginx
  restart: always
  ports:
   - "80:8080"
#   - "443:8443"
  volumes:
   - /etc/localtime:/etc/localtime:ro
   - /etc/timezone:/etc/timezone:ro
   - ./zbx_env/etc/ssl/nginx:/etc/ssl/nginx:ro
   - ./zbx_env/usr/share/zabbix/modules/:/usr/share/zabbix/modules/:ro
   - ./zbx_env/usr/share/zabbix/assets/fonts/:/usr/share/zabbix/assets/fonts/:ro #字体目录
​
#关闭Zabbix容器
docker-compose --profile=all down
​
#运行Zabbix容器
docker-compose --profile=all up -d
​
#将字体拷贝到容器内部
wget --no-check-certificate https://drive.flycloud.club/d/Linux/Docker/Zabbix/msyh.ttc
mv msyh.ttc ./zbx_env/usr/share/zabbix/assets/fonts/DejaVuSans.ttf

拓扑图链路延迟Label示例

#4.0版本
IN:{主机名称:键值.last(0)}
OUT:{主机名称:键值.last(0)}
IN:{A1 Switch:net.if.in[ifHCInOctets.369098752].last(0)}
OUT:{A1 Switch:net.if.out[ifHCOutOctets.369098752].last(0)}
​
#6.0版本
IN:{?last(/主机名称/键值)}
OUT:{主机名称:键值.last(0)}
IN:{?last(/A1 Switch/net.if.in[ifHCInOctets.369098752])}
OUT:{?last(/A1 Switch/net.if.out[ifHCOutOctets.369098752])}
​
#参考博文
https://cloud.tencent.com/developer/article/1956234

清理Zabbix数据库binlog

[root@localhost zabbix-docker-6.2]# docker exec -it zabbix-db bash

# 使用root用户连接数据库(默认密码root_pwd)

bash-4.4# mysql -u root -proot_pwd

mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 208369
Server version: 8.0.33 MySQL Community Server - GPL

Copyright (c) 2000, 2023, 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.

mysql> show master logs;
+---------------+------------+-----------+
| Log_name      | File_size  | Encrypted |
+---------------+------------+-----------+
| binlog.000005 |  427074502 | No        |
| binlog.000006 |  498147433 | No        |
| binlog.000007 |      91397 | No        |
| binlog.000008 |     866978 | No        |
| binlog.000009 |    1036350 | No        |
| binlog.000010 |     428031 | No        |
| binlog.000011 |   29980588 | No        |
| binlog.000012 | 1073742190 | No        |
| binlog.000013 |  361595850 | No        |
+---------------+------------+-----------+
9 rows in set (0.01 sec)

# binlog过期时间(数值为0则不会自动清理)
mysql> show variables like 'expire_logs_days';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| expire_logs_days | 0     |
+------------------+-------+
1 row in set (0.00 sec)

# 手动删除binlog.000040以前的日志文件
mysql> purge binary logs to 'binlog.000005';
Query OK, 0 rows affected (0.07 sec)

# 配置自动清理
mysql> set global expire_logs_days=7;
则只保留7天内的 binlog 文件。

或者修改 MySQL 配置文件,设置 expire_logs_days=7 然后重启服务,即可永久生效。

# 清空所有 binlog
mysql> RESET MASTER;
LICENSED UNDER CC BY-NC-SA 4.0
评论
访问统计
总访问量: 👀| 访客数: 🚶‍♂️