Skip to main content

CncertAgent local WSS log cache, offline analysis, submission, and API adapter toolkit.

Project description

Fengyun AI Agent 本地 WSS 缓存与离线分析工具

该目录是独立实现。

目标

  • WSS 接收大量日志时优先本地落盘,避免在线分析拖慢接收。
  • SQLite WAL 保存结构化缓存,支持多进程读写。
  • JSONL 保存原始 WSS 消息和原始日志,便于灾备和复盘。
  • 告警与攻击链先进入本地 outbox,再由提交命令统一提交。

什么是 --dry-run

--dry-run 表示“试运行 / 演练模式”。

适用命令:

  • submit

开启 --dry-run 后会:

  • --status--kind--limit 等参数筛选本地待提交记录。
  • 打印将要提交的 payload,便于检查内容。
  • 不向远端服务端发送提交请求。
  • 不更新 submission_records 中的提交状态。
  • 不记录提交尝试。
  • 不写入 submitted_alerts.jsonl / submitted_chains.jsonl

例如:

python -m fengyun_ai_agent.cli submit --kind all --status failed --dry-run

含义是:从本地提交记录中找出 failed 状态的告警和攻击链,打印将要提交的 payload,但不实际提交、不改变本地提交状态。

命令总览

命令 用途 是否修改本地数据 是否提交到服务端
init-db 初始化 SQLite WAL 数据库
reset-db 删除并重建 SQLite 数据库 是,破坏性操作
status 查看本地缓存统计
team-status 查询远端队伍状态/比赛服务端收发进度 是,只读查询
receive 接收 WSS 日志并写入 JSONL + SQLite
import-sample-data 导入样例日志
import-raw-logs raw_logs.jsonl 回灌日志到 SQLite
analyze-alerts 分析日志并生成本地告警候选
analyze-chains 基于告警候选生成攻击链候选
submit 统一提交本地告警/攻击链 outbox 会更新提交状态 是,除非 --dry-run
show-log 打印本地日志原文
show-chain 打印本地攻击链日志列表

命令参考

所有命令都通过以下入口执行:

python -m fengyun_ai_agent.cli <command> [args]

init-db

初始化本地 SQLite 数据库,并启用 WAL 模式。

python -m fengyun_ai_agent.cli init-db

参数:无。

reset-db

删除并重建本地 SQLite 数据库。

python -m fengyun_ai_agent.cli reset-db --yes

参数:

参数 默认值 说明
--yes False 确认删除旧 SQLite 数据库;不提供会拒绝执行。

注意:这是破坏性操作,会删除:

  • fengyun_ai_agent/data/log_cache.sqlite3
  • fengyun_ai_agent/data/log_cache.sqlite3-wal
  • fengyun_ai_agent/data/log_cache.sqlite3-shm

不会删除 JSONL 原始备份文件。

status

查看本地缓存统计,输出 JSON 格式统计信息。

python -m fengyun_ai_agent.cli status

参数:无。

team-status

查询远端队伍状态,接口为 GET /api/v1/team/status。连接参数来自环境变量 GX_SERVERGX_TEAM_IDGX_TOKENGX_VERIFY_CERTGX_REQUEST_TIMEOUT

python -m fengyun_ai_agent.cli team-status
python -m fengyun_ai_agent.cli team-status --full
python -m fengyun_ai_agent.cli team-status --json

参数:

参数 类型 默认值 说明
--full flag False 打印所有阶段和播放次数的详细进度。
--json flag False 输出服务端原始 JSON;存在时忽略 --full

说明:该命令是只读远端查询,不写 SQLite、不写 JSONL、不提交 outbox。status 查看本地缓存统计,team-status 查看比赛服务端队伍进度。

receive

接收 WSS 日志流,写入 JSONL 原始备份和 SQLite 本地缓存。

python -m fengyun_ai_agent.cli receive
python -m fengyun_ai_agent.cli receive --max-batches 1

参数:

参数 类型 默认值 说明
--max-batches int 0 最多接收多少个 log_batch0 表示不限。

说明:该命令只负责接收和落盘,不做告警分析,也不提交到服务端。

import-sample-data

导入样例 JSON 日志到 SQLite。

python -m fengyun_ai_agent.cli import-sample-data
python -m fengyun_ai_agent.cli import-sample-data --data-dir data
python -m fengyun_ai_agent.cli import-sample-data --data-dir data --no-raw-backup

