1. 项目概述
最近在帮客户部署一套完整的监控系统,选择了Zabbix作为核心监控平台,配合Nginx做前端代理,MySQL存储结构化数据,Elasticsearch处理日志和指标数据。这套组合在实际运行中表现相当稳定,今天就把整个部署过程和关键配置点整理出来。
Zabbix作为老牌监控解决方案,在服务器、网络设备监控领域一直很受欢迎。但原生Zabbix在处理大规模日志数据和复杂查询时性能会打折扣,所以我们引入了Elasticsearch来增强这部分能力。整套系统部署完成后,可以实现:
- 服务器基础指标监控(CPU/内存/磁盘等)
- 网络设备状态监控
- 日志集中收集与分析
- 自定义监控项采集
- 数据可视化与告警
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与组件安装
2.1 服务器规划建议
对于生产环境,建议采用以下服务器配置方案:
| 组件 | 数量 | 配置要求 | 说明 |
|---|---|---|---|
| Zabbix Server | 2 | 8核16G内存,100G SSD存储 | 主备部署保证高可用 |
| MySQL | 3 | 8核32G内存,500G SSD存储 | 主从复制架构 |
| Elasticsearch | 3 | 16核64G内存,1TB SSD存储 | 组成集群,分片部署 |
| Nginx | 2 | 4核8G内存,100G存储 | 负载均衡和反向代理 |
2.2 基础组件安装
Nginx安装配置:
bash复制# CentOS系统安装
yum install -y epel-release
yum install -y nginx
# Ubuntu系统安装
apt-get update
apt-get install -y nginx
# 启动并设置开机自启
systemctl start nginx
systemctl enable nginx
MySQL安装要点:
- 建议使用MySQL 8.0版本,性能更好
- 安装后务必运行mysql_secure_installation进行安全加固
- 配置合适的innodb_buffer_pool_size(建议物理内存的70%)
Elasticsearch集群配置:
yaml复制# elasticsearch.yml关键配置
cluster.name: zabbix-monitoring
node.name: node-1
network.host: 0.0.0.0
discovery.seed_hosts: ["node1:9300", "node2:9300", "node3:9300"]
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]
3. Zabbix核心部署
3.1 Zabbix Server安装
bash复制# 添加Zabbix官方仓库
rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-3.el7.noarch.rpm
# 安装核心组件
yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-agent
# 初始化数据库
mysql -uroot -p -e "create database zabbix character set utf8 collate utf8_bin"
mysql -uroot -p -e "grant all privileges on zabbix.* to zabbix@localhost identified by 'password'"
zcat /usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz | mysql -uzabbix -p zabbix
3.2 配置文件调整
zabbix_server.conf关键参数:
conf复制DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=password
StartPollers=20
StartPollersUnreachable=10
StartTrappers=15
StartPingers=10
CacheSize=512M
HistoryCacheSize=256M
HistoryIndexCacheSize=128M
Nginx站点配置:
nginx复制server {
listen 80;
server_name zabbix.example.com;
location / {
root /usr/share/zabbix;
index index.php;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
4. 数据采集与可视化集成
4.1 Elasticsearch与Zabbix集成
- 安装Elasticsearch输出插件:
bash复制yum install -y zabbix-elasticsearch
- 配置elasticsearch输出:
conf复制# zabbix_server.conf添加
ElasticsearchServer=elasticsearch:9200
ElasticsearchIndex=zabbix-history
ElasticsearchTimeout=30s
- 创建Elasticsearch索引模板:
json复制PUT _template/zabbix-template
{
"index_patterns": ["zabbix-*"],
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"@timestamp": { "type": "date" },
"host": { "type": "keyword" },
"itemid": { "type": "keyword" },
"value": { "type": "float" }
}
}
}
4.2 监控项配置技巧
- 基础监控项自动发现:
xml复制<UserParameter=discovery.disks,/usr/lib/zabbix/externalscripts/discover_disks.py)
- 自定义监控项示例(监控Nginx状态):
conf复制UserParameter=nginx.connections.active,curl -s http://127.0.0.1/nginx_status | awk '/Active/ {print $3}'
UserParameter=nginx.requests.total,curl -s http://127.0.0.1/nginx_status | awk '/^ [0-9]+/ {print $1}'
5. 性能优化与问题排查
5.1 MySQL性能调优
sql复制-- 优化Zabbix数据库
ALTER TABLE history MODIFY COLUMN itemid bigint unsigned NOT NULL;
ALTER TABLE history_uint MODIFY COLUMN itemid bigint unsigned NOT NULL;
CREATE INDEX history_1 ON history (itemid, clock);
CREATE INDEX history_uint_1 ON history_uint (itemid, clock);
5.2 常见问题解决方案
问题1:Zabbix Server内存占用过高
- 解决方案:调整CacheSize参数,增加StartPollers数量
问题2:Elasticsearch索引速度慢
- 检查bulk请求大小,建议设置在5-15MB
- 增加refresh_interval到30s
问题3:Nginx代理超时
nginx复制location /api_jsonrpc.php {
proxy_pass http://zabbix-server;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_send_timeout 300;
}
6. 监控面板配置
- 创建综合监控仪表板:
- 系统整体状态(服务器数量、告警数量)
- 资源使用TOP10(CPU、内存、磁盘)
- 网络流量趋势
- 最近告警事件
- 使用Grafana集成(可选):
yaml复制# docker-compose.yml片段
grafana:
image: grafana/grafana
ports:
- "3000:3000"
volumes:
- ./grafana-data:/var/lib/grafana
7. 安全加固措施
- Nginx安全配置:
nginx复制add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options SAMEORIGIN;
add_header X-XSS-Protection "1; mode=block";
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
- Zabbix用户权限控制:
- 创建不同权限级别的用户组
- 限制API访问IP
- 启用审计日志
- MySQL访问控制:
sql复制REVOKE ALL PRIVILEGES ON zabbix.* FROM 'zabbix'@'%';
GRANT SELECT, INSERT, UPDATE, DELETE ON zabbix.* TO 'zabbix'@'10.0.0.%';
这套监控系统在实际运行中每天处理超过500万条监控数据,峰值期间也能保持稳定。最关键的是要合理规划各个组件的资源配置,特别是MySQL和Elasticsearch的调优需要根据数据量不断调整。
