使用本地 LLM 自動分析基礎架構日誌的實作經驗

使用本地 LLM 自動分析基礎架構日誌的實作經驗

3 min read

2026.04 / Tech Blog / BASTION

使用本地 LLM 建置自動化基礎架構日誌分析系統 #

AI 每 15 分鐘自動分析防火牆、驗證基礎架構、交換器、負載平衡器與網頁伺服器的日誌,偵測異常、判斷嚴重程度並提出處理建議——全部透過 Slack 通知完成。日誌資料絕不會外流至環境之外。

建置動機 #

動機非常單純:我們沒有時間逐一檢視日誌。

BESTNET-CLOUD 運行著多台防火牆、L2/L3 交換器、Windows AD、負載平衡器與網頁伺服器。每一台都會輸出 syslog,但要人工每天逐一檢視所有日誌並不現實。我們使用 Zabbix 進行資源監控,但要判讀 syslog 內容、決定某個攻擊模式該忽略還是該處理,這件事仍然仰賴人力。

像是 AWS DevOps Agent(2026 年 3 月正式發布)與 Azure Security Copilot 這類服務,目前在公有雲端已提供 AI 驅動的日誌分析功能。然而,這些服務主要針對雲端資源,缺乏直接解析並分析地端實體設備 syslog 的功能。此外,由於日誌資料會被傳送至雲端供應商的 AI 基礎架構,這些方案無法用於封閉網路環境。

於是只剩下自行建置一途。所幸本地 LLM 的效能已達到實用等級,所需的所有元件也都可透過開源方式取得。

系統架構 #

本系統名為 BASTION——意指堡壘或最後據點,體現了在封閉網路環境中保護基礎架構的願景。

架構本身相當單純。

BASTION Architecture Diagram

使用的元件如下——皆為開源或免費方案:

元件角色授權
rsyslog集中接收所有設備的 syslog,並依主機分別儲存OSS(GPL)
Shell script 套件各設備日誌的彙整、解析與前處理自主開發
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) #

cron 每 15 分鐘執行一次 summarize.sh,針對每台設備擷取過去 30 分鐘內的事件,並產生結構化的文字摘要。

關鍵設計原則:絕不直接將原始日誌餵給 LLM。 原始日誌內容冗長,會消耗大量 token。我們先用 shell script 進行解析——產出如「防火牆封鎖 5 次,攻擊來源 IP 前五名為這些,AD 登入失敗共 X 次」之類的摘要——再將僅有摘要的自然語言內容交給 LLM 判斷。

由於每台設備的日誌格式完全不同,解析邏輯需針對每台設備分別撰寫。例如,防火牆 filterlog 採用逗號分隔欄位,來源 IP 位於第 19 欄、目的埠位於第 22 欄。Windows AD 日誌則包含二進位資料,需使用 grep -a。這些內嵌於腳本中的設備專屬知識,正是本系統的核心工作所在。

3. AI 分析(analyze.sh) #

摘要文字透過 OpenClaw 交由本地 LLM(Qwen2.5-14B)處理。提示詞會指示:「判斷嚴重程度,並以 JSON 格式回傳偵測到的異常與建議處理方式」。

此處有兩項關鍵設計決策。

對話隔離:每次分析都會產生一個動態的 session 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 tokens)約 1–2GB
合計約 10–11GB
一張 V100 16GB GPU 即可提供充裕餘裕。 由於這是每 15 分鐘執行一次的批次處理,GPU 並非持續佔用。GPUStack 提供 OpenAI 相容 API,因此更換模型只需調整設定即可。

支援的設備 #

設備類型分析內容
防火牆攻擊封鎖次數、攻擊來源 IP、埠分佈、VPN 錯誤
驗證(AD)登入成功/失敗/鎖定、失敗來源 IP、失敗帳號
負載平衡器各後端的 5xx 錯誤率
L2/L3 交換器連線中斷、迴路、風暴偵測
網頁伺服器HTTP 狀態分佈、敏感 URL、4xx/5xx 來源 IP

任何會輸出 syslog 的設備,只要新增解析腳本即可納入監控範圍。FortiGate、Cisco、Palo Alto 等設備皆可以相同方式支援。

營運心得 #

判斷交給 LLM,資料處理交給腳本 #

最初我們曾嘗試直接將原始日誌餵給 LLM,但它誤判了 syslog 的欄位位置,並出現計算錯誤。LLM 不擅長精確的數值彙整。現在,解析、計數與彙整皆由 shell script 處理;LLM 僅負責閱讀摘要並判斷「是異常還是正常?」以及「該如何處理?」。

誤判控制會隨營運逐漸完善 #

第一週充斥著誤判。Kerberos 電腦帳戶對 AD 的定期驗證產生了超過 1,000 筆登入成功報告,Nextcloud LDAP 整合則被標記為「可疑登入嘗試」。將每個模式陸續加入系統提示詞作為正常行為後,約兩週內雜訊便消除了。

對話隔離不可或缺 #

若直接沿用同一 session,先前的分析結果會殘留於上下文中,導致 LLM 加入諸如「與上次報告相比……」這類不必要的內容。安全分析每次都需要全新的視角,因此我們針對每次分析動態產生 session ID。

「沒有異常」的報告也有其價值 #

一開始,頻繁的 LOW 通知讓人感覺吵雜。但隨著時間過去,我們發現這些報告其實是在確認「系統正常運作中」。當通知停止時,我們便能察覺「監控本身已停止」——正是靠著這些定期報告。

未來規劃 #

目前的流程是「偵測 → 通知」。我們計畫將其擴展為「偵測 → AI 判斷 → 自動處理」。

具體而言,我們將實作攻擊來源 IP 的自動封鎖(直接呼叫防火牆 API)、暴力破解偵測時的自動封鎖,以及異常資源使用時的自動限流。我們也正在探索一種混合架構,讓 BASTION 透過 webhook 接收既有監控系統(Zabbix、AWS CloudWatch、Azure Monitor)的告警,執行跨系統的 AI 分析,並執行自動化處理。

總結 #

我們透過本地 LLM(Qwen2.5-14B)+ GPUStack + OpenClaw + rsyslog + shell script,實現了自動化基礎架構日誌分析。系統運行於一張 V100 16GB GPU 上,日誌資料不會離開此環境,每月營運成本僅為 GPU 的電費。

所有元件皆為開源,因此任何人都能重現此架構。然而,要達到完整運作,仍需要針對各設備進行日誌解析、累積誤判模式並調校系統提示詞——這些都是不容小覷的工作與營運知識。

BASTION 目前正 24 小時全年無休地在 BESTNET LLC 自有基礎架構(BESTNET-CLOUD)上正式運行。

對封閉網路環境的 AI 安全監控有興趣嗎?歡迎與我們聯繫。

BASTION Service Page Contact
Updated on 2026年6月9日

What are your feelings

  • Happy
  • Normal
  • Sad

©2020 BESTNET.LLC . All Rights Reserved.