Docker使用宿主机MySQL安装Zabbix5.0&Grafana教程

以前使用编译的方式安装实在太麻烦了,而且不方便更新,正好最近重装了服务器系统,所以采用 Docker 的方式部署 Zabbix + Grafana。我用的是宝塔面板,数据库服务是启在宿主机上的,再起一个 MySQL 容器实在太浪费资源,于是我将基于宿主机的数据库安装 Zabbix。

服务器环境

CentOS 7,宝塔面板

前期准备

  1. 安装好宝塔服务器面板后,需要安装 Docker 运行环境,具体安装方法参考:菜鸟教程
  2. 设置 Docker 开机自启

    systemctl start docker
    # 设置开机自动启动
    systemctl enable docker

安装 Zabbix

这里安装的都是 Zabbix 5.0 LTS 版,我使用的是 centos 容器,根据个人习惯选择即可

  1. 创建 java-gateway 容器,默认 Zabbix 不支持对 java 程序的监控,需要安装 java-gateway 来支持,如果没有需求的话可以不安装

    docker run --name zabbix-java-gateway -d -t \
    zabbix/zabbix-java-gateway:centos-5.0-latest
  1. 使用 host 模式创建 Zabbix 服务端容器,与宿主机共用一个网络,Zabbix 服务端会自动创建数据库,无需手动创建,因为手动创建大概率会出问题

    docker run --name zabbix-server -d -it \
    --net=host \
    --restart=always \
    -v /etc/localtime:/etc/localtime \
    -v /opt/zabbix/alertscripts:/usr/lib/zabbix/alertscripts \
    -v /opt/zabbix/externalscripts:/usr/lib/zabbix/externalscripts \
    -e DB_SERVER_HOST="127.0.0.1" \
    -e MYSQL_DATABASE="zabbix" \
    -e MYSQL_USER="zabbix" \
    -e MYSQL_PASSWORD="passwd" \
    -e MYSQL_ROOT_PASSWORD="rootpasswd" \
    zabbix/zabbix-server-mysql:centos-5.0-latest
    参数说明
    MYSQL_DATABASE:数据库名称,不存在会自动创建
    MYSQL_USER:数据库用户名
    MYSQL_PASSWORD:数据库密码
    MYSQL_ROOT_PASSWORD:数据库 root 用户密码,这个很重要不要写错
  1. 使用 host 模式创建 Zabbix 前端容器

    docker run --name zabbix-web -d -it \
    --net=host \
    --restart=always \
    -v /etc/localtime:/etc/localtime \
    -e DB_SERVER_HOST="127.0.0.1" \
    -e MYSQL_DATABASE="zabbix" \
    -e MYSQL_USER="zabbix" \
    -e MYSQL_PASSWORD="passwd" \
    -e MYSQL_ROOT_PASSWORD="rootpasswd" \
    -e PHP_TZ="Asia/Shanghai" \
    zabbix/zabbix-web-nginx-mysql:centos-5.0-latest
  1. 添加 Host 规则,否则会提示 Zabbix Server 未运行

    vi /etc/hosts
    # 内容如下
    127.0.0.1 zabbix-server
  1. 安装 Zabbix-Agent,这里我直接在宿主机上安装的,参考:官方文档

    rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
    yum clean all
    yum install zabbix-agent -y
    
    # 修改配置文件信息,如果监控本机可以不用修改
    vi /etc/zabbix/zabbix_agentd.conf
    
    # 启动并设置开机自启
    systemctl enable zabbix-agent
    systemctl start zabbix-agent
  1. 浏览器访问 http://ip:8080 即可,默认用户名和密码是:Admin/zabbix,也可以使用 Nginx 反向代理绑定一个域名

