Zabbix
概念
组件
- Zabbix Server: 核心服务端, 包含数据库驱动
- Zabbix Frontend: web 界面, php 编写
- Zabbix Agent: 被控端安装, 负责采集数据 (新 Agent 2 版本由 golang 开发)
- Zabbix Proxy: 分布式代理, 分担 Server 负载
安装
提示
- Zabbix 依赖于数据库和 web 服务器, 可先安装好数据库和 Apache/nginx;
- 中文支持需要操作系统安装中文语言包;
- 中文字体支持需要手动添加本地字体并替换软件自带字体;
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
中文配置
- 先确认系统有中文 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
- 重启 php-fpm 让 Zabbix 重新读取 locale:
systemctl restart php8.2-fpm
- 替换 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"