跳到主要内容

Zabbix

概念

官网链接

组件

  • Zabbix Server: 核心服务端, 包含数据库驱动
  • Zabbix Frontend: web 界面, php 编写
  • Zabbix Agent: 被控端安装, 负责采集数据 (新 Agent 2 版本由 golang 开发)
  • Zabbix Proxy: 分布式代理, 分担 Server 负载

安装

提示
  1. Zabbix 依赖于数据库和 web 服务器, 可先安装好数据库和 Apache/nginx;
  2. 中文支持需要操作系统安装中文语言包;
  3. 中文字体支持需要手动添加本地字体并替换软件自带字体;

1. 添加官方仓库

# dpkg -c xxx.deb 查看包内容
wget https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_latest_7.0+debian12_all.deb

# 安装 gpg 文件和 zabbix 源
dpkg -i zabbix-release_latest_7.0+debian12_all.deb
apt update

2. 安装 Zabbix

zabbix-nginx-conf 会把包管理版 nginx 作为依赖拉进来,与编译版冲突。使用 --no-install-recommends 并不装 zabbix-nginx-conf,nginx 配置手动写

apt install -y \
zabbix-server-mysql \
zabbix-frontend-php \
zabbix-sql-scripts \
zabbix-agent2 \
php8.2-fpm \
php8.2-mysql \
php8.2-gd \
php8.2-bcmath \
php8.2-mbstring \
php8.2-xml \
php8.2-ldap \
php8.2-curl \
php8.2-zip \
--no-install-recommends

3. 创建数据库

mysql -uroot -p
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'StrongPass123!';
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';
SET GLOBAL log_bin_trust_function_creators = 1;
FLUSH PRIVILEGES;
EXIT;
导入初始 schema
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | \
mysql --default-character-set=utf8mb4 -uzabbix -p zabbix

导入完成后关闭临时权限:

mysql -uroot -p -e "SET GLOBAL log_bin_trust_function_creators = 0;"

4. 配置 Zabbix Server

vim /etc/zabbix/zabbix_server.conf

修改以下几行参数, 其余保持默认:

DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=yourpassword
DBSocket=/data/mysql/run/mysql.sock

5. 配置 PHP-FPM

为 Zabbix 创建独立 pool, 通常会有 /etc/zabbix/php-fpm.conf,将其链接到 php-fpm 的 pool 目录:

ln -s /etc/zabbix/php-fpm.conf /etc/php/8.2/fpm/pool.d/zabbix.conf

如果没有, 手动创建:

cat > /etc/php/8.2/fpm/pool.d/zabbix.conf << 'EOF'
[zabbix]
user = www-data
group = www-data
listen = /var/run/php/zabbix.sock
# 下面 2 行与 nginx worker 用户权限保持一致
listen.owner = nginx
listen.group = nginx
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 200

php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/sessions/
php_value[max_execution_time] = 300
php_value[memory_limit] = 128M
php_value[post_max_size] = 16M
php_value[upload_max_filesize] = 2M
php_value[max_input_time] = 300
php_value[max_input_vars] = 10000
php_value[date.timezone] = Asia/Shanghai
EOF

确保 socket 目录存在:

mkdir -p /var/lib/php/sessions
chown www-data:www-data /var/lib/php/sessions

systemctl enable php8.2-fpm
systemctl restart php8.2-fpm

# 验证 socket 已生成
ls -la /var/run/php/zabbix.sock

6. Nginx 添加 Zabbix 配置

编辑 /usr/local/nginx/conf/nginx.conf,确保 http 块末尾有:

include /usr/local/nginx/conf/conf.d/*.conf;

创建配置目录并写入 Zabbix 的 server 块:

mkdir -p /usr/local/nginx/conf/conf.d

cat > /usr/local/nginx/conf/conf.d/zabbix.conf << 'EOF'
server {
listen 8080;
server_name _;

root /usr/share/zabbix;
index index.php;

client_max_body_size 16M;

location / {
try_files $uri $uri/ /index.php?$args;
}

location ~ \.php$ {
fastcgi_pass unix:/var/run/php/zabbix.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
}

location ~ /\. {
deny all;
}
}
EOF

测试并重载 Nginx:

nginx -t && nginx -s reload

7. 配置 Zabbix Agent2

vim /etc/zabbix/zabbix_agent2.conf

关键配置项:

Server=127.0.0.1
ServerActive=127.0.0.1
Hostname=Zabbix server

8. 启动所有服务

systemctl enable zabbix-server zabbix-agent2 php8.2-fpm
systemctl restart zabbix-server zabbix-agent2 php8.2-fpm
nginx -s reload

# 验证各服务状态
systemctl status zabbix-server zabbix-agent2 php8.2-fpm

9. 确保 web 目录权限正确

chown -R www-data:www-data /usr/share/zabbix
mkdir -p /etc/zabbix/web
chown -R www-data:www-data /etc/zabbix/web

10. Web 安装向导

http://<服务器IP>:8080

中文配置

  1. 先确认系统有中文 locale
locale -a | grep zh

如果没有 zh_CN.utf8,生成它:

apt install -y locales
sed -i 's/# zh_CN.UTF-8/zh_CN.UTF-8/' /etc/locale.gen
locale-gen
  1. 重启 php-fpm 让 Zabbix 重新读取 locale:
systemctl restart php8.2-fpm
  1. 替换 Zabbix 默认字体

Zabbix 默认字体不含中文字形,图表里的中文会显示为方块. 需要替换成支持中文的字体.

安装思源黑体:

apt install -y fonts-noto-cjk
ls /usr/share/fonts/opentype/noto/ | grep CJK

Zabbix 7.0 的字体目录在:

# 查看 zabbix 默认字体软链接
ls -l /usr/share/zabbix/assets/fonts/graphfont.ttf

# 删除旧软链接
rm /etc/alternatives/zabbix-frontend-font

# 软链接指向中文字体
ln -s /usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc /etc/alternatives/zabbix-frontend-font
备注

/usr/share/fonts/ 系统全局字体根目录
/usr/local/share/fonts/ 管理安装字体目录, 优先级最高, 存放非系统安装第三方字体

  • 子目录分类, 按字体格式分类:
    truetype/ 存放 .ttf 格式的 TrueType 字体, 最通用的字体
    opentype/ 存放 .otf.ttc 格式的 OpenType 字体, 支持更丰富的排版格式
  • 子目录分类, 按字体来源用途分类
    cjk/ 专门存放中文、日文、韩文(CJK)的统一汉字字体
    dejavu/liberation/ 存放常见的开源西文字体家族
    EUDC/ 存放用户自定义字符, 如特殊的品牌图标或生僻字

Troubleshooting

1. 数据库用户名密码正确, 但是配置向导页面提示无法连接到数据库?

在向导页面用的是 php-fpm 进程, 调用 mysqli 通过 socket 连接数据库, 确保配置是数据库的 mysql.sock

# 确认 fpm 的 php.ini 路径
php-fpm8.2 -i | grep "Loaded Configuration File"

# 修改 fpm 的 php.ini
vim /etc/php/8.2/fpm/php.ini

systemctl restart php8.2-fpm

# 验证是否生效
php-fpm8.2 -i | grep "mysqli.default_socket"
php-fpm8.2 -i | grep "pdo_mysql.default_socket"