log-anomaly-detector (LAD)

log-anomaly-detector (LAD)

LAD是Red hat 开发的,一个基于机器学习的Log日志异常检测命令行工具

1. 安装

环境要求:python 3.6 或以上
直接安装会出错,为了避免后续的错误,需要预先安装以下几个依赖(后装的话会出错):

pip install git+https://github.com/compmonks/SOMPY.git
pip install ipdb
pip install tornado==5.1
pip install python-dateutil==2.8.0
pip install opentracing-instrumentation==3.2.1

然后安装LAD:
pip install log-anomaly-detector==0.0.2
安装需要几个小时,之前的版本使用UI Command时会有bug,作者在0.0.2版本中修复了

查看是否安装成功:
log-anomaly-detector --help

报错解决

  • 报错1:
    在这里插入图片描述
    issue里提了这个错误,作者表示这是因为他们采用了某个git commit当做依赖,这是个bug,需要该项目的作者解决。
    暂时只能采用这个解决办法
pip install git+https://github.com/compmonks/SOMPY.git
pip install ipdb
  • 报错2:
    在这里插入图片描述
    解决方法:
pip install tornado==5.1
pip install python-dateutil==2.8.0
pip uninstall opentracing-instrumentation
pip install opentracing-instrumentation==3.2.1

2. 示例

Command

参数及其用法(方括号中为可选参数):
log-anomaly-detector [main-options] <command> <subcommand> [subcommand-options] [parameters]

首先去github上clone整个项目
git clone https://github.com/AICoE/log-anomaly-detector.git
测试用例:

$ cd log-anomaly-detector

$ log-anomaly-detector run --config-yaml config_files/.env_cmn_log_fmt_config.yaml --single-run True

这里有个bug,需要修改 config_files/.env_cmn_log_fmt_config.yaml 文件的前两行为1行:

STORAGE_DATASOURCE: "local"

正常运行页面:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kRcJxUwO-1575949281468)(./1575527788493.png)]

UI Command:

参数及其用法(方括号中为可选参数):

export SQL_CONNECT="mysql+pymysql://{USERNAME}:{PASSWORD}@localhost/factstore"
export CUSTOMER_ID="test1"
log-anomaly-detector ui --port 8080 --debug True

实际用例:

export SQL_CONNECT="mysql+pymysql://root:123456@3.3.6.12/factstore" 
export CUSTOMER_ID="test1"
log-anomaly-detector --metric-port 8081 ui --port 9999

可以打开fact store(用来反馈false positive):
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qPwqFQSo-1575949281468)(./1575861528765.png)]
提交false positive成功:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t59CokMc-1575949281469)(./1575861557220.png)]

3. 结构

该框架由三个组件组成。

机器学习Core(LAD Core)
包含自定义代码以训练模型并预测日志行是否异常。目前只有无监督方法,基于W2V(Word2vec)和SOM(自组织图)。我们计划添加更多模型。 监控(指标)

指标 ( Metrics)
为了在生产中监控此系统,利用了grafanaprometheus来可视化此机器学习系统的运行状况。
grafana 是一款采用 go 语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具。
Prometheus 是一套开源的系统监控报警框架。

反馈回路(Fact Store)
有一个元数据注册中心,用于跟踪机器学习系统中来自false_positives的反馈,并提供一种用于ML自我校正错误预测的方法,称为 Fact Store。
在这里插入图片描述

4. Machine Learning Core

Language Encoding, Word2Vec

日志消息是可变长度的字符串,需要将它们转换为固定长度的向量表示,机器学习算法可以使用这些向量表示。这里使用了python gensim 包中的 Word2Vec,其具有将单词转换为数值向量的强大能力,可以保留其大部分语义。

SOM

自组织映射 ( self-organizing map, SOM ) 是一种无监督的学习算法,用于帮助我们量化日志的异常性。
SOM的工作原理
SOM是一个单层的神经网络,只有输入层和竞争层两层:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qbjwJH4l-1575949281470)(./1575947595582.png)]
竞争层的神经元采用竞争的方式激活,每个神经元有一个权值向量 w w w ,输入向量 x x x 会激活与之最接近的神经元,这个神经元叫做获胜神经元(winner)。
下图展示了 SOM 的训练过程。紫色区域表示训练数据的分布状况,白色网格表示从该分布中提取的当前训练数据的映射。首先,SOM 节点位于数据空间的任意位置,最接近训练数据的节点(黄色高亮部分)会被选中。它和网格中的邻近节点一样,朝训练数据移动。在多次迭代之后,网格倾向于近似该种数据分布(下图最右)。
在这里插入图片描述
最终的效果就是对数据进行了聚类,每个神经元代表一类。这一类所包含的数据,就是能够使它竞争获胜的那些数据。

训练计算过程
Step 1:与其他神经网络相同,需要将 W e i g h t s Weights Weights初始化为很小的随机数
Step 2:随机取一个 输入样本 X i X_i Xi
Step 3:遍历竞争层中每一个节点:计算 X i X_i Xi与节点之间的相似度(通常使用欧式距离),选取距离最小的节点作为优胜节点(winner node),有的时也叫BMU(best matching unit)
Step 4:根据邻域半径 σ σ σ(sigma)确定优胜邻域将包含的节点;并通过neighborhood function计算它们各自更新的幅度(基本思想是:越靠近优胜节点,更新幅度越大;越远离优胜节点,更新幅度越小)
Step 5:更新优胜邻域内节点的 W e i g h t Weight Weight
Step 6:完成一轮迭代(迭代次数+1),返回Step 2,直到满足设定的迭代次数

推理阶段,离最近的神经元结果较远的点是异常点,这里需要设定一个最长距离的阈值参数。

SOM的详细原理可参考:
https://www.zhihu.com/question/28046923
https://zhuanlan.zhihu.com/p/73534694

模型结构

通过W2V将log文本转换为数值向量,生成的向量输入SOM中,进行异常检测模型的训练和推理。

5.Metrics

Fact Store Metrics

用于查看Fact Store部署成功的指标。
在这里插入图片描述

Core Metrics

用于可视化正在运行的ML作业和发现false positives。
在这里插入图片描述

6. Storage

数据源(Source)和数据接收(Sink)可以有多种存储形式:
在这里插入图片描述

7. demo数据格式

项目里给了Local形式数据的例子
输入数据
分为两种:json和txt格式
json格式:
在这里插入图片描述

txt格式:常规 log 格式: timestamp severity message
在这里插入图片描述

输出数据
json格式:
在这里插入图片描述

8. 总结

该工具基于word2vec和SOM算法,可以实现对单条Log日志的异常检测。
总的来说项目较为完整,但其上线不久且用户不多,因此代码中尚存在一些Bug需要修改。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值