1. 本方案目标:在台湾多可用区站群云主机上实现可靠的集中式日志管理与实时异常告警。要点:日志采集统一、传输可靠(TLS/缓冲/队列)、集中存储(Elasticsearch/EFK/Loki)、可搜索与索引、基于规则与统计的告警、通知到值班人。实施前先明确保留期、合规(数据留置台湾)与访问权限。
2. 前提准备:每台云主机可访问集中日志网关(例如内网ELB或Kafka集群);准备独立日志账号与证书;确定时钟同步(ntp/chrony);安装包源可达。清单示例:Filebeat/Fluentd二进制、Logstash/Fluentd接收端、Elasticsearch或Grafana Loki、存储快照策略、告警平台(Prometheus+Alertmanager 或 Elasticsearch Watcher/ElastAlert)。
3. 步骤:A. 在云主机上安装Filebeat:apt-get update && apt-get install filebeat -y。B. 编辑 /etc/filebeat/filebeat.yml,启用system与nginx模块或自定义paths,例如 paths: ["/var/log/nginx/*.log"]. C. 配置输出到Logstash(TLS):output.logstash: hosts: ["logstash.internal:5044"] ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]。D. 启动并加入开机:systemctl enable --now filebeat。E. 验证:curl -s 'http://elasticsearch.internal:9200/_cat/indices?v' 查看索引是否写入。
4. 配置Logstash:A. input { beats { port => 5044 ssl => true ssl_certificate => "/etc/pki/logstash.crt" ssl_key => "/etc/pki/logstash.key" } } B. filter 使用 grok、date、geoip 将日志结构化,例如 grok { match => { "message" => "%{COMMONAPACHELOG}" } } C. output 到 Elasticsearch:hosts => ["http://elasticsearch:9200"] index => "taiwan-logs-%{+YYYY.MM.dd}"。D. 保证Logstash有pipeline.worker合理分配并启用 persistent queues 以避免丢失。
5. 存储要点:A. 使用ILM(索引生命周期管理)设置热/温/冷阶段,示例:热7天、温30天、冷90天。B. 定期snapshots到对象存储(如台湾区S3兼容)。C. 索引模板定义字段类型,避免text滥用导致mapping explosion。D. 为大规模站群设置索引分片数与节点资源匹配。
6. 告警类型与实现:A. 阈值告警(错误数、响应码、CPU负载)—用Prometheus+Alertmanager或Elasticsearch Watcher实现。示例:5分钟内错误率>5%触发。B. 行为异常(突增、抖动)—用移动平均或基于机器学习的anomaly detection(Elasticsearch ML或外部模型)。C. 丢失心跳(heartbeat)—每台主机每分钟发心跳日志或使用Heartbeat采集,超过3次未到达触发严重告警。
7. 通知链路:A. 低优先级通过邮件/群消息(Line Notify/Slack)发送,严重通过PagerDuty或电话/SMS通知值班。B. 在Alertmanager配置receivers与路由:label匹配+抑制规则+重复通知间隔(repeat_interval)。C. 在告警消息包含必要上下文:主机、时间窗口、相关日志样例、回滚建议与Runbook链接。
8. 实施细节:A. 采集端启用本地缓冲与backpressure(Filebeat spool_size、queue.mem设置)。B. 中转层使用Kafka作为持久队列,Logstash或Consumer消费,避免短暂网络抖动导致数据丢失。C. Elasticsearch集群至少3主节点,跨可用区部署并开启快照策略。
9. 安全措施:A. 全链路启用TLS,Filebeat与Logstash间、Logstash与ES间都应加密。B. 使用API keys或证书进行认证,最小权限原则分配索引写入/只读权限。C. 日志脱敏:对PII字段在传输前进行mask或在Logstash中使用mutate/regex替换。
10. 验收步骤:A. 基线测试:在10台主机上模拟高错误率,确认告警触达并包含日志样本。B. 容错测试:断开Logstash节点验证Filebeat是否持久化队列并在恢复后回写。C. 每月检查索引模板、磁盘和快照成功率。运维清单包含证书到期提醒、ILM策略审查、告警规则复核。
11. 答:在部署时选择本地(台湾区)Elasticsearch/对象存储并禁用自动跨区复制;在Filebeat/Logstash配置中指定内网地址,仅在台湾可达的VPC子网内部署;快照存储选择台湾区域的对象存储,并在权限策略中限制外部访问。
12. 答:先启用或扩展Kafka缓冲队列以平滑流量,临时增加Logstash实例数量或提高pipeline.workers,短期内加大Elasticsearch写入吞吐(增加bulk_size、刷新间隔),同时在Filebeat端降低发送频率和增大发送缓冲。
13. 答:使日志索引包含host与service标签,创建预定义Dashboard(Kibana/Grafana)并在发现异常模式后,基于host和时间窗口建立Watch或Prometheus规则(例如5分钟内error_count>threshold),告警模板带上最近N条日志与相关字段链接供值班快速诊断。