【免费下载链接】Unsupervised-Log-Anomaly-Detection-Microservices
Unsupervised anomaly detection for microservice log data using Transformer embeddings, graph-based modeling, and ensemble scoring.
📌 本文带你走通 Unsupervised-Log-Anomaly-Detection-Microservices 项目的核心链路:如何从一份简单的 CSV 文件出发,构建微服务依赖图的邻接矩阵,并喂给 GAT 图注意力网络,完成无监督日志异常检测中的跨服务依赖建模。
为什么需要服务依赖图?
在微服务架构中,一次用户请求往往要经过网关、认证、订单、支付等多个服务。当某个服务出现 502、超时或限流时,异常可能沿着调用链扩散。
Unsupervised-Log-Anomaly-Detection-Microservices 正是针对这类场景的无监督日志异常检测框架:它用 Transformer 语义编码 + LSTM 时序编码 + 词频统计三路特征,经注意力门控融合后由 AutoEncoder 重建,再叠加 IsolationForest 与 GMM 动态阈值输出概率式异常分数。而服务依赖图则负责回答另一个问题——"哪些服务彼此耦合",为模型提供拓扑上下文。
第一步:准备服务调用边 CSV
依赖图的原始数据非常朴素,只需一个 CSV 文件,包含两列必填、一列可选:
| src_service | dst_service | weight |
|---|---|---|
| gateway | user | 120 |
| gateway | auth | 80 |
| orders | payment | 45 |
| orders | ship | 30 |
| user | inv | 10 |
src_service:调用方服务名dst_service:被调用方服务名weight:调用次数或权重,可省略,默认按 1.0 计
项目配置文件里通过service_metadata_csv字段指定该 CSV 的路径,例如 configs/advanced.yaml 中默认为data/service_edges.csv。
第二步:build_service_graph 如何把 CSV 变成邻接矩阵
核心逻辑集中在 src/data/graph_builder.py 的build_service_graph函数中,整个过程分三步。
1. 节点发现与索引映射
函数读取 CSV 后,取src_service与dst_service两列的并集作为节点集合,排序后建立"服务名 → 行号"的字典映射。这样即使某个服务只作为被调用方出现(比如数据库服务),也不会漏掉。
2. 邻接矩阵填充与权重累加
初始化一个 N×N 全零矩阵 A(N 为服务数量),逐行遍历 CSV:
- 若某行
gateway → user权重为 120,则A[gateway 行, user 列] += 120 - 同一对服务多次出现会自动累加,因此 CSV 中同一调用关系可以拆成多行记录
- 注意矩阵是有向的:
A[i, j]表示 i 调用 j,A[j, i]不共享这个值
3. 按行归一化:把邻接矩阵变成"注意力权重"
填完后每行除以自己的行和(加 1e-9 防止除零):
row_sums = A.sum(axis=1, keepdims=True) + 1e-9 A = A / row_sums归一化后,第 i 行恰好描述"服务 i 的出站流量流向各下游的比例分布"。函数最终返回三元组:
return A, idx, nodes # 归一化邻接矩阵, 名称→索引映射, 节点列表📎 需要日志模板提取(数字/十六进制替换为<*>占位符)时,由 src/data/parser.py 独立负责,与依赖图构建互不干扰。
第三步:邻接矩阵如何喂给 GAT 模型
构建好的矩阵最终流向 src/models/gnn_gat.py 的SimpleGATLayer。在多头注意力计算中,邻接矩阵作为密集掩码与注意力 logits 逐元素相乘:
- 存在调用关系的位置保留完整注意力得分
- 无调用关系的位置被掩码压制,从而限制信息只在真实依赖关系上流动
经过 2 层 GAT 堆叠 + 投影层后,每个服务节点都获得一个融合邻居拓扑信息的向量表示,再与日志语义特征一起进入融合与异常打分环节。
快速上手与文件速查
- 依赖安装(含 pandas、networkx、torch 等):
pip install -r requirements.txt,清单见 requirements.txt - 把你的调用边数据放到配置指定的
service_metadata_csv路径 - 运行训练与评估:
python src/train.py --config configs/advanced.yaml python src/evaluate.py --config configs/advanced.yaml| 关注点 | 文件位置 |
|---|---|
| 邻接矩阵构建 | src/data/graph_builder.py |
| GAT 图注意力层 | src/models/gnn_gat.py |
| 日志解析与模板化 | src/data/parser.py |
| 数据集与分词 | src/data/dataset.py |
| 融合与异常打分 | src/models/fusion.py、src/models/ensemble.py |
| 配置文件 | configs/base.yaml、configs/advanced.yaml |
常见坑位与排错清单
- 缺少列名:CSV 必须包含
src_service、dst_service两列,列名写错会直接抛KeyError - 矩阵是有向的:不要把
A[i,j]和A[j,i]混为一谈,前者表示 i 调用 j - 纯被调用方的行为:只出现在
dst_service列的服务,其对应行全为 0,归一化后仍为 0 行,属正常现象 - weight 省略的默认值:不写
weight列时每对边按 1.0 累加,等效于统计调用关系条数 - 服务数量即矩阵规模:矩阵是 N×N 稠密矩阵,几百个服务以内性能无忧;更大规模建议先聚合调用链
小结
从一份三列的 CSV 到可直接驱动 GAT 的归一化邻接矩阵,Unsupervised-Log-Anomaly-Detection-Microservices 只用了十余行代码:节点并集 → 权重累加 → 行归一化。理解了这条链路,你就掌握了服务依赖图构建的全部关键细节,也能为微服务日志异常检测的图建模部分打下扎实基础 🚀
【免费下载链接】Unsupervised-Log-Anomaly-Detection-Microservices
Unsupervised anomaly detection for microservice log data using Transformer embeddings, graph-based modeling, and ensemble scoring.
相关推荐
Kretes部署指南:3种简单方法将你的Deno应用上线生产环境
Kretes部署指南:3种简单方法将你的Deno应用上线生产环境 Kretes是专为TypeScript和Deno设计的编程环境,本指南将介绍3种简单方法帮助你
swift-algorithm-club 图解 Graph:用 Swift 实现邻接表与邻接矩阵两种图结构
swift algorithm club 图解 Graph:用 Swift 实现邻接表与邻接矩阵两种图结构 图(Graph)是计算机科学中最基础也最通用的数据结
示例工程教程图卷积网络完全指南:掌握邻接矩阵与特征矩阵的核心规范
图卷积网络完全指南:掌握邻接矩阵与特征矩阵的核心规范 想要深入理解图卷积网络(GCN)的工作原理?邻接矩阵和特征矩阵是构建图神经网络的两个关键数据结构。在 gh
图计算深度学习机器学习
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考