欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

log-anomaly-detector (LAD)

发布时间:2024/3/12 编程问答 70 豆豆
生活随笔 收集整理的这篇文章主要介绍了 log-anomaly-detector (LAD) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

log-anomaly-detector (LAD)

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

文章目录

  • log-anomaly-detector (LAD)
    • 1. 安装
    • 2. 示例
      • Command
      • UI Command:
    • 3. 结构
    • 4. Machine Learning Core
      • Language Encoding, Word2Vec
      • SOM
      • 模型结构
    • 5.Metrics
      • Fact Store Metrics
      • Core Metrics
    • 6. Storage
    • 7. demo数据格式
    • 8. 总结

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"

正常运行页面:

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):

提交false positive成功:

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是一个单层的神经网络,只有输入层和竞争层两层:

竞争层的神经元采用竞争的方式激活,每个神经元有一个权值向量www ,输入向量 xxx 会激活与之最接近的神经元,这个神经元叫做获胜神经元(winner)。
下图展示了 SOM 的训练过程。紫色区域表示训练数据的分布状况,白色网格表示从该分布中提取的当前训练数据的映射。首先,SOM 节点位于数据空间的任意位置,最接近训练数据的节点(黄色高亮部分)会被选中。它和网格中的邻近节点一样,朝训练数据移动。在多次迭代之后,网格倾向于近似该种数据分布(下图最右)。

最终的效果就是对数据进行了聚类,每个神经元代表一类。这一类所包含的数据,就是能够使它竞争获胜的那些数据。

训练计算过程
Step 1:与其他神经网络相同,需要将WeightsWeightsWeights初始化为很小的随机数
Step 2:随机取一个 输入样本XiX_iXi
Step 3:遍历竞争层中每一个节点:计算XiX_iXi与节点之间的相似度(通常使用欧式距离),选取距离最小的节点作为优胜节点(winner node),有的时也叫BMU(best matching unit)
Step 4:根据邻域半径σσσ(sigma)确定优胜邻域将包含的节点;并通过neighborhood function计算它们各自更新的幅度(基本思想是:越靠近优胜节点,更新幅度越大;越远离优胜节点,更新幅度越小)
Step 5:更新优胜邻域内节点的WeightWeightWeight
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需要修改。

总结

以上是生活随笔为你收集整理的log-anomaly-detector (LAD)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。