共计 3063 个字符,预计需要花费 8 分钟才能阅读完成。
简介: 封神 - 运维大脑 | 日志检测工具
1. 背景指标
阿里云利用业务有问题,云平台监控能够发现问题,但并不能定位到问题根本原因,运维大脑监控底层日志,可疾速定位问题起因,帮忙现场运维同学解决问题。
运维大脑交融 SRE 办法,专一于深度运维的技术服务畛域,帮忙客户与现场,加强租户视角运维监控能力、晋升平台视角问题定位效率、增强双维度容量性能经营能力。稀释 TAM 现场运维教训,多样化地、标准化地、智能化地向客户输入运维能力与技术服务。
2. 开发设计
图 1:流程图
2.1 日志配置
如图 2 所示,可通过运维大脑前端页面配置须要监控的日志,可独自新增也可批量导入。配置信息包含产品、服务、服务角色、日志类型(DOCKER 物理机 VM)、日志门路、监控周期、算法(ML-TOP ML-CP ML-KEY)、状态(开启敞开)。
图 2:日志配置
2.2 日志训练
前端配置日志信息存储到后盾数据库,后台程序通过产品、服务、服务角色等条件查问相应的主机名。
图 3:数据库
定时工作启动,依据获取到的主机名通过 PSSH 命令下发训练脚本到各个机器上。下发前判断各台机器是否已存在训练脚本,如果脚本已存在,则进行下发命令。
图 4:pssh
训练脚本开始工作:首先读取日志,通过正则进行英文分词(英文文本可通过 NLTK 库分词,中文文本可通过 JIEBA 分词进行切分,在这里抉择最简略的 PYTHON 自带的 RE 模块依据特殊符号进行切分),统计总词数,并计算每个单词的词频。按词频排序将单词以二进制模式写入 TOP 模型文件,词频写入 CP 模型文件,如图 5 所示。
正告:文件命名最好以服务角色 + 文件门路的形式命令,否则在后续读取的时候可能会抵触。
图 5:文件命名
2.3 日志剖析
定时工作启动,同训练过程初始化一样,首先判断各台机器是否存在剖析脚本,如若不存在,进行下发命令。
剖析脚本开始工作:首先读取日志,区别于日志训练,剖析脚本会依据前端配置的监控周期进行选取(比方监控周期为 30 分钟,则剖析脚本会选取以后工夫至 30 分钟之前的日志进行剖析)。同训练脚本一样,读取日志后,进行文本分词,计算词数,统计词频。读取模型文件,依据不同的算法(算法这块在文章第三局部会独自进行讲述),计算算法权重值。对算法权重值进行阈值判断,超过阈值,会判断日志异样信息并从日志文件获取。剖析完结,最初把产品、服务、服务角色、日志文件、日志级别(ERRORINFO)、算法值、日志谬误详情、监控工夫等监控数据进行入库,并在前端页面进行展现,如图 6 所示。
图 6:日志剖析
2.4 模型优化
训练模型初始化的弊病在于无奈手动去打标签(失常异样),所以对于初始化后的模型文件必定不能是一个齐全失常的模型,须要后续一直的去优化。
定时工作启动:还是一样的流程,实现读取文件、分词等工作后,生成的模型文件与源模型文件比照,比照办法与算法雷同,阈值比剖析阈值更低,低于阈值后,单词词频字典进行合并,按秩序排序后别离写入源模型文件。至此,整个日志过程实现闭环操作。
2.5 日志巡检
日志巡检是对本身零碎运行状况的监控,盘绕整个闭环操作。日志训练、剖析、模型优化通过定时工作去驱动,日志巡检对每一步操作过程进行胜利判断,并对异样的操作进行起因剖析,相干数据存储入库,并在前端进行展现,如图 7 所示。
图 7:日志巡检
3. 算法逻辑
运维大脑所开发的算法借鉴了贝叶斯和文本类似度两大算法,以传统的自然语言解决形式对文本进行剖析。
3.1 分词形式两种罕用形式:结巴分词 和 nltk 库分词
结巴分词实用于中文分词,分词原理为:
①基于 Trie 树结构实现高效的词图扫描,生成句子中汉字所有可能成词状况所形成的有向无环图(DAG)。
②采纳动静布局查找最大概率门路, 找出基于词频的最大切分组合。
③对于未登录词,采纳了基于汉字成词能力的 HMM 模型,应用了 Viterbi 算法
nltk 库只能用于英文分词,除此以外还可用于词性标注和文本剖析。
集体认为英文分词以空格或局部特殊符号进行切分即可:re.split()。
3.2 TF-IDF
TF-IDF 是 Term Frequency-Inverse Document Frequency 的缩写,即词频 - 逆文档频率,用来刻画一个词语在某篇文档中重要水平,也就是说是否能够用该词语来代表某篇文档的次要内容。
TF 示意词频。给定几个关键词,在某篇文档中呈现的次数最高者,则阐明该文档与呈现次数最高的词语关系最亲密。用词语呈现的次数除以文档的总词汇数,就是 TF,当然此处在统计文档总词汇时,把相似于“了”、“的”、“地”、“即”等词语排除在外不予考虑。引入词频后,则某个词的词频越高,该文档与其关系也就越大。
TF 计算公式为:TF = 词语在文档中呈现的次数 / 文档词语次数
IDF 示意逆文档频率。如果一个词语在某篇文档中呈现的 TF 高,然而在语料库的其它文档中呈现的次数少,则阐明该词语对于文档分类具备重要作用,因而引入 IDF 来刻画此项数据,其值越大,阐明该词语对于语料库来说具备越好的辨别能力。如果某个词语在每篇文档里均呈现,且呈现的次数很靠近,则该词语用来辨别文档时成果便不好。
IDF 计算公式为:IDF = log(语料库文档总数 / 蕴含某词语的文档数 +1)
- TF-IDF 值越大阐明某个词语用类辨认文档的区分度便越大。
- TF-IDF 计算公式为:TF * IDF
3.3 文本类似度
Latent Semantic Indexing(LSI)从文本潜在的主题进行剖析。LSI 是概率主题模型的一种,另一种常见的是 LDA,核心思想是:每篇文本中有多个概率分布不同的主题;每个主题中都蕴含所有已知词,然而这些词在不同主题中的概率分布不同。LSI 通过奇怪值合成的办法计算出文本中各个主题的概率分布,严格的数学证实须要看相干论文。假如有 5 个主题,那么通过 LSI 模型,文本向量就能够降到 5 维,每个重量示意对应主题的权重。
可参考文后材料 [1] 理解详情。
总结下文本类似度和贝叶斯算法的处理过程:
- ML-LSI
①应用 nltk 库分词将日志文本切割。
②建设词袋模型。
③建设 TF-IDF 模型。
④构建一个 query 文本,确认主题,利用词袋模型的字典将其映射到向量空间。
⑤构建 LSI 模型,设置主题数为 2(ERROR、INFO)。
⑥计算文本类似度。 - ML-BAYES
①应用 nltk 库分词将日志文本切割。
②对解决之后的文本开始用 TF-IDF 算法进行单词权值的计算。
③去掉停用词。
④贝叶斯预测品种。
运维大脑日志剖析算法包含:
- ML-TOP
weight = x * w
x : 验证集 top10 新呈现个数
w : 单个词权重值 0.1 - ML-CP
weight = x / w
x : 词频变动超过 0.02 数
w : 词频变动总数 - ML-KEY
weight = x / w
x:关键词日志行数
w:日志总行数 - ML-NUM
weight = x * w
x:异样日志行数
w:0.1
开发思路:
①获取日志 k:v 求 v 平均值 报错 num 模型。
②比照新日志 v 值。
4. 总结
本期给大家介绍了封神零碎运维大脑模块的相干常识,分享了机器学习中两个罕用的文本剖析算法。目前运维大脑所能达到的成果是能够把日志中报错进行辨认并展现,然而咱们的最终目标是能够辨认出故障,尽管一般的报错可能对平台并没有太大的影响,然而频繁的报警并不利于运维工作的发展。
对于运维大脑临时就介绍这么多,以后也的确存在肯定问题,待后续欠缺后会再跟大家介绍,而后如果同学有更好的算法或者思路,欢送探讨!
接下来的文章会陆续给大家介绍封神的其余模块,包含实时告警、运维大盘、报表剖析、数据网关、妲己纣王、时序数据库等相干常识,敬请期待!
原文链接
本文为阿里云原创内容,未经容许不得转载。