构建基于RAG的AWS VPC流日志分析器

发布: (2026年2月28日 GMT+8 23:06)
6 分钟阅读
原文: Dev.to

Source: Dev.to

构建基于RAG的AWS VPC流日志分析器的封面图像

Sulaiman Olubiyi

介绍

了解虚拟私有云 (VPC) 内的网络流量直接影响您的安全姿态、性能可视性和合规准备程度。然而,大多数团队仍然手动筛选原始流日志,对事件作出响应,而不是主动进行调查。

与其在成千上万的日志行中使用 grep 搜索或将数据导出到电子表格,我们可以将 VPC Flow Logs 转换为交互层。

如果您可以像这样直接向日志提问会怎样?

  • 那个 SSH 连接被拒绝了吗?
  • 哪个 IP 持续访问 443 端口?
  • 这段流量是正常的还是有问题的?

在本文中,我们将构建一个由 Retrieval‑Augmented Generation (RAG) powered VPC Flow Log Analyzer,将静态网络遥测转化为交互式安全助手。

手动日志分析的挑战

AWS VPC Flow Logs 捕获网络流量的关键信息。然而,分析这些原始日志以检测威胁(例如 SQL 注入尝试或未授权访问)面临重大挑战:

  • 信息过载 – 海量日志让人应接不暇。要在其中寻找特定模式或异常,就像在大海捞针。
  • 上下文碎片化 – 原始日志缺乏上下文。跨不同组件和时间段识别相关数据包既费力又容易出错。

基于 RAG 的 VPC Flow Log Analyzer 通过以下技术解决这些问题:

  • Streamlit – 交互式 UI
  • LangChain – RAG 编排
  • Chroma – 向量数据库
  • OpenAI GPT‑4o – 推理引擎

最终,你将拥有一个对话式安全助理,能够回答诸如以下问题:

  • “哪些 IP 被拒绝了?”
  • “是否有异常流量访问 22 端口?”
  • “哪些目标接收的包最多?”

RAG Workflow

Functional Components

ComponentRoleImplementation
Data Ingestion & Transformation(“Translator”)将原始 VPC Flow Log 字符串(例如 2 123... 443 6 ACCEPT)转换为人类可读的句子,例如 “Source 10.0.1.5 sent 1000 bytes to port 443 and was ACCEPTED.”Custom Python parser
Embedding Model(“Encoder”)将每条日志句子转换为用于语义搜索的数值指纹(向量)text‑embedding‑3‑small (OpenAI)
Vector Database(“Memory”)存储向量并提供快速相似度搜索ChromaDB (local)
RAG Orchestration & LLM(“Brain”)检索相关向量,将其与提示一起送入 LLM,并返回自然语言答案LangChain + GPT‑4o
Streamlit Frontend(“Cockpit”)用于上传日志、管理 API 密钥以及与助手聊天的 UIStreamlit web framework

实施步骤

1️⃣ 克隆仓库并设置虚拟环境

git clone https://github.com/Damdev-95/rag_aws_flow_logs
cd rag_aws_flow_logs

python -m venv venv
source venv/bin/activate   # On Windows use `venv\Scripts\activate`

pip install -r requirements.txt

Workspace Code

2️⃣ 配置环境变量

创建一个 .env 文件(或导出变量),其中包含你的 OpenAI API 密钥:

OPENAI_API_KEY=sk-XXXXXXXXXXXXXXXXXXXXXXXX

代码通过以下方式读取它:

import os
ENV_API_KEY = os.getenv("OPENAI_API_KEY")

3️⃣ 运行 Streamlit 应用

streamlit run app.py

Web Application

一旦点击 Browse files,即可上传 VPC Flow Log(.txt)并开始提问。

期待的内容

  • Upload a log file → 解析器将每行翻译成可读的句子。
  • Embedding 步骤为每个句子创建向量并将其存储在 ChromaDB 中。
  • Chat:输入自然语言查询;LangChain 获取最相关的向量,并将它们与系统提示一起发送给 GPT‑4o。
  • Response:LLM 返回简洁的答案,可选地突出显示相关的日志条目。

进一步阅读与资源

  • GitHub repository
  • Streamlit documentation
  • LangChain docs
  • ChromaDB
  • OpenAI embeddings

祝你玩得开心! 🎯

日志文件格式

日志文件为 TXT 格式。

构建知识库的步骤

  1. 选择 “构建知识库” – 这将在原始日志数据转换为向量后,将其存储到向量数据库中。

    Build Knowledge Base screen

  2. 向量数据创建 – 嵌入完成后,生成向量数据。

    Vector data view

  3. 索引创建 – 嵌入过程完成后,成功创建索引。

    Index creation screen

示例查询

基于流量接受和拒绝的日志摘要是什么?

Demo of query execution

交互式的其他示例查询

Nice examples of queries

最终结果

Final output screenshot

敬请关注我在云网络领域的更多 RAG 与生成式 AI 项目,阅读我的文章。我期待您的评论。

0 浏览
Back to Blog

相关文章

阅读更多 »

当工作成为心理健康风险时

markdown !Ravi Mishrahttps://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fu...