Zabbix

概述

Zabbix 是一个开源的监控解决方案,主要用于监控 IT 基础设施的性能和可用性。它能够监控多种资源,包括服务器、网络设备、虚拟机和云服务等。

核心功能

  • 多类型数据采集:支持 SNMP、IPMI、JMX、HTTP 等多种协议和方式
  • 灵活的告警机制:支持邮件、短信、钉钉、微信等多种通知方式
  • 可视化展示:提供仪表板、图形、报表等多种数据展示形式
  • 自动发现:支持主机自动发现、自动注册和自动资产更新
  • 分布式监控:支持 Proxy 架构,适用于大规模和跨地域部署
  • 高可用性:支持主备模式和高可用集群配置

典型应用场景

  • 企业 IT 基础设施监控(服务器、网络、存储)
  • 应用性能和可用性监控
  • 云资源监控(AWS、Azure、私有云)
  • 运维告警平台建设

部署准备

1. 系统要求

项目 最低配置 推荐配置
CPU 1 核 2 核+
内存 2 GB 4 GB+
硬盘 20 GB 50 GB+
Docker 18.06+ 最新版
Docker Compose 1.22.0+ 最新版

2. 创建目录

mkdir -p /data/zabbix-mysql /data/zabbix /data/zabbix-web

3. 创建 Docker Compose 编排文件

docker-compose.yaml

version: "3.5"
services:
  mysql-server:
    image: mysql:5.7
    container_name: mysql-server
    restart: unless-stopped
    command: --character-set-server=utf8 --collation-server=utf8_bin --sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION --lower_case_table_names=1
    environment:
      - MYSQL_DATABASE=zabbix
      - MYSQL_USER=zabbix
      - MYSQL_PASSWORD=zabbix
      - MYSQL_ROOT_PASSWORD=zabbix
    ports:
      - 3306:3306
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /data/zabbix-mysql:/var/lib/mysql:rw
    deploy:
      resources:
        limits:
          cpus: "1"
          memory: "2G"

  zabbix-server-mysql:
    image: zabbix/zabbix-server-mysql:alpine-5.0-latest
    container_name: zabbix-server-mysql
    restart: unless-stopped
    environment:
      - DB_SERVER_HOST=mysql-server
      - MYSQL_USER=zabbix
      - MYSQL_PASSWORD=zabbix
      - MYSQL_DATABASE=zabbix
      - MYSQL_ROOT_PASSWORD=zabbix
    ports:
      - 10051:10051
    links:
      - mysql-server
    depends_on:
      - mysql-server
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - /data/zabbix:/etc/zabbix/
    deploy:
      resources:
        limits:
          cpus: "2"
          memory: "2G"

  zabbix-web:
    image: zabbix/zabbix-web-nginx-mysql:alpine-5.0-latest
    container_name: zabbix-web-nginx-mysql
    restart: unless-stopped
    environment:
      - DB_SERVER_HOST=mysql-server
      - MYSQL_USER=zabbix
      - MYSQL_PASSWORD=zabbix
      - MYSQL_DATABASE=zabbix
      - MYSQL_ROOT_PASSWORD=zabbix
      - PHP_TZ=Asia/Shanghai
    ports:
      - 80:8080
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - /data/zabbix-web:/usr/share/zabbix/assets/fonts
    links:
      - mysql-server
      - zabbix-server-mysql
    depends_on:
      - mysql-server
      - zabbix-server-mysql
    deploy:
      resources:
        limits:
          cpus: "1"
          memory: "1G"

4. 环境变量说明