参数:

参数 类型 默认值 说明
--data-dir string data 样例数据目录。
--no-raw-backup flag False 只导入 SQLite,不追加写入 raw_messages.jsonl / raw_logs.jsonl

默认会同时追加写入 raw_messages.jsonlraw_logs.jsonl 原始备份。

import-raw-logs

从本地 raw_logs.jsonl 批量写入 SQLite,适合重置数据库后用原始日志备份恢复本地缓存。

python -m fengyun_ai_agent.cli import-raw-logs
python -m fengyun_ai_agent.cli import-raw-logs --path src/fengyun_ai_agent/data/raw_logs.jsonl
python -m fengyun_ai_agent.cli import-raw-logs --batch-size 500 --strict

参数:

参数 类型 默认值 说明
--path string 配置中的 RAW_LOGS_JSONL JSONL 文件路径。
--batch-size int 1000 每批写入 SQLite 的日志数量。
--strict flag False 遇到坏行立即失败;默认跳过坏行并打印统计。

该命令会初始化/迁移 SQLite schema,但不会删除旧数据库;如需干净重建,先执行 reset-db --yes

analyze-alerts

分析未处理日志,生成本地告警候选。

python -m fengyun_ai_agent.cli analyze-alerts
python -m fengyun_ai_agent.cli analyze-alerts --limit 100 --watch --sleep-seconds 5

参数:

参数 类型 默认值 说明
--limit int 1000 本轮最多分析多少条未处理日志。
--watch flag False 持续运行;有未分析日志时连续处理,空批时等待。
--sleep-seconds float 5.0 watch 模式空批等待秒数。
--max-rounds int 0 watch 模式最多执行多少轮;0 表示不限。
--max-idle-rounds int 0 watch 模式连续空批多少轮后退出;0 表示不限。

说明:该命令只生成本地告警候选,不直接提交到服务端。

analyze-chains

基于本地告警候选生成攻击链候选。

python -m fengyun_ai_agent.cli analyze-chains

说明:该命令只生成本地攻击链候选,不直接提交到服务端。

submit

统一提交本地 outbox。默认提交告警和攻击链中所有 pendingfailed 状态记录。

python -m fengyun_ai_agent.cli submit
python -m fengyun_ai_agent.cli submit --dry-run
python -m fengyun_ai_agent.cli submit --kind alert --status pending
python -m fengyun_ai_agent.cli submit --kind chain --status failed --limit 50
python -m fengyun_ai_agent.cli submit --kind all --status pending,failed
python -m fengyun_ai_agent.cli submit --kind alert,chain --status all --dry-run
python -m fengyun_ai_agent.cli submit --watch --sleep-seconds 4
python -m fengyun_ai_agent.cli submit --watch --sleep-seconds 4 --max-idle-rounds 10

参数:

参数 类型 默认值 可选值 说明
--kind string all alert / chain / all / 逗号分隔组合 控制提交告警、攻击链或两者。
--status string pending,failed pending / failed / submitted / all / 逗号分隔组合 控制提交哪些状态的 outbox。
--limit int 0 任意整数 每个 kind/status 组合最多提交多少条;0 或负数表示不限。
--dry-run flag False - 只打印 payload,不实际提交、不更新提交状态、不写 submitted JSONL。
--watch flag False - 持续运行;每轮扫描并提交新出现的 outbox。
--sleep-seconds float 5.0 任意非负数 watch 模式每轮提交后的等待秒数。
--max-rounds int 0 任意非负整数 watch 模式最多执行多少轮;0 表示不限。
--max-idle-rounds int 0 任意非负整数 watch 模式连续空轮多少次后退出;0 表示不限。

说明:submit 不会重新接收日志,也不会重新分析日志。真实提交时会先把本地已标黑但缺失 outbox 的日志、以及缺失 outbox 的攻击链同步到 submission_records--dry-run 只打印当前已有 outbox,不做同步。

常用失败重试流程:

python -m fengyun_ai_agent.cli submit --kind all --status failed --dry-run
python -m fengyun_ai_agent.cli submit --kind all --status failed

第一条先预览将要提交的内容;第二条才真正提交。

show-log

打印本地日志原文 JSON。

