使用本地LLM自动分析基础设施日志的实践

使用本地LLM自动分析基础设施日志的实践

3 min read

2026.04 / Tech Blog / BASTION

使用本地LLM构建自动化基础设施日志分析系统 #

AI 每 15 分钟自动分析来自防火墙、认证基础设施、交换机、负载均衡器和 Web 服务器的日志,检测异常、判断严重程度并提出应对建议——全部通过 Slack 通知完成。日志数据绝不会外发。

我们为什么要做这个 #

动机很简单:我们没有时间去查看日志。

BESTNET-CLOUD 运行着多台防火墙、二层/三层交换机、Windows AD、负载均衡器和 Web 服务器。每台设备都会产生 syslog 输出,但让人每天手动查看所有日志是不现实的。我们使用 Zabbix 进行资源监控,但读取 syslog 内容并判断某种攻击模式应忽略还是应处理,这项工作仍然依赖人工。

AWS DevOps Agent(2026 年 3 月正式发布)和 Azure Security Copilot 等服务如今在公有云一侧提供了 AI 驱动的日志分析功能。然而,这些方案主要面向云端资源,缺乏直接解析和分析来自本地物理设备 syslog 的能力。而且,由于日志数据会被传输至云厂商的 AI 基础设施,这些方案无法在封闭网络环境中使用。

于是我们只能自己动手构建。幸运的是,本地 LLM 的性能已经达到了实用水平,所需的全部组件也都能以开源形式获得。

系统架构 #

该系统名为 BASTION——意为堡垒或最后的据点,体现了在封闭网络环境中保护基础设施的愿景。

系统架构非常简单直接。

BASTION Architecture Diagram

所使用的组件如下——全部为开源或免费套餐:

组件作用许可协议
rsyslog集中接收来自所有设备的 syslog,按主机分别保存OSS(GPL)
Shell 脚本套件按设备进行日志汇总、解析、预处理自研开发
OpenClawAI 代理框架(LLM 集成、Slack 集成、命令执行)OSS
Qwen2.5-14B本地 LLM(日语日志分析、异常检测)OSS(Apache 2.0)
GPUStackGPU 推理服务器(提供与 OpenAI 兼容的 API)OSS
Slack(Socket Mode)通知与双向交互免费套餐
关键点:无需互联网连接。 Slack Socket Mode 仅使用出站连接运行——无需开放任何入站端口。LLM 推理通过 GPUStack 在本地完成。日志数据没有任何离开该环境的路径。

数据流详解 #

1. 日志采集(rsyslog) #

通过 UDP/TCP 514 端口接收各设备的 syslog,并按主机名、年份、月份和程序名分目录存储。

/var/log/remote/
  fw-primary/2026/04/filterlog.log
  ad-server/2026/04/Security-Auditing.log
  lb-server/2026/04/loadbalancer.log
  ...

2. 日志汇总(summarize.sh) #

每 15 分钟由 cron 执行一次 summarize.sh,从各设备中提取过去 30 分钟的事件,并生成结构化的文本摘要。

关键设计原则:绝不直接把原始日志喂给 LLM。 原始日志冗余度高,会消耗大量 token。我们先用 Shell 脚本进行解析——生成诸如“防火墙拦截 5 次、Top 5 攻击源 IP 为这些、AD 登录失败 X 次”之类的摘要——然后仅将该摘要以自然语言的形式交给 LLM 判断。

由于各设备的日志格式完全不同,解析逻辑需要按设备单独编写。例如,防火墙的 filterlog 使用逗号分隔字段,源 IP 位于第 19 个字段,目标端口位于第 22 个字段。Windows AD 日志包含二进制数据,需要使用 grep -a。这些嵌入脚本中的设备专属知识正是本系统的核心工作所在。

3. AI 分析(analyze.sh) #

摘要文本通过 OpenClaw 提交给本地 LLM(Qwen2.5-14B)。提示词要求它:“判断严重程度,并以 JSON 格式返回检测到的异常和推荐的应对措施。”

这里应用了两个关键设计决策。

会话隔离:每次分析都会生成一个动态会话 ID,防止过去的对话历史污染上下文。LLM 容易受到先前结果的影响而导致判断出现偏差,因此我们确保每次分析都拥有全新的上下文。

误报控制:正常运行模式(Nextcloud LDAP 定期认证、Kerberos 自动认证、防火墙对外部扫描的拦截等)被定义在系统提示词中,为 LLM 提供排除标准,将其视为噪声。我们会在运维过程中不断迭代添加这些模式。

4. 通知(notify.sh) #

