生产环境概述
生产环境的ELK部署需要考虑性能、稳定性、安全性、可维护性等多个方面。遵循最佳实践可以确保系统稳定运行,满足业务需求。
生产环境要求
# 生产环境要求
production_requirements = {
"高可用": "至少3节点集群,多副本",
"性能": "优化配置,满足性能要求",
"安全": "启用安全功能,访问控制",
"监控": "完善的监控和告警",
"备份": "定期备份,可恢复",
"文档": "完善的文档和流程"
}
部署规划
1. 容量规划
# 容量规划
规划维度:
数据量: "估算每日数据量"
保留期: "数据保留时间"
查询量: "查询QPS"
写入量: "写入TPS"
计算公式:
索引大小 = 每日数据量 × 保留天数 × 副本数
分片数量 = 索引大小 / 单分片大小(20-50GB)
节点数量 = (分片总数 / 单节点分片数) + 主节点数
2. 架构设计
# 生产环境架构
架构组件:
Elasticsearch:
- 3个主节点(专用)
- 6-12个数据节点
- 跨可用区部署
- 每个索引至少1个副本
Logstash:
- 3个Logstash节点
- 负载均衡
- 持久化队列
Kibana:
- 2个Kibana节点
- 负载均衡
- 会话共享
3. 硬件配置
# 硬件配置建议
硬件配置:
Elasticsearch数据节点:
CPU: "16-32核心"
内存: "64-128GB(堆内存不超过32GB)"
磁盘: "SSD,至少2TB"
网络: "万兆网卡"
Logstash节点:
CPU: "8-16核心"
内存: "16-32GB"
磁盘: "SSD,500GB"
Kibana节点:
CPU: "4-8核心"
内存: "8-16GB"
磁盘: "SSD,200GB"
配置优化
1. Elasticsearch配置
# config/elasticsearch.yml
# 生产环境配置
cluster.name: production-cluster
node.name: ${HOSTNAME}
# 网络配置
network.host: _site_
http.port: 9200
transport.port: 9300
# 发现配置
discovery.seed_hosts: ["node1:9300", "node2:9300", "node3:9300"]
cluster.initial_master_nodes: ["node1", "node2", "node3"]
# 安全配置
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
# 性能配置
thread_pool.write.size: 8
thread_pool.search.size: 8
indices.memory.index_buffer_size: 20%
# config/jvm.options
# JVM配置
-Xms16g
-Xmx16g
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
2. Logstash配置
# config/logstash.yml
# 生产环境配置
pipeline.workers: 4
pipeline.batch.size: 500
pipeline.batch.delay: 50
queue.type: persisted
queue.max_bytes: 10gb
path.data: /var/lib/logstash
path.logs: /var/log/logstash
3. Kibana配置
# config/kibana.yml
# 生产环境配置
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://es1:9200", "http://es2:9200", "http://es3:9200"]
elasticsearch.username: "kibana_system"
elasticsearch.password: "${KIBANA_PASSWORD}"
logging.appenders:
- type: file
fileName: /var/log/kibana/kibana.log
layout:
type: json
安全加固
1. 安全配置
# 安全配置检查清单
安全配置:
- [ ] 启用TLS/SSL
- [ ] 配置用户认证
- [ ] 设置角色和权限
- [ ] 启用审计日志
- [ ] 配置防火墙规则
- [ ] 限制网络访问
- [ ] 定期更新证书
- [ ] 使用API密钥
2. 访问控制
# 访问控制配置
访问控制:
网络层: "防火墙规则,只允许必要端口"
应用层: "用户认证和授权"
数据层: "字段级和文档级安全"
审计: "记录所有访问操作"
索引管理
1. 索引策略
# 索引管理策略
索引策略:
命名规范: "logs-YYYY.MM.dd格式"
分片数量: "根据数据量设置,单分片20-50GB"
副本数量: "生产环境至少1个副本"
生命周期: "使用ILM自动管理"
模板: "使用索引模板统一配置"
2. 索引模板
// 索引模板配置
PUT /_index_template/logs_template
{
"index_patterns": ["logs-*"],
"template": {
"settings": {
"number_of_shards": 5,
"number_of_replicas": 1,
"index.lifecycle.name": "logs_policy",
"index.lifecycle.rollover_alias": "logs"
},
"mappings": {
"properties": {
"@timestamp": {
"type": "date"
},
"message": {
"type": "text"
},
"level": {
"type": "keyword"
}
}
}
}
}
监控和告警
1. 监控配置
# 监控配置
监控指标:
集群健康: "集群状态、节点状态"
性能指标: "响应时间、吞吐量"
资源使用: "CPU、内存、磁盘"
错误率: "错误日志、失败请求"
2. 告警规则
# 告警规则
告警规则:
关键告警:
- 集群状态为red
- 节点离线
- 磁盘使用率>95%
警告:
- 集群状态为yellow
- JVM使用率>80%
- 磁盘使用率>85%
备份和恢复
1. 快照备份
# 创建快照仓库
PUT /_snapshot/my_backup
{
"type": "fs",
"settings": {
"location": "/backup/elasticsearch"
}
}
# 创建快照
PUT /_snapshot/my_backup/snapshot_1
{
"indices": "logs-*",
"ignore_unavailable": true,
"include_global_state": false
}
# 恢复快照
POST /_snapshot/my_backup/snapshot_1/_restore
{
"indices": "logs-2025-05-01",
"rename_pattern": "logs-(.+)",
"rename_replacement": "restored-logs-$1"
}
2. 备份策略
# 备份策略
备份策略:
全量备份: "每周一次全量备份"
增量备份: "每天增量备份"
保留期: "保留30天备份"
测试恢复: "定期测试恢复流程"
运维管理
1. 日常运维
# 日常运维任务
运维任务:
每日:
- 检查集群健康
- 检查磁盘使用
- 检查错误日志
每周:
- 检查索引大小
- 检查慢查询
- 检查性能指标
每月:
- 容量规划评估
- 性能优化评估
- 安全审计
2. 故障处理
# 故障处理流程
处理流程:
1: "发现问题(监控告警)"
2: "定位问题(查看日志、指标)"
3: "分析原因"
4: "制定解决方案"
5: "执行修复"
6: "验证修复"
7: "记录问题"
3. 变更管理
# 变更管理
变更流程:
1: "变更申请"
2: "变更评估"
3: "变更审批"
4: "变更执行(测试环境)"
5: "变更验证"
6: "变更执行(生产环境)"
7: "变更确认"
性能优化
1. 查询优化
# 查询优化
优化建议:
- 使用filter代替query
- 字段过滤
- 使用search_after代替from/size
- 合理使用缓存
- 优化聚合查询
2. 写入优化
# 写入优化
优化建议:
- 批量写入
- 临时关闭副本
- 增加刷新间隔
- 使用合适的批量大小
文档和流程
1. 文档管理
# 文档管理
文档类型:
- 架构文档
- 配置文档
- 运维手册
- 故障处理手册
- 变更记录
2. 流程规范
# 流程规范
流程:
- 部署流程
- 变更流程
- 故障处理流程
- 备份恢复流程
- 安全审计流程
总结
ELK生产环境最佳实践的关键要点:
- 部署规划:容量规划、架构设计、硬件配置
- 配置优化:Elasticsearch、Logstash、Kibana配置
- 安全加固:安全配置、访问控制
- 索引管理:索引策略、索引模板
- 监控和告警:监控配置、告警规则
- 备份和恢复:快照备份、备份策略
- 运维管理:日常运维、故障处理、变更管理
- 性能优化:查询优化、写入优化
- 文档和流程:文档管理、流程规范
遵循这些最佳实践,可以构建稳定、安全、高效的ELK生产环境,满足业务需求。
转载请注明:周志洋的博客 » ELK生产环境最佳实践


