政企要从 ELK 迁到国产可观测平台的完整割接方案:现状盘点、数据双写、历史按需回填、低峰割接,以及盘点不清、双写太短、回填贪多三个常见坑。
政企把日志系统从 ELK 迁到国产平台,通常有两个驱动:一是信创合规,要求核心系统跑在国产软硬件上;二是 ELK 的授权和运维成本,随数据量增长越来越难看——节点越扩越多,Grok 规则越堆越乱,还要专门有人盯着集群健康。
但日志系统是“生产系统的生产系统”,迁错了就是事故。难点集中在三处:历史日志不能丢、现有查询和看板不能断、迁移期间数据不能有缺口。下面按四个阶段来拆,每个阶段都有可核对的产出物。
动手前先把现有资产摸清楚,否则迁移就是盲切:
这一步的输出是一张清单,后面每一步都对着它核对。
不要一次性切流量,先在应用侧把日志同时发到 ELK 和新平台,跑一到两周。目的有两个:验证新平台的采集、解析、检索能力,同时积累一批“新格式”数据,为后面的回填对齐格式。
双写期间重点对比两边的日志条数、字段、时间戳。条数对不上,多半是采集端丢数据;字段对不上,多半是解析规则没迁全。建议每天固定时间做一次对账,把差异记下来,别等到割接那天才发现。
历史日志是迁移里最容易翻车的部分。不建议把 Elasticsearch 里几 TB 的索引原样导过来,原因有两个:一是索引 mapping 和字段类型对不上,二是会拉高存储成本。
更务实的做法是“按需回填”:只把高频查询的最近 30–90 天数据导过来,更早的日志留在原 ELK 里做冷备,查询入口保留一段时间。导出时用 elasticsearch-dump 或滚动导出,注意控制并发,别把源集群压垮。
# 滚动导出最近 30 天订单服务日志
multielasticdump --input=http://old-es:9200 \
--output=/backup/logs \
--match='order-service-*' \
--scrollTime=10m \
--concurrency=2
回填时还要做字段映射:Elasticsearch 的 @timestamp、嵌套字段、以及 Grok 拆出来的自定义字段,都要映射到新平台的字段模型上。建议先导一个索引做试点,验证字段对齐无误后再批量回填。
割接选在低峰窗口。切换顺序建议:先把查询入口切到新平台,再停掉 ELK 侧的写入,最后下线 Logstash。这个顺序保证任何时刻都至少有一个系统在接收日志。
收尾三件事:
我们见过的大部分翻车,都不是技术问题,而是这三个原因:
把这三个坑避开,迁移基本就稳了。核心原则一句话:宁可慢一点,别丢一条日志、别断一个告警。