1. Zabbix监控系统概述Zabbix是一款开源的分布式监控解决方案能够实时监控网络设备、服务器、虚拟化平台、数据库等各类IT基础设施的运行状态。它采用C/S架构设计由Zabbix Server、Zabbix Agent、Zabbix Proxy等核心组件构成支持通过Web界面进行集中管理。在实际运维场景中Zabbix的典型应用包括基础设施监控CPU、内存、磁盘等硬件资源使用率服务可用性检查HTTP、TCP端口、数据库连接等业务指标采集应用日志、API响应时间、交易量等自动化告警基于阈值触发邮件、短信、钉钉等通知我最早接触Zabbix是在2013年监控一个电商平台当时用Shell脚本写自定义监控项踩了不少坑。现在回想起来如果能早点掌握模板化和自动发现功能至少能节省50%的配置时间。2. 环境准备与部署2.1 硬件要求建议对于中小规模环境监控主机500台推荐配置Server节点4核CPU/8GB内存/100GB磁盘历史数据保留30天数据库节点MySQL 5.7或PostgreSQL 9.5建议SSD存储Agent节点每台被监控主机需50MB内存和10MB磁盘空间提示生产环境务必分离部署Server和数据库我曾遇到过因为数据库IO瓶颈导致监控数据延迟的问题。2.2 安装Zabbix Server以CentOS 8为例# 添加Zabbix官方仓库 rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-4.el8.noarch.rpm dnf clean all # 安装基础组件 dnf install -y zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-agent # 配置MariaDB数据库 mysql -uroot -p -e CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin mysql -uroot -p -e CREATE USER zabbixlocalhost IDENTIFIED BY YourStrongPassword mysql -uroot -p -e GRANT ALL PRIVILEGES ON zabbix.* TO zabbixlocalhost # 导入初始数据 zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql -uzabbix -p zabbix2.3 关键配置文件调整/etc/zabbix/zabbix_server.conf核心参数DBHostlocalhost DBNamezabbix DBUserzabbix DBPasswordYourStrongPassword StartPollers20 # 根据CPU核心数调整 HistoryCacheSize128M # 历史数据缓存大小 TrendCacheSize32M # 趋势数据缓存大小/etc/nginx/conf.d/zabbix.conf需要修改server { listen 80; server_name your.domain.com; root /usr/share/zabbix; }启动服务并设置开机自启systemctl enable --now zabbix-server zabbix-agent nginx php-fpm3. 配置Web应用集群监控3.1 添加主机自动注册登录Web界面http://your_server_ip/zabbix进入Configuration Hosts点击Create host填写Host nameweb-node1GroupsLinux servers, Web ServersAgent interfaces添加主机IP和10050端口踩坑提醒Host name必须与Agent配置文件中的Hostname严格一致否则会出现Host not found错误。3.2 关联监控模板为Web服务器关联以下内置模板Template OS Linux by Zabbix agentTemplate App Nginx by Zabbix agentTemplate App MySQL by Zabbix agent实测发现直接使用官方模板能覆盖80%的基础监控需求。对于Nginx监控需要确保主机上已开启status模块location /nginx_status { stub_status on; access_log off; allow 127.0.0.1; deny all; }4. 自定义Nginx监控项4.1 创建自定义监控项监控特定URL返回状态码以/api/health为例进入Configuration Hosts选择目标主机点击Items Create item填写NameAPI Health CheckKeyweb.page.get[localhost/api/health,80]TypeWeb monitoringUpdate interval30sApplicationsWeb Status验证命令可用性在Agent主机执行zabbix_get -s 127.0.0.1 -k web.page.get[localhost/api/health,80]4.2 配置触发器当API连续3次返回非200状态时触发告警进入Configuration Hosts Triggers点击Create trigger填写NameAPI Health Check FailedExpression{web-node1:web.page.get[localhost/api/health,80].str(200)}0 and {web-node1:web.page.get[localhost/api/health,80].nodata(60s)}0SeverityHigh表达式解读str(200)0表示返回值不是200nodata(60s)0排除数据采集失败的情况5. 告警通知配置5.1 配置邮件通知媒介进入Administration Media types点击Email填写SMTP服务器信息测试邮件发送echo Test message | mail -s Zabbix Test adminexample.com5.2 创建告警动作进入Configuration Actions创建新的触发动作条件Trigger severity Warning操作Send to: Admin Group Message subject: {TRIGGER.STATUS}: {TRIGGER.NAME} Message content: Host: {HOST.NAME} Problem: {TRIGGER.NAME} Status: {TRIGGER.STATUS}设置告警升级规则Escalations1小时内未恢复每30分钟重复通知3小时后未恢复额外通知运维主管6. 高级监控技巧6.1 自动发现动态服务通过LLDLow-Level Discovery自动发现Kubernetes Pod# 创建发现脚本 /etc/zabbix/scripts/discover_pods.sh #!/bin/bash kubectl get pods -o json | jq -r .items[] | .metadata.name | awk {print {\{#PODNAME}\:\$1\}} | jq -s .在Agent配置中添加UserParameterk8s.pods.discovery,/etc/zabbix/scripts/discover_pods.sh UserParameterk8s.pod.status[*],kubectl get pod $1 -o json | jq -r .status.phase6.2 使用Grafana可视化集成Grafana提升数据展示效果安装Grafana Zabbix插件grafana-cli plugins install alexanderzobnin-zabbix-app配置数据源指向Zabbix API导入Dashboard ID6239官方Zabbix模板7. 性能优化建议根据三年千万级监控数据量的实战经验推荐以下优化措施数据库调优ALTER TABLE history MODIFY COLUMN itemid BIGINT UNSIGNED NOT NULL; CREATE INDEX history_1 ON history (itemid, clock);Housekeeper设置历史数据保留7天趋势数据保留365天禁用不必要的审计日志主动式监控 在Agent配置中启用Active模式ServerActivezabbix-server-ip Hostnameweb-node1 RefreshActiveChecks120遇到监控延迟问题时可以检查Server的队列状态SELECT * FROM zabbix.queue;