优化 Zabbix

  1. 安装 Python 环境,很多报警媒介都是用 Python 写的

    # 使用 root用户进入zabbix server 容器
    docker exec -it --user root zabbix-server /bin/bash
    
    # 下载依赖包
    yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc* make -y
    
    # 下载 python3 的安装包
    yum install wget -y
    wget https://www.python.org/ftp/python/3.7.8/Python-3.7.8.tar.xz
    tar -Jxvf Python-3.7.8.tar.xz
    
    # 配置安装环境
    cd Python-3.7.8
    ./configure prefix=/usr/local/python3
    
    # 编译安装
    make && make install
    
    # 配置软链接(如果已有软链接可以省略)
    ln -s /usr/local/python3/bin/python3 /usr/bin/python3
    ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
    
    # 添加默认软链接
    ln -s /usr/bin/python3 /usr/bin/python
    ln -s /usr/bin/pip3 /usr/bin/pip
  1. 绘制图形中文字符乱码,安装中文字体即可解决

    # 复制 Windows 中的微软雅黑字体,在 C:\Windows\Fonts 目录,其他字体也可以
    # 将字体文件 ttf 复制到容器中
    docker cp ~/msyh.ttf zabbix-web:/usr/share/zabbix/assets/fonts/msyh.ttf
    
    # 进入容器,备份原字体文件并替换新字体
    docker exec --user root -it zabbix-web /bin/bash
    cd /usr/share/zabbix/assets/fonts/
    cp DejaVuSans.ttf DejaVuSans.ttf.bak
    mv msyh.ttf DejaVuSans.ttf

安装 Grafana

最后怎么能少了 Grafana 监控面板呢,这里同样使用 Docker 方式安装,更新时只需要保留容器中的 /var/lib/grafana/ 目录中的内容即可,简单又方便

  1. 使用 host 模式创建 Grafana 容器,默认监听 3000 端口,可以使用 Nginx 反向代理的绑定域名

    docker run -d --net=host --restart=always --name=grafana grafana/grafana
  1. 其他配置方法见我以前写的文章:Zabbix + Grafana打造炫酷的服务器监控界面

Docker Compose

以上所有操作可以使用 Docoker Compose 实现

version: "3"

services:
  zabbix-web:
    image: zabbix/zabbix-web-nginx-mysql:alpine-5.0-latest
    container_name: zabbix-web
    hostname: zabbix-web
    restart: always
    environment:
      - TZ=Asia/Shanghai
      - DB_SERVER_HOST=127.0.0.1
      - MYSQL_DATABASE=zabbix
      - MYSQL_USER=zabbix
      - MYSQL_PASSWORD=你的数据库密码
      - MYSQL_ROOT_PASSWORD=你的数据库root密码
    depends_on:
      - zabbix-server
    network_mode: host

  zabbix-server:
    image: zabbix/zabbix-server-mysql:alpine-5.0-latest
    container_name: zabbix-server
    hostname: zabbix-server
    restart: always
    environment:
      - TZ=Asia/Shanghai
      - DB_SERVER_HOST=127.0.0.1
      - MYSQL_DATABASE=zabbix
      - MYSQL_USER=zabbix
      - MYSQL_PASSWORD=你的数据库密码
      - MYSQL_ROOT_PASSWORD=你的数据库root密码
    volumes:
      - ./zabbix/alertscripts:/usr/lib/zabbix/alertscripts
      - ./zabbix/externalscripts:/usr/lib/zabbix/externalscripts
    network_mode: host

  grafana:
    image: grafana/grafana
    container_name: grafana
    hostname: grafana
    restart: always
    environment:
      - TZ=Asia/Shanghai
    depends_on:
      - zabbix-web
      - zabbix-server
    network_mode: host

  # 容器自动更新服务
  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    hostname: watchtower
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    command: -c -s "0 0 3 * * *"

networks:
  default:
    driver: bridge
评论区
头像
    头像
    禅客
      

    按流程走完8080端口起不来,在哪看日志

      头像
      蘑菇
        
      @禅客

      看看端口是不是被其他程序占用了

    头像
    yulia
      

    你好,感兴趣投稿吗?我们是zabbix中国官方,欢迎关注:Zbbix开源社区,联系小Z. 你的网站很萌呀。