LLM 分析结果会按严重程度用不同颜色发送至 Slack(critical=红色,high=橙色,medium=黄色,low=绿色)。

对于 medium 及以上级别,系统会自动发送第二条详细分析消息。该消息包含原始日志的前 50 行,让运维人员仅凭通知内容即可同时确认“发生了什么”以及原始数据。

5. 交互式分析(Slack 双向交互) #

除定时分析外,在 Slack 中提及 @OpenClaw-Monitor firewall analysis 即可立即触发对指定设备的详细分析。支持诸如“是否有 VPN 认证异常的迹象?”或“检查是否有单个 IP 尝试多种攻击手法”之类的自然语言查询。

由于 OpenClaw 可以执行 bash 命令,未来可扩展至自动化应对——例如动态添加防火墙规则、隔离服务等。

GPU 需求 #

资源消耗出乎意料地小。

项目消耗量
模型(Qwen2.5-14B Q4 量化)约 9GB
KV 缓存(16K token)约 1–2GB
合计约 10–11GB
一台 V100 16GB GPU 即可提供充裕的余量。 由于这是每 15 分钟运行一次的批处理,GPU 并非持续占用。GPUStack 提供与 OpenAI 兼容的 API,因此更换模型只需修改配置即可。

支持的设备 #

设备类型分析内容
防火墙攻击拦截次数、攻击源 IP、端口分布、VPN 错误
认证(AD)登录成功/失败/锁定、失败来源 IP、失败账户
负载均衡器各后端的 5xx 错误率
二层/三层交换机链路中断、环路、风暴检测
Web 服务器HTTP 状态分布、敏感 URL、4xx/5xx 来源 IP

任何输出 syslog 的设备都可以通过添加解析脚本纳入监控范围。FortiGate、Cisco、Palo Alto 等设备均可通过相同方式支持。

运维经验 #

让 LLM 负责判断,让脚本负责数据处理 #

最初,我们尝试将原始日志直接喂给 LLM,但它会误判 syslog 字段位置,导致计算错误。LLM 不擅长精确的数值汇总。现在,解析、计数和汇总均由 Shell 脚本处理;LLM 仅负责阅读摘要并判断“是否异常?”以及“应采取何种应对措施?”。

误报控制随运维不断完善 #

第一周饱受误报困扰。Kerberos 计算机账户对 AD 的定期认证产生了超过 1,000 条登录成功报告,而 Nextcloud 的 LDAP 集成则被标记为“可疑登录尝试”。将每种模式作为正常行为逐一添加到系统提示词后,大约两周内噪声就被消除了。

会话隔离必不可少 #

如果直接使用会话,先前的分析结果会保留在上下文中,导致 LLM 引入诸如“与上次报告相比……”之类的不必要上下文。安全分析每次都需要以全新视角进行,因此我们为每次分析动态生成会话 ID。

“无事发生”的报告同样有价值 #

最初,频繁的 LOW 级通知感觉很吵。但随着时间推移,我们意识到这些报告其实是在告诉我们“系统运行正常”。当通知停止时,我们便能察觉到“监控本身已经停止”——这正是得益于这些常规报告。

未来计划 #

目前的流程是“检测 → 通知”。我们计划将其扩展为“检测 → AI 判断 → 自动应对”。

具体而言,我们将实现自动封锁攻击源 IP(直接调用防火墙 API)、检测到暴力破解时自动封锁,以及在资源异常使用时自动限流。我们也在探索一种混合方案:让 BASTION 通过 webhook 接收来自现有监控系统(Zabbix、AWS CloudWatch、Azure Monitor)的告警,进行跨系统 AI 分析,并执行自动化应对。

总结 #

我们利用本地 LLM(Qwen2.5-14B)+ GPUStack + OpenClaw + rsyslog + Shell 脚本实现了自动化基础设施日志分析。系统运行在一台 V100 16GB GPU 上,日志数据从不离开该环境,每月运营成本仅为 GPU 电费。

所有组件均为开源,因此任何人都可以复现这套架构。然而,要实现完整运行,还需要针对各设备编写专属的日志解析逻辑、积累误报模式并调优系统提示词——这并非易事,需要相应的运维知识积累。

BASTION 目前正在 BESTNET LLC 自有基础设施(BESTNET-CLOUD)上 24/7 全天候生产运行。

对面向封闭网络环境的 AI 驱动安全监控感兴趣?欢迎随时联系我们。

BASTION 服务页面 联系我们
Updated on 2026年6月9日

What are your feelings

  • Happy
  • 常规
  • Sad

©2020 BESTNET.LLC . All Rights Reserved.