两年前在服务器上放了一套 Grafana + Zabbix + Prometheus 的监控系统,当时是照着文档和网上各路教程一个一个编译的,插件和配置文件丢得七零八落,很难维护,故这几天借迁移服务器的机会,改用 Docker 安装,基本只用一个配置文件,今后随时可以一键部署。目前写好了 MySQL + Grafana + Zabbix-Server + Zabbix-Agent 的配置,Prometheus(以前主要用来监控 MySQL)暂时还没做,以后补上。

grafana.png

安装 Docker

文档安装即可,不再赘述。

Dockers 部署

version: '1.0'

services:
  # zabbix-server 容器配置
  server:
    image: zabbix/zabbix-server-mysql:latest
    container_name: zabbix-server
    depends_on:
     - mysql
     - agent
    environment:
      TZ: Asia/Shanghai
      DB_SERVER_HOST: "mysql"
      MYSQL_DATABASE: "zabbix"
      MYSQL_USER: "zabbix"
      MYSQL_PASSWORD: "zabbix_pwd"
      MYSQL_ROOT_PASSWORD: "root_pwd"
    ports:
     - "10051:10051"
    volumes:
     - /etc/localtime:/etc/localtime:ro
    links:
     - mysql:zabbix-mysql
     - agent:zabbix-agent
    user: root
    networks:
      zabbixbr:
        ipv4_address: 172.20.0.6
    restart: always

  # zabbix-agent 容器配置
  agent:
    image: zabbix/zabbix-agent:latest
    container_name: zabbix-agent
    privileged: true
    ports:
     - "10050:10050"
    volumes:
     - /etc/localtime:/etc/localtime:ro
    user: root
    networks:
      zabbixbr:
        ipv4_address: 172.20.0.5
    restart: always

  # zabbix web 环境容器配置
  web:
    image: zabbix/zabbix-web-nginx-mysql:latest
    container_name: zabbix-web
    depends_on:
     - mysql
     - server
    environment:
      TZ: Asia/Shanghai
      DB_SERVER_HOST: "mysql"
      ZBX_SERVER_HOST: "server"
      MYSQL_DATABASE: "zabbix"
      MYSQL_USER: "zabbix"
      MYSQL_PASSWORD: "zabbix_pwd"
      MYSQL_ROOT_PASSWORD: "root_pwd"
    volumes:
     - /etc/localtime:/etc/localtime:ro

    links:
      - mysql:zabbix-mysql
      - server:zabbix-server
    ports:
     - "90:80"
    user: root
    networks:
      zabbixbr:
        ipv4_address: 172.20.0.4
    restart: always 

  # mysql 容器配置
  mysql:
    image: mysql:5.7
    container_name: zabbix-mysql
    command: --character-set-server=utf8 --collation-server=utf8_general_ci
    environment:
      TZ: Asia/Shanghai
      MYSQL_DATABASE: "zabbix"
      MYSQL_USER: "zabbix"
      MYSQL_PASSWORD: "zabbix_pwd"
      MYSQL_ROOT_PASSWORD: "root_pwd"     
    networks:
      zabbixbr:
        ipv4_address: 172.20.0.3
    volumes:
     # 数据库 volume 路径:/home/data,根据自己需求调整
     - /home/data/zabbix/database/mysql:/var/lib/mysql
     - /etc/localtime:/etc/localtime:ro
    restart: always

  # Grafana 容器配置
  grafana:
    image: grafana/grafana:latest
    container_name: zabbix-grafana
    environment:
     TZ: Asia/Shanghai
     # 下面填写你想安装的插件,多项逗号分隔,当然也可以直接把插件上传到下面的 volume 中
     GF_INSTALL_PLUGINS: alexanderzobnin-zabbix-app
     # 挂载储存用的 volume,映射到宿主目录 /var/lib/docker/volumes 下
    volumes:
      # 插件和 Grafana 的用户配置数据放这里面
      - grafana-storage:/var/lib/grafana
      # grafana.ini 配置文件在里面
      - grafana-etc:/etc/grafana
    ports:
      - "3000:3000"
    networks:
      zabbixbr:
        ipv4_address: 172.20.0.2
    restart: always

# 创建 stack 内用的容器
volumes:
  grafana-storage:
  grafana-etc:

# stack 内网配置
networks:
  zabbixbr:
    driver: bridge
    ipam:
     config:
       - subnet: 172.20.0.0/16
         # 内网网关
         gateway: 172.20.0.1

把整套系统部署到一个 stack 中,所有组建间通信通过内网完成,注意容器内访问使用各自的内网 IP 172.20.0.x,容器内使用 127.0.0.1localhost 是无效的!

保存以上配置文件为 docker-compose.yml

现在先 pull 要用到的镜像:

docker pull mysql:5.7
docker pull zabbix/zabbix-server-mysql:latest
docker pull zabbix/zabbix-agent:latest
docker pull zabbix/zabbix-web-nginx-mysql:latest
docker pull grafana/grafana:latest

然后运行 docker compose:

docker-compose up -d
docker-compose ps

看到下面的输出就 OK 了!
docker.png

配置 Zabbix

之后访问 http://你的公网IP或者localhost:90/ 配置 Zabbix,登陆 ID:Admin、密码:zabbix。

依次打开 Configuration > Hosts > Zabbix server,Agent interfaces 中 IP 改为 172.20.0.5,Update 即可,返回 Hosts 列表,过几分钟刷新,看到 Zabbix server 的 Availability 标签 ZBX 变成绿色就说明 zabbix-server + zabbix-agent 部署成功了。

配置 Grafana

访问 http://你的公网IP或者localhost:3000/,登陆 ID:admin、密码:admin。

启用 Zabbix,然后创建 Zabbix 数据源(data source),URL 填写 http://你的公网IP或者localhost:90/api_jsonrpc.php,账号密码是刚刚的 Zabbix 账号密码,保存之后测试通过就说明 Grafana 已经连上 Zabbix 了,之后就可以 DIY 你的面板了!

Q.E.D.