• 【运维心得】如何进行应用日志分析?


    目录

    为什么要进行分析?

    什么是时序数据库?

    分析结果这么用可以吗?

    部分代码(python)


    为什么要进行分析?

    时间如梭,转眼炎热的8月份就过去了,全国4亿人都体会到了汗蒸和煎炸,这几天的凉爽,才使得我能够静下心来写一点儿东西。

    如标题所示,不知道别人是怎么使用应用日志进行分析的。我们目前对于日志的分析,也主要是用来查错的,如果没有应用报错,基本上也不会去查这些应用日志。但上次看到一篇介绍时序数据库的文章,个人认为,其实应用日志也属于时序数据库的一种。

    那么对于应用日志的分析,就有实际的意义了。

    比如:在一个地点连续几天平均气温。在过去的几十年里,平均气温一直被用于建筑节能的主要参考因素。在任意一周里,同一地点每天的平均气温可能只是略有不同,但在同一时间内,影响环境的因素可能发生了巨大变化。相反,了解一天中每个小时的温度变化,加上这段时间的降水量、云量和风速,可以极大地提高物业建模和优化能源效率的能力。

    再比如:如果我给你10元钱,银行传统的数据库会在我的账户上有一笔支出,在你的账户上有一笔收。然后,如果你给我10元钱,同样的过程反过来进行。最后,我们的银行余额看起来还是一样的,对于银行而言,这个月没什么变化。但是,有了时序数据库后,银行会感知到,这两个人一直互转10元钱,可能有更深层次的原因。

    什么是时序数据库?

    时序数据库(Time Series Database)并不是一个新兴的概念。追溯其历史,1999 年问世的 RRDtool 应该是最早的专用时序数据库了。在著名的数据库排行网站 DB-engines 上面,时序数据库的逐步流行起始于 2015 年,而在过去的两年,时序数据库成为流行度最高的数据库。

    为了便于理解,一般都是找共同点,下面就是时序数据库的一些共同点:

    1. 写入的数据几乎是新数据

    2. 数据通常按时间顺序写入

    3. 时间是一个主轴(时间间隔可以是规则的,也可以是不规则的)

    当然,时序数据库作为数据库的一个重要分支,绝不是这几句话可以讲清楚的,有兴趣可以去查找相关的资料学习,这里就不搬砖了。

    分析结果这么用可以吗?

    平时更喜欢结合实际情况做一些实验,这次实验的素材就是生产上的nginx日志,虽然并不能算严格的时序数据库,但还是希望通过这些日志的分析,找到一些规律,或者发现一些未知的问题。标题用了疑问句,其实也是自己在探索。

    话不多说,先上几张图,这是连续5天的日志分析后的词云图:

    是不是看上去都差不多?中间的分析过程,由于涉及到隐私,就不在这里详述,只说一个纯技术的结论:

    1 这些重复的词,基本7×24,包括周末也是类似的,都是拦截一些链接产生的,说明是程序在刷后台的应用接口。但是这些链接并不能带来什么有效的流量,反正是资源的一种浪费,所以建议除了拦截并记录之外,可以考虑进行一定的人类识别功能,屏蔽一些无效的请求。

    2 当然,第1点是很难做到,第二种方案就是把这些流量能转换成有效流量, 变堵塞为疏导。

    3 减少这些无效日志的产生,可以将日志大小缩小至少一半,对后期分析和存储都有好处,毕竟在全球缺电的大环境下,这也是低碳的一种方式。

    部分代码(python)

    贴一些python代码,也是学习了别人很多的代码,算是抛砖引玉吧。

    1. from wordcloud import WordCloud
    2. import matplotlib.pyplot as plt
    3. import jieba
    4. import jieba.analyse
    5. import os
    6. #生成词云
    7. def create_word_cloud(filename):
    8. text = open(filename,"r",encoding='UTF-8').read()
    9. allow_pos = ('n','nr','ns','v','a')
    10. wordlist = jieba.analyse.extract_tags(text,topK=30000, withWeight=False, allowPOS=allow_pos) # jieba分词
    11. wl = " ".join(wordlist)
    12. return wl
    13. def show_word_cloud(wordlist):
    14. # 设置词云
    15. wc = WordCloud(
    16. # 设置背景颜色
    17. background_color="white",
    18. # 设置最大显示的词云数
    19. max_words=2000,
    20. # 这种字体都在电脑字体中,一般路径
    21. font_path='C:\Windows\Fonts\simfang.ttf',
    22. height= 1200,
    23. width= 1600,
    24. # 设置字体最大值
    25. max_font_size=100,
    26. # 设置有多少种随机生成状态,即有多少种配色方案
    27. random_state=30,
    28. )
    29. myword = wc.generate(wordlist) # 生成词云
    30. # 展示词云图
    31. plt.imshow(myword)
    32. plt.axis("off")
    33. plt.show()
    34. wc.to_file('××××××.png') # 把词云保存下
    35. if __name__ == '__main__':
    36. # 设置文件遍历目录,一般当天日志会有很多文件,可以循环遍历
    37. rootpath="X:\\目录"
    38. for dirpath, dirnames, filenames in os.walk(rootpath):
    39. for filename in filenames:
    40. singleFile=os.path.join(dirpath, filename)
    41. print(singleFile)
    42. wl=create_word_cloud(singleFile)
    43. show_word_cloud(wl)

  • 相关阅读:
    【Transformers】第 6 章:用于标记分类的微调语言模型
    密码学消息鉴别
    KDE算法解析
    Lua04——基本语法
    【Java面试】什么是IO的多路复用机制?
    布线前,布局这步极为关键!分享一些PCB设计布线注意要点
    MySQL 入门教程
    在代码评审中用好这7招,很容易就能建立起你的反对同盟
    Java的日期与时间之java.time.Instant简介说明
    vue el-dialog封装成子组件(组件化)
  • 原文地址:https://blog.csdn.net/hehuii/article/details/126660673