当前位置: 首页 > news >正文

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

目录

为什么要进行分析?

什么是时序数据库?

分析结果这么用可以吗?

部分代码(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代码,也是学习了别人很多的代码,算是抛砖引玉吧。

from wordcloud import WordCloud
import matplotlib.pyplot as plt
import jieba
import jieba.analyse
import os
 
#生成词云
def create_word_cloud(filename):
    text = open(filename,"r",encoding='UTF-8').read()
    allow_pos = ('n','nr','ns','v','a')
    wordlist = jieba.analyse.extract_tags(text,topK=30000, withWeight=False, allowPOS=allow_pos)  # jieba分词
    wl = " ".join(wordlist)
    return wl
 
def show_word_cloud(wordlist):
    # 设置词云
    wc = WordCloud(
        # 设置背景颜色
       background_color="white",
         # 设置最大显示的词云数
       max_words=2000,
         # 这种字体都在电脑字体中,一般路径
       font_path='C:\Windows\Fonts\simfang.ttf',
       height= 1200,
       width= 1600,
        # 设置字体最大值
       max_font_size=100,
     # 设置有多少种随机生成状态,即有多少种配色方案
       random_state=30,
    )
 
    myword = wc.generate(wordlist)  # 生成词云
    # 展示词云图
    plt.imshow(myword)
    plt.axis("off")
    plt.show()
    wc.to_file('××××××.png')  # 把词云保存下
 
if __name__ == '__main__':
    # 设置文件遍历目录,一般当天日志会有很多文件,可以循环遍历
    rootpath="X:\\目录"

    for dirpath, dirnames, filenames in os.walk(rootpath):
        for filename in filenames:
            singleFile=os.path.join(dirpath, filename)
            print(singleFile)
            wl=create_word_cloud(singleFile)
    show_word_cloud(wl)

相关文章:

  • 金融行业分布式数据库选型及实践经验
  • 某保险企业容器云 PaaS 平台实践经验分享
  • 贝叶斯分类器详解
  • Python和PHP有什么区别
  • 精品基于Uniapp+SSM实现的Android的餐饮管理系统
  • Docker中安装Redis
  • 糖尿病患者怎样养成良好习惯
  • 学习笔记:基于GMM的语音转换
  • Git基本应用<二>:Git的分支管理
  • 电商系统中的掉单问题
  • CONV1D卷积神经网络运算过程(举例:n行3列➡n行6列)
  • 数据结构c语言版第二版(严蔚敏)第一章练习
  • python练习Ⅱ--函数
  • 3D多模态成像市场现状及未来发展趋势分析
  • vscode 1.71变化与关注点(多配置预设/旧合并器回归等)
  • Docker: 容器互访的三种方式
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • Redis 懒删除(lazy free)简史
  • SpriteKit 技巧之添加背景图片
  • Vue 动态创建 component
  • 深度学习在携程攻略社区的应用
  • 小试R空间处理新库sf
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 《天龙八部3D》Unity技术方案揭秘
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • #1015 : KMP算法
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (力扣题库)跳跃游戏II(c++)
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转)jQuery 基础
  • (转载)从 Java 代码到 Java 堆
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .Net 6.0 处理跨域的方式
  • .net core 6 redis操作类
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .net2005怎么读string形的xml,不是xml文件。
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • @SuppressWarnings注解
  • [2016.7 Day.4] T1 游戏 [正解:二分图 偏解:奇葩贪心+模拟?(不知如何称呼不过居然比std还快)]
  • [c]扫雷
  • [C++]C++基础知识概述
  • [IE编程] 了解Urlmon.dll和Wininet.dll
  • [javaSE] 看知乎学习工厂模式
  • [JS]变量
  • [LeetCode]—Permutations II 求全排列(有重复值)