在国产麒麟V10上手动编译Zabbix-Agent,我踩过的坑和最佳实践
在国产麒麟V10上手动编译Zabbix-Agent的深度实践指南
麒麟操作系统作为国产化替代的重要选择,在信创领域扮演着关键角色。而Zabbix作为企业级监控解决方案,其客户端部署在国产环境中的适配往往充满挑战。本文将分享我在麒麟V10(arm64架构)上从源码编译Zabbix-Agent的全过程,特别是那些官方文档未曾提及的"坑"与解决方案。
1. 环境准备与依赖处理
1.1 系统基础检查
在开始编译前,必须确认系统环境符合要求。执行以下命令检查系统信息:
uname -a cat /etc/os-release典型输出应显示类似内容:
Linux hostname 4.19.90-24.4.v2101.ky10.aarch64 #1 SMP Mon Jan 18 17:03:23 CST 2021 aarch64 aarch64 aarch64 GNU/Linux NAME="Kylin Linux Advanced Server" VERSION="V10 (Tercel)"常见问题1:麒麟V10的默认软件源可能缺少部分开发依赖包。解决方法是通过以下命令添加必要的软件源:
sudo tee /etc/yum.repos.d/extra.repo <<-'EOF' [extra] name=Extra Packages baseurl=http://archive.kylinos.cn/kylin/KYLIN-ALL/10.1/partner/aarch64/ enabled=1 gpgcheck=0 EOF1.2 依赖库安装
Zabbix-Agent编译需要以下关键依赖:
| 依赖包 | 作用 | 安装命令 |
|---|---|---|
| gcc | 编译器 | sudo yum install gcc |
| make | 构建工具 | sudo yum install make |
| pkg-config | 库配置工具 | sudo yum install pkgconfig |
| openssl-devel | 加密支持 | sudo yum install openssl-devel |
| zlib-devel | 压缩支持 | sudo yum install zlib-devel |
注意:麒麟V10特有的依赖问题:
- 某些情况下需要额外安装
libevent-devel - 如果遇到
configure: error: Invalid OpenSSL library,尝试指定openssl路径:
export LDFLAGS="-L/usr/lib64/openssl" export CPPFLAGS="-I/usr/include/openssl"2. 源码获取与编译优化
2.1 源码下载策略
推荐从Zabbix官方下载稳定版本,同时考虑国内网络环境:
wget https://cdn.zabbix.com/zabbix/sources/stable/6.0/zabbix-6.0.9.tar.gz验证完整性:
echo "a1b2c3d4e5f6... zabbix-6.0.9.tar.gz" | sha256sum -c2.2 编译参数调优
针对arm64架构的编译优化配置:
./configure \ --prefix=/usr/local/zabbix \ --sysconfdir=/etc/zabbix \ --enable-agent \ --enable-ipv6 \ --with-openssl \ --with-libcurl \ --with-libpthread \ --with-libmodbus关键参数解析:
--enable-agent:仅编译agent组件--with-openssl:启用加密通信--sysconfdir:指定配置文件目录
常见编译错误处理:
- 若出现
undefined reference to 'clock_gettime',在LDFLAGS中添加-lrt - 内存不足时,可添加
-j2参数限制并行编译任务数
3. 系统服务集成与权限管理
3.1 专用用户创建
安全最佳实践是使用专用用户运行Zabbix-Agent:
sudo groupadd --system zabbix sudo useradd --system -g zabbix -d /usr/lib/zabbix \ -s /sbin/nologin -c "Zabbix Monitoring System" zabbix目录权限设置:
sudo mkdir -p /usr/lib/zabbix /run/zabbix sudo chown zabbix:zabbix /usr/lib/zabbix /run/zabbix sudo chmod 750 /usr/lib/zabbix3.2 systemd服务文件定制
麒麟V10使用systemd管理服务,创建/usr/lib/systemd/system/zabbix-agent.service:
[Unit] Description=Zabbix Agent After=network.target syslog.target [Service] Type=forking Restart=on-failure PIDFile=/run/zabbix/zabbix_agentd.pid ExecStart=/usr/local/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf ExecStop=/bin/kill -SIGTERM $MAINPID User=zabbix Group=zabbix RestartSec=10s [Install] WantedBy=multi-user.target关键配置项说明:
Type=forking:Zabbix-Agent以守护进程方式运行Restart=on-failure:异常退出时自动重启User/Group:指定运行身份
启用服务:
sudo systemctl daemon-reload sudo systemctl enable --now zabbix-agent4. 配置调优与连通性验证
4.1 关键配置参数
/etc/zabbix/zabbix_agentd.conf核心配置:
Server=192.168.1.100 # Zabbix Server IP ServerActive=192.168.1.100 # 主动检查的Server IP Hostname=Kylin-V10-Node1 # 客户端主机标识 PidFile=/run/zabbix/zabbix_agentd.pid LogFile=/var/log/zabbix/zabbix_agentd.log LogFileSize=10 EnableRemoteCommands=0 Timeout=30安全增强建议:
- 设置
AllowKey=system.run[*]限制可执行命令 - 通过
TLSConnect=psk和TLSAccept=psk启用加密通信
4.2 连通性测试方法
被动模式测试:
zabbix_get -s 127.0.0.1 -k "system.cpu.load[all,avg1]"主动模式检查:
tail -f /var/log/zabbix/zabbix_agentd.log | grep "sending"防火墙配置:
sudo firewall-cmd --permanent --add-port=10050/tcp sudo firewall-cmd --reload5. 疑难问题排查指南
5.1 常见错误与解决方案
问题1:服务启动失败,日志显示"cannot create PID file"
解决方案:
sudo mkdir -p /run/zabbix sudo chown zabbix:zabbix /run/zabbix问题2:Server端显示"host [xxx] not found"
排查步骤:
- 确认agent配置中的
Hostname与Server端定义一致 - 检查DNS解析或
/etc/hosts配置 - 验证网络连通性
5.2 性能监控与日志分析
关键监控指标:
zabbix_agentd.ping:基础存活检查proc.num[zabbix_agentd]:进程数监控system.cpu.util:CPU使用率
日志分析技巧:
journalctl -u zabbix-agent -f --since "1 hour ago"对于高频监控需求,建议调整:
StartAgents=3 BufferSize=1006. 高级配置与安全加固
6.1 PSK加密通信配置
生成PSK密钥:
openssl rand -hex 32 > /etc/zabbix/zabbix_agentd.psk chown zabbix:zabbix /etc/zabbix/zabbix_agentd.psk chmod 400 /etc/zabbix/zabbix_agentd.psk配置zabbix_agentd.conf:
TLSConnect=psk TLSAccept=psk TLSPSKIdentity=Kylin_PSK_01 TLSPSKFile=/etc/zabbix/zabbix_agentd.psk6.2 自定义监控项开发
示例:监控麒麟系统特定指标
创建自定义配置文件/etc/zabbix/zabbix_agentd.d/kylin.conf:
UserParameter=kylin.version,cat /etc/os-release | grep PRETTY_NAME | cut -d'"' -f2 UserParameter=kylin.security.update,dnf check-update --security | wc -l测试自定义监控项:
zabbix_agentd -t "kylin.version"6.3 资源限制配置
通过cgroups限制资源使用:
sudo tee /etc/systemd/system/zabbix-agent.service.d/limits.conf <<-'EOF' [Service] MemoryLimit=512M CPUQuota=50% EOF应用配置:
sudo systemctl daemon-reload sudo systemctl restart zabbix-agent