一.简介

Zabbix 监控的基本原理:通过 Zabbix Agent获取监控数据,然后将数据发送到 Zabbix Server,或通过 Zabbix Proxy收集数据,再将数据统一发送到 Zabbix Server,数据存到Zabbix DB中,Zabbix Server 分析数据,最后通过Zabbix Web展示数据,也可以使用Grafana数据可视化工具展示数据。

docker部署Zabbix+Grafana_zabbix

二.Zabbix6.4部署

官方文档参考:https://www.zabbix.com/documentation/6.4/zh/manual/installation/containers

基础环境准备: CENTOS7  docker server 20.10.24  docker-compose version 1.28.5 宿主机IP:192.168.77.130

1.创建自定义网络zabbix-net

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

2.启动空的MySQL服务器实例  端口3306不暴露

docker run  -td \
      --name mysql-server \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="root_pwd" \
      --network=zabbix-net \
      --restart unless-stopped \
      mysql:8.0 \
      --character-set-server=utf8 --collation-server=utf8_bin \
      --default-authentication-plugin=mysql_native_password

3.启动Zabbix Java网关实例  端口10052不暴露

docker run  -td \
      --name zabbix-java-gateway \
      --network=zabbix-net \
      --restart unless-stopped \
      zabbix/zabbix-java-gateway:alpine-5.4-latest

4.启动Zabbix server实例,并将其关联到已创建的MySQL server实例 端口10051暴露

docker run  -td \
      --name zabbix-server-mysql \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="root_pwd" \
      -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
      --network=zabbix-net \
      -p 10051:10051 \
      --restart unless-stopped \
      zabbix/zabbix-server-mysql:alpine-5.4-latest

5.启动Zabbix Web界面,并将其关联到已创建的MySQL server和 Zabbix server实例 端口80暴露

docker run  -td \
      --name zabbix-web-nginx-mysql \
      -e ZBX_SERVER_HOST="zabbix-server-mysql" \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="root_pwd" \
      --network=zabbix-net \
      -p 80:8080 \
      --restart unless-stopped \
      zabbix/zabbix-web-nginx-mysql:alpine-5.4-latest

6.测试

http://ip:80  默认账号和口令   Admin/zabbix

设置时区和切换到中文 User settings---Profile---Language---选Chinese(zh_CN)---Update

中文显示不全乱码替换字体

上传电脑上msyh.ttc字体包到宿主机
#a309是zabbix-server的容器ID前几位
docker cp msyh.ttc a309:/usr/share/zabbix/assets/fonts/DejaVuSans.ttf


docker部署Zabbix+Grafana_zabbix_02

7.镜像打包,方便以后docker-compose使用本地镜像部署

#打标签,是前后一样,避免docker load -i后是<none>,不显示tag
docker tag mysql:8.0 mysql:8.0
docker tag zabbix/zabbix-java-gateway:alpine-5.4-latest zabbix/zabbix-java-gateway:alpine-5.4-latest
docker tag zabbix/zabbix-server-mysql:alpine-5.4-latest  zabbix/zabbix-server-mysql:alpine-5.4-latest
docker tag zabbix/zabbix-web-nginx-mysql:alpine-5.4-latest zabbix/zabbix-web-nginx-mysql:alpine-5.4-latest
#打包
docker save -o Zabbix6.4.tar \
zabbix/zabbix-java-gateway:alpine-5.4-latest \
zabbix/zabbix-server-mysql:alpine-5.4-latest \
zabbix/zabbix-web-nginx-mysql:alpine-5.4-latest
#拷贝到主机,需要使用时导入
docker load -i Zabbix6.4.tar

8.docker-compose文件编写

官方下载地址https://github.com/zabbix/zabbix-docker

cat > docker-compose.yml <<EOF
version: '3'
services:
   mysql-server:
     image: mysql:8.0
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: root_pwd
       MYSQL_DATABASE: zabbix
       MYSQL_USER: zabbix
       MYSQL_PASSWORD: zabbix_pwd
     networks:
       - zabbix-net
     command: ["--character-set-server=utf8", "--collation-server=utf8_bin", "--default-authentication-plugin=mysql_native_password"]
      
   zabbix-java-gateway:
     image: zabbix/zabbix-java-gateway:alpine-5.4-latest
     restart: always
     networks:
       - zabbix-net
      
   zabbix-server:
     depends_on:
       - mysql-server
     image: zabbix/zabbix-server-mysql:alpine-5.4-latest
     restart: always
     environment:
       DB_SERVER_HOST: mysql-server
       MYSQL_DATABASE: zabbix
       MYSQL_USER: zabbix
       MYSQL_PASSWORD: zabbix_pwd
       MYSQL_ROOT_PASSWORD: root_pwd
       ZBX_JAVAGATEWAY: zabbix-java-gateway
     networks:
       - zabbix-net
     ports:
       - "10051:10051"
        
   zabbix-web-nginx-mysql:
     depends_on:
       - zabbix-server
     image: zabbix/zabbix-web-nginx-mysql:alpine-5.4-latest
     ports:
       - "80:8080"
     restart: always
     environment:
       DB_SERVER_HOST: mysql-server
       MYSQL_DATABASE: zabbix
       MYSQL_USER: zabbix
       MYSQL_PASSWORD: zabbix_pwd
       MYSQL_ROOT_PASSWORD: root_pwd
     networks:
       - zabbix-net
networks:
    zabbix-net:
EOF

三.Grafana部署

基础环境准备: CENTOS7  docker server 20.10.24  宿主机IP:192.168.77.130

官方文档参考:https://grafana.com/docs/grafana/latest/setup-grafana/installation/docker/

1.docker-compose.ym编写

#创建目录
mkdir -p /opt/grafana
cd  /opt/grafana
#docker-compose.yml文件
cat > docker-compose.yml <<EOF
version: '3.9'
services:
  grafana:
    image: grafana/grafana
    container_name: grafana
    ports:
      - "3000:3000"
    environment:
      - TZ=Asia/Shanghai
    networks:
      - grafana
    volumes:
      - ./grafana:/var/lib/docker/volumes/grafana
networks:
    grafana:
      driver: bridge
EOF
#启动
docker-compose up -d

2.测试

http://ip:3000 默认账号和口令  admin/admin

3.添加zabbix插件

Configuration---Plugins---搜索zabbix---点击Zabbix图标install---Enable

docker部署Zabbix+Grafana_grafana_03

Configuration---Add data source---搜索zabbix---Select

docker部署Zabbix+Grafana_grafana_04

docker部署Zabbix+Grafana_zabbix_05

4.添加grafana到zabbix的认证信息

zabbix的API地址 http://192.168.77.130/api_jsonrpc.php   一般后半部分api_jsonrpc.php不需要修改

Username/Passwor  我这里使用登录zabbix默认的账号口令Admin/zabbix   一般只需要读权限的账号即可

Save&test 不报错即可

docker部署Zabbix+Grafana_grafana_06

docker部署Zabbix+Grafana_docker_07

5.granfana添加监控模板

docker部署Zabbix+Grafana_zabbix_08

Add a new panel

docker部署Zabbix+Grafana_grafana_09

docker部署Zabbix+Grafana_zabbix_10

官方模板载地址https://grafana.com/grafana/dashboards/

可搜索

docker部署Zabbix+Grafana_docker_11

选一个 复制ID或JSON,等会粘贴到grafana

Copy ID to clipboard

Download JSON

docker部署Zabbix+Grafana_docker_12

docker部署Zabbix+Grafana_docker_13

docker部署Zabbix+Grafana_grafana_14