变量 说明
MYSQL_DATABASE Zabbix 使用的数据库名称
MYSQL_USER Zabbix 数据库用户名
MYSQL_PASSWORD Zabbix 数据库用户密码
MYSQL_ROOT_PASSWORD MySQL root 密码
DB_SERVER_HOST 数据库服务器地址(容器内使用服务名 mysql-server
PHP_TZ Web 界面时区

安全提示:生产环境中请将 zabbix 密码替换为强密码。


启动服务

docker compose up -d

查看启动日志:

docker logs mysql-server -f --tail=50
docker logs zabbix-server-mysql -f --tail=50
docker logs zabbix-web-nginx-mysql -f --tail=50

验证访问

curl http://127.0.0.1

在浏览器中打开 http://<服务器IP> 即可访问 Zabbix。

默认登录信息

  • 用户名:Admin
  • 密码:zabbix

注意:用户名区分大小写,使用 Admin(首字母大写)。


初始配置

1. 修改管理员密码

  1. 登录 Zabbix Web
  2. 点击右上角头像 → User settings
  3. Change password 中设置新密码
  4. 点击 Update 保存

2. 配置中文界面

  1. 点击右上角头像 → User settings
  2. Language 下拉框中选择 Chinese (zh_CN)
  3. 点击 Update 保存

注意:如 Web 界面不显示中文,可能是系统中文字体未安装,参考 FAQ 中字体配置部分。

3. 添加监控主机

  1. 进入 配置 → 主机 → 创建主机
  2. 填写主机名称、可见名称
  3. 设置主机 IP 地址
  4. 选择监控模板(如 Template OS Linux by Zabbix agent
  5. 点击 添加

常用管理命令

操作 命令
启动所有服务 docker compose up -d
停止所有服务 docker compose stop
重启所有服务 docker compose restart
查看状态 docker compose ps
查看 Zabbix Server 日志 docker logs zabbix-server-mysql -f --tail=100
查看 Zabbix Web 日志 docker logs zabbix-web-nginx-mysql -f --tail=100
进入 Zabbix Server 容器 docker exec -it zabbix-server-mysql /bin/sh

Zabbix Agent 配置

Linux Agent 安装

# 安装 Zabbix Agent
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
yum install -y zabbix-agent

# 修改配置文件
vim /etc/zabbix/zabbix_agentd.conf
# 设置为 Zabbix Server 的 IP
Server=192.168.1.100
ServerActive=192.168.1.100
Hostname=your-hostname
# 启动 Agent
systemctl start zabbix-agent
systemctl enable zabbix-agent

Windows Agent 安装

  1. 下载 Zabbix Agent Windows 安装包
  2. 双击安装,填写 Zabbix Server IP 和 Hostname
  3. 启动服务并在 Zabbix Web 添加主机

常见问题

Q:Web 界面不显示中文?

Zabbix Web 界面默认使用英文,如不显示中文,按以下方式配置:

  1. /data/zabbix-web 目录下放置中文字体文件(如 msyh.ttf
  2. 修改配置文件:
docker exec -it zabbix-web-nginx-mysql /bin/sh
cd /usr/share/zabbix/assets/fonts
ln -sf msyh.ttf DejaVuSans.ttf
exit
docker restart zabbix-web-nginx-mysql

Q:启动后 Zabbix Server 无法连接数据库?

  1. 确认 MySQL 是否已完全启动:
docker logs mysql-server --tail=20
  1. 检查环境变量中的密码是否一致
  2. 确认 MySQL 容器 IP 是否可访问:
docker exec -it zabbix-server-mysql ping mysql-server
  1. 如 MySQL 容器重启,查看日志确认数据库是否正常初始化。

Q:SNMP 监控无数据?

  1. 确认目标设备的 SNMP 服务已开启
  2. 检查 SNMP 团体名称是否正确(默认 public
  3. 验证 SNMP 连通性:
snmpwalk -v 2c -c public <目标IP> 1.3.6.1.2.1.1.1.0

Q:如何备份 Zabbix 数据?

# 备份数据库
docker exec mysql-server mysqldump -u root -pzabbix --all-databases > zabbix_backup.sql

# 备份配置文件
tar -czf zabbix_conf_backup.tar.gz /data/zabbix /data/zabbix-web

Q:忘记 Admin 密码怎么办?

进入数据库重置密码:

docker exec -it mysql-server mysql -u root -pzabbix
USE zabbix;
SELECT userid, alias FROM users WHERE alias='Admin';
UPDATE users SET passwd=MD5('newpassword') WHERE alias='Admin';
exit

参考链接