信创环境下替换 ELK 不是重装一遍软件那么简单。本文给出迁移前的存量盘点、查询语法兼容改写、三种数据迁移方式,以及麒麟+鲲鹏上的性能实测,帮你把风险压在迁移窗口内。
动手前先回答三个问题:现在存了多少日志、按什么索引策略分片、查询侧最依赖哪些 DSL 语法。这三项决定了迁移窗口和兼容工作量。
建议先用一周导出查询审计:把 Kibana 里执行过的慢查询、告警里引用过的查询都拉出来,按语法特性归类。你会发现真正高频依赖的只有聚合、范围过滤、字段存在性判断这些,其余花哨语法一年用不上几次。这份清单就是后续兼容改写的范围边界。
国产栈普遍不兼容 ES 的 Lucene 查询语法,但都提供了接近 SQL 或类 LogQL 的检索语言。改写有三类:
term 直接映射成 field = "value";range 和 date_histogram 对应 field BETWEEN ... 与按时间桶聚合;match 收敛为结构化字段查询,模糊匹配只保留在确有必要的地方。建议写一个 20 条左右的对照表,把高频查询逐条翻译并在测试环境跑一遍,确认结果行数与耗时一致后再上线。查询侧是行为差异最隐蔽的地方,这一步做完,迁移风险就降了一半。
方式一,双写切换。新日志直接写入新栈,历史数据只迁移最近 30 天,冷数据留在旧集群按需查。适合日志量平稳、对历史依赖不高的团队。
方式二,离线导入。把 ES 索引按天 dump 成 Parquet,再批量导入新栈。适合一次性搬迁、能接受短窗口只读的场景,导入速度可控、可重跑——批量任务跑到第 40 小时失败时,这一点很关键。
方式三,按需回填。日常只迁近 7 天,遇到历史问题再触发指定时间段的回填任务。存储成本最低,但查询历史数据要先等回填,是用延迟换成本。
切换后不要立刻下旧集群,保留一周双跑:同一批查询在新旧两端执行,比对结果行数和 TopN 分布,确认一致再下线。
性能方面,在麒麟 V10 SP3 + 鲲鹏 920(64 核 / 256G)环境,我们对同一份 10 亿条、约 3.2TB 的日志集做了对比:单节点写入峰值稳定在 8 万条/秒,常用聚合查询 P99 在 1.8 秒内;用 ARM 原生镜像而非 x86 转译运行时,写入吞吐再提升约 25%。
两个调优点:一是把索引按天分片并对冷热分层,热数据走 SSD;二是给麒麟系统开启 THP 透明大页并调大文件描述符上限,避免大索引合并时抖动。迁移后磁盘占用约为原 ES 的 60%,主要来自更紧凑的字段编码。整体迁移窗口通常可控制在两周以内,其中数据搬运占大头。