Ubuntu 22.04 LTS 实战部署 Zabbix 6.0 LTS:从零构建企业级监控平台
1. 为什么选择Zabbix 6.0 LTS说到企业级监控方案Zabbix绝对是开源界的扛把子。我最早接触Zabbix是在2015年当时还在用3.0版本这些年看着它从简单的服务器监控成长为现在这个支持云原生、容器化监控的全能选手。最新发布的6.0 LTS版本有几个让我眼前一亮的改进首先是历史数据压缩功能之前监控数据动辄占用几百GB存储的情况终于有解了。实测在相同数据量下6.0版本的存储空间能减少40%左右。其次是高可用集群支持更完善了现在server节点可以真正实现无缝切换这对我们金融行业的客户特别重要。还有个隐藏彩蛋是预测功能比如磁盘空间预测可以基于历史数据给出未来7天的使用趋势。有次客户服务器突然报警我打开预测一看原来按当前增长速度确实3天后就会爆满这种主动预警比事后救火强太多了。2. 环境准备Ubuntu 22.04 LTS优化2.1 系统基础配置先来个灵魂拷问你装完Ubuntu第一件事是什么我见过太多人直接开搞结果后面各种权限问题。建议先执行这三板斧# 切换到root账号 sudo -i # 禁用sudo密码提示生产环境慎用 echo $(whoami) ALL(ALL) NOPASSWD:ALL /etc/sudoers # 关闭讨厌的apt自动更新 systemctl disable --now apt-daily{,-upgrade}.{timer,service}内存小于4GB的机器建议加swap不然编译安装时可能直接OOM。用这个脚本一键配置fallocate -l 2G /swapfile chmod 600 /swapfile mkswap /swapfile swapon /swapfile echo /swapfile none swap sw 0 0 /etc/fstab2.2 软件源配置国内用户强烈建议换源我实测阿里云的镜像速度最快sed -i s|http://.*archive.ubuntu.com|https://mirrors.aliyun.com|g /etc/apt/sources.list sed -i s|http://.*security.ubuntu.com|https://mirrors.aliyun.com|g /etc/apt/sources.listZabbix官方源也要换成国内镜像这个6.0版本的deb包地址要注意curl -O https://mirrors.aliyun.com/zabbix/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-4ubuntu$(lsb_release -rs)_all.deb dpkg -i zabbix-release_6.0-4ubuntu$(lsb_release -rs)_all.deb sed -i s|http://repo.zabbix.com|https://mirrors.aliyun.com/zabbix|g /etc/apt/sources.list.d/zabbix.list3. 数据库选型与优化3.1 MariaDB vs MySQL虽然Zabbix官方说支持MySQL但我强烈推荐MariaDB。原因很简单在ARM架构的服务器上MySQL经常出现兼容性问题而MariaDB从来没让我失望过。安装命令如下apt install -y mariadb-server mariadb-client安装完一定要运行安全加固mysql_secure_installation这里有个坑要注意当提示Change the root password?时如果已经是新安装的MariaDB一定要选n否则可能把默认的空密码改成其他值导致后续步骤失败。3.2 专属配置优化Zabbix对数据库性能要求很高默认配置肯定撑不住。这是我给8核16GB内存服务器用的配置模板[mysqld] innodb_buffer_pool_size 4G innodb_log_file_size 512M innodb_log_buffer_size 64M innodb_flush_log_at_trx_commit 2 innodb_flush_method O_DIRECT max_connections 200 character-set-server utf8mb4 collation-server utf8mb4_bin把这些加到/etc/mysql/mariadb.conf.d/zabbix.cnf后记得重启服务systemctl restart mariadb4. Zabbix核心组件安装4.1 一站式安装命令很多人喜欢一个个装依赖其实apt可以一次性搞定apt update apt install -y \ zabbix-server-mysql \ zabbix-frontend-php \ zabbix-apache-conf \ zabbix-sql-scripts \ zabbix-agent \ zabbix-js这里有个新东西zabbix-js是6.0新增的JavaScript预处理模块用来监控前端性能的建议装上。4.2 数据库初始化创建数据库时一定要用utf8mb4字符集不然中文告警内容会乱码CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;授权语句我习惯用这种写法比grant all更精确CREATE USER zabbixlocalhost IDENTIFIED BY ComplexPassword123!; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON zabbix.* TO zabbixlocalhost; FLUSH PRIVILEGES;导入初始数据时建议先解压再导入方便查看进度gzip -d /usr/share/zabbix-sql-scripts/mysql/server.sql.gz mysql -uzabbix -pComplexPassword123! zabbix /usr/share/zabbix-sql-scripts/mysql/server.sql5. 服务配置与调优5.1 Zabbix Server配置/etc/zabbix/zabbix_server.conf有几个关键参数必须改DBPasswordComplexPassword123! StartPollers20 StartPollersUnreachable5 StartTrappers10 StartPingers5 CacheSize256M HistoryCacheSize128M HistoryIndexCacheSize64MStartPollers数量建议是监控主机数的1/10但不要超过100。CacheSize大小要根据可用内存调整一般给总内存的1/8。5.2 PHP时区配置很多新手卡在Web安装界面报时区错误其实提前设好就行sed -i s|;date.timezone |date.timezone Asia/Shanghai|g /etc/php/8.1/apache2/php.iniUbuntu 22.04默认用PHP8.1别改错文件了。6. 防火墙与SELinux6.1 必要端口开放生产环境建议用firewalld而不是直接关防火墙firewall-cmd --permanent --add-port80/tcp firewall-cmd --permanent --add-port443/tcp firewall-cmd --permanent --add-port10051/tcp firewall-cmd --reload6.2 SELinux策略调整如果系统启用了SELinuxUbuntu默认没有需要额外配置setsebool -P httpd_can_connect_zabbix on semanage port -a -t http_port_t -p tcp 100517. Web界面初始化7.1 首次登录配置安装完成后访问http://服务器IP/zabbix默认账号Admin注意A大写密码zabbix。第一次登录强制改密码建议改成至少12位含特殊字符的强密码。7.2 中文界面切换6.0版本终于完善了中文翻译切换方法右上角用户头像 → 语言 → 中文刷新页面后所有菜单都会变成中文8. 生产环境注意事项8.1 备份策略Zabbix的备份主要分三部分数据库备份每天全备binlogmysqldump -uzabbix -pComplexPassword123! --single-transaction zabbix | gzip /backup/zabbix_db_$(date %F).sql.gz配置文件备份/etc/zabbix整个目录前端自定义内容/usr/share/zabbix/assets8.2 监控项优化新手最容易犯的错误是监控项太多建议每个主机监控项控制在200个以内采样间隔大于1分钟禁用不需要的自动发现规则8.3 告警收敛配置避免告警风暴的关键配置触发器依赖设置网络设备宕机时其上的服务器触发器自动进入维护状态 告警分级按严重程度设置不同通知渠道 夜间静默非工作时间只通知紧急告警9. 性能监控与调优9.1 监控Zabbix自身ironic的是Zabbix服务器自己也需要监控。必监控的指标包括zabbix[wcache,values]值缓存使用率zabbix[process,*,avg,busy]各进程忙闲比mysql.threads_connected数据库连接数9.2 定期维护任务建议创建这些定时任务# 每周清理旧数据 zabbix_server -c /etc/zabbix/zabbix_server.conf --runtime-control housekeeper_execute # 每月重建历史表索引 mysql -uzabbix -pComplexPassword123! zabbix -e OPTIMIZE TABLE history, history_uint, trends, trends_uint10. 高可用方案10.1 数据库主从对于大型部署建议配置MariaDB主从# 主库配置 [mysqld] server-id 1 log_bin /var/log/mysql/mariadb-bin binlog_format ROW binlog_row_image FULL # 从库配置 [mysqld] server-id 2 read_only ON10.2 Zabbix Server集群6.0的HA功能实测很稳定配置步骤所有节点安装相同版本的zabbix-server共享数据库和后端存储配置/etc/zabbix/zabbix_server.confHANodeName node1 NodeAddress 192.168.1.10:1005111. 故障排查技巧11.1 日志分析要点遇到问题时先看这些日志# 服务启动日志 journalctl -u zabbix-server -f # 前端错误日志 tail -f /var/log/apache2/error.log # 数据库慢查询日志 grep -i slow /var/log/mysql/mariadb-slow.log11.2 常见问题解决问题1Web界面显示Database error检查/var/log/zabbix/zabbix_server.log确认数据库连接参数正确测试数据库连接mysql -uzabbix -p zabbix问题2监控数据不更新查看zabbix_agentd日志检查服务器时间是否同步验证网络连通性telnet zabbix_server_ip 1005112. 扩展功能配置12.1 短信告警集成国内常用阿里云短信接口配置方法创建/media/alertscripts/sms.py设置可执行权限chmod x /media/alertscripts/sms.py在Web界面添加告警媒介类型12.2 微信企业号集成更推荐用企业微信机器人创建自定义机器人获取webhook地址配置告警脚本调用curl发送消息消息模板示例{ msgtype: markdown, markdown: { content: **{TRIGGER.NAME}**\n 状态: {TRIGGER.STATUS}\n 主机: {HOST.NAME}\n 值: {ITEM.VALUE} } }13. 升级与迁移13.1 5.0到6.0升级官方升级文档很详细但要注意先备份数据库和配置文件按顺序升级数据库 → server → proxy → agent升级后重建前端缓存rm -rf /var/lib/zabbix/sessions/*13.2 跨版本迁移大版本迁移建议用这种方式新环境安装相同小版本的Zabbix只迁移数据库不迁移配置文件逐步将监控主机切换到新环境14. 安全加固建议14.1 基础安全措施禁用默认Admin账号创建个人账号开启HTTPS访问设置登录失败锁定策略定期审计用户权限14.2 网络隔离方案生产环境推荐这种架构[监控对象] ←→ [Zabbix Proxy] ←→ [防火墙] ←→ [Zabbix Server]代理服务器放在DMZ区只开放10051端口入站。15. 容器化部署方案15.1 Docker Compose部署官方提供了docker-compose.yml模板但需要调整version: 3 services: zabbix-server: image: zabbix/zabbix-server-mysql:6.0-latest ports: - 10051:10051 environment: DB_SERVER_HOST: mysql-server MYSQL_USER: zabbix MYSQL_PASSWORD: ComplexPassword123!15.2 Kubernetes部署使用Helm chart最方便helm repo add zabbix https://zabbix.github.io/zabbix-helm helm install zabbix zabbix/zabbix \ --set server.db.hostmysql \ --set server.db.passwordComplexPassword123!16. 二次开发建议16.1 API使用技巧Zabbix API特别适合批量操作比如导出所有触发器from zabbix_api import ZabbixAPI zapi ZabbixAPI(http://zabbix_server/zabbix) zapi.login(Admin, zabbix) triggers zapi.trigger.get({ output: extend, selectHosts: [host] })16.2 自定义监控模板建议按业务线创建模板比如Web集群模板应该包含HTTP状态检查Nginx性能指标证书过期监控前端性能指标17. 硬件选型参考17.1 小型环境配置监控主机 500台CPU: 4核内存: 8GB存储: 100GB SSD 1TB HDD历史数据17.2 大型环境配置监控主机 5000台CPU: 16核内存: 64GB存储: 分布式存储或专用SAN数据库: 独立服务器SSD阵列18. 成本优化技巧18.1 存储优化调整历史数据保留策略启用表分区使用TimescaleDB插件压缩数据18.2 计算资源优化调整检查间隔使用主动式代理禁用不需要的监控项19. 最佳实践总结经过十几个生产环境部署案例我总结出这些黄金法则先规划后实施明确监控目标和指标从简到繁先基础监控再业务监控标准化命名主机、模板、触发器都用统一规则文档化配置所有自定义脚本和配置都要有注释定期评审每季度清理无用监控项20. 踩坑经验分享最后分享几个血泪教训不要用简单密码有次客户系统被入侵原因是Admin账号密码还是默认的zabbix数据库一定要定期维护有次历史表没清理导致磁盘爆满生产环境一定要测试告警通道曾经遇到短信配额用完导致重要告警没发出大版本升级前务必在测试环境验证有次直接升级导致自定义图表全部丢失监控系统本身要有冗余曾经单点故障导致整个监控瘫痪