python -m fengyun_ai_agent.cli show-log WAF0000001

参数:

参数 类型 说明
log_id positional string 要查看的本地日志 ID。

show-chain

打印本地攻击链关联日志列表。

python -m fengyun_ai_agent.cli show-chain CHAIN_LOCAL_xxx

参数:

参数 类型 说明
chain_id positional string 要查看的本地攻击链 ID。

输出内容包括时间、日志源、日志 ID。

推荐使用流程

1. 初始化

python -m fengyun_ai_agent.cli init-db
python -m fengyun_ai_agent.cli status

2. 导入样例数据

python -m fengyun_ai_agent.cli import-sample-data --data-dir data

如果只想导入 SQLite,不追加 JSONL 备份:

python -m fengyun_ai_agent.cli import-sample-data --data-dir data --no-raw-backup

SQLite schema 和字段含义见:

src/fengyun_ai_agent/SQLITE_SCHEMA.md

3. 接收日志前查看远端队伍状态

python -m fengyun_ai_agent.cli team-status
python -m fengyun_ai_agent.cli team-status --full

4. 接收日志

python -m fengyun_ai_agent.cli receive

联调只接收一批:

python -m fengyun_ai_agent.cli receive --max-batches 1

5. 分析和提交

python -m fengyun_ai_agent.cli analyze-alerts --limit 10000

python -m fengyun_ai_agent.cli analyze-chains
python -m fengyun_ai_agent.cli submit --dry-run
python -m fengyun_ai_agent.cli submit

6. 复盘查询

python -m fengyun_ai_agent.cli show-log WAF0000001
python -m fengyun_ai_agent.cli show-chain CHAIN_LOCAL_xxx

常用环境变量

export GX_SERVER=https://172.17.35.21:18080
export GX_TEAM_ID=TEAM001
export GX_TOKEN=team001-demo-token
export GX_VERIFY_CERT=0
export TASK_DATA_DIR=./data

代码结构

  • config.py:环境变量、默认路径、接口 endpoint 和日志源映射。
  • db.py:SQLite 连接、初始化、轻量迁移和重置。
  • json_utils.py:JSON/JSONL 序列化、容错解析和原始备份写入。
  • repository.py:本地 SQLite 仓储主入口,负责日志入库/查询、攻击链元数据、payload 构造和 CLI/离线流程兼容导出。
  • submission_repository.pysubmission_records outbox、提交记录和重试状态。
  • analyze.py:本地黑日志分析和攻击链聚合入口。
  • api_repository.py:Flask 后端和前端 API 兼容适配层。
  • cli.py:命令行入口,包含 team-status、submit、show-log、show-chain 等 CLI 辅助命令。

重要说明

  • raw_messages.jsonlraw_logs.jsonl 是 append-only 原始备份,不会自动删除。
  • WSS 接收命令只做落盘,不做网络提交。
  • 每个命令单独打开 SQLite 连接,不要跨进程共享连接。
  • 第一版检测和攻击链逻辑是基线启发式,后续可以在 detectors.pyanalyze.py 中增强。

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fengyun_agent_task-0.1.2.tar.gz (3.0 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fengyun_agent_task-0.1.2-py3-none-any.whl (3.1 MB view details)

Uploaded Python 3

File details

Details for the file fengyun_agent_task-0.1.2.tar.gz.

File metadata

  • Download URL: fengyun_agent_task-0.1.2.tar.gz
  • Upload date:
  • Size: 3.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.4

File hashes

Hashes for fengyun_agent_task-0.1.2.tar.gz
Algorithm Hash digest
SHA256 fd58463e462d59cb1f797ed1a20f77e4792dbd9e072b9a2e81684098d6f9b2d8
MD5 7a6d21e0360becef1696abe1fc556809
BLAKE2b-256 e67195b5b6c976ed9acf0483ec06f3074c07bcf70cc316fb9348efdbf719bf50

See more details on using hashes here.

File details

Details for the file fengyun_agent_task-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for fengyun_agent_task-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 f6106fe5e27677867ecd206618bd01e8732c1c5f5e47447faf96fda96569e16d
MD5 4ae34705ea33b3c179abc9503519717b
BLAKE2b-256 929e0a16ba3aac7cabc707065436ad5b7100806d1caa62dfbdc7f35ed7a7027b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page