python日志分析

article/2025/8/20 23:35:34
日志分析

生产中会出现大量的系统日志、应用程序日志,安全日志等,通过贵日志的分析可以了解服务器的负载,健康状况,可以分析客户的分布情况、客户的行为,甚至基于这些分析可以做出预测。
一般采集流程:

  • 日志产出->采集(logstash、Flumen、Scribe)->存储->分析->存储(数据库、NoSQL)->可视化

开源实时日志分析ELK平台
Logstash收集日志,并存放到ElasticSearch集群中,Kibana则从ES集群中查询数据生成图表,返回游览器端

数据提取

半结构化数据
日志是半结构化数据,是有组织的、有格式的数据。可以分割成行和列,就可以当作表理解和处理了,当然也可以分析里面的数据。
文本分析
日志是文本文件,需要依赖文件IO、字符串操作、正则表达式等技术
通过这些技术就可以将日志需要的数据提取出来了
使用正则表达式

import re
s='''123.125.71.36 - - [06/Apr/2017:18:09:25 +0800] \
"GET / HTTP/1.1" 200 8642 "-" "|Mozilla/5.0 (compatible; \
Baiduspider/2.0; +http://www.baidu.com/search/spider.html)\"'''
pattern='''([\d.]{3,}) - - \[(.*)\] "(\w+) (\S+) (.*)" (\d+ \d+) "-" "(.*)"'''
regex=re.compile(pattern)
def extract(log:str):m=regex.match(log)if m:print(m.groups())
extract(s)

在这里插入图片描述
使用命名分组

import re
s='''123.125.71.36 - - [06/Apr/2017:18:09:25 +0800] \
"GET / HTTP/1.1" 200 8642 "-" "|Mozilla/5.0 (compatible; \
Baiduspider/2.0; +http://www.baidu.com/search/spider.html)\"'''
pattern='''(?P<ip>[\d.]{3,}) - - \[(?P<time>.*)\] "(\w+) (\S+) (.*)" (\d+ \d+) "-" "(?P<useragent>.*)"'''
regex=re.compile(pattern)
def extract(log:str):m=regex.match(log)if m:print(m.groups())print('ip :{}'.format(m.group('ip')),'time :{}'.format(m.group('time')),'useragent :{}'.format(m.group('useragent')),sep='    ')
extract(s)

在这里插入图片描述
使用上面的分组就能提取想要的所有的组,也就是我们想要的数据,为了方便可以使用命名分组
映射
对每一个字段命名,然后与值和类型转换的方法对应
最简单的方式,就是使用正则表达式分组

import re
s='''123.125.71.36 - - [06/Apr/2017:18:09:25 +0800] \
"GET / HTTP/1.1" 200 8642 "-" "|Mozilla/5.0 (compatible; \
Baiduspider/2.0; +http://www.baidu.com/search/spider.html)\"'''
pattern='''(?P<ip>[\d.]{3,}) - - \[(?P<time>.*)\] "(\w+) (\S+) (.*)" (\d+ \d+) "-" "(?P<useragent>.*)"'''
regex=re.compile(pattern)
#使用映射将得到的结果转换成需要的类型
con={'datetime':lambda time:datetime.datetime.strptime(time,"%d/%b/%Y:%H:%M:%S %z"),
}#这里举例只转换了时间
def c(long:str):m=regex.match(long)if m:return {k:con.get(k,lambda x: x)(v) for k,v in m.groupdict().items()}
print(c(s))

在这里插入图片描述

异常处理
日志中不免出现一些不匹配的行,需要处理,这里使用re.match方法,有可能匹配不上,需要加一个判断,采用抛出异常的方式,让调用者活的异常并自行处理

import re
s='''123.125.71.36 - - [06/Apr/2017:18:09:25 +0800] \
"GET / HTTP/1.1" 200 8642 "-" "|Mozilla/5.0 (compatible; \
Baiduspider/2.0; +http://www.baidu.com/search/spider.html)\"'''
pattern='''(?P<ip>[\d.]{3,}) - - \[(?P<time>.*)\] "(\w+) (\S+) (.*)" (\d+ \d+) "-" "(?P<useragent>.*)"'''
regex=re.compile(pattern)
con={'time':lambda time:datetime.datetime.strptime(time,"%d/%b/%Y:%H:%M:%S %z"),
}
def c(long:str):m=regex.match(long)if m:return {k:con.get(k,lambda x: x)(v) for k,v in m.groupdict().items()}#考虑匹配不到的情况else:#采用报错#raise Exception('No match. {}'.format(s))#采用返回特殊值return None
print(c(s))
def load(path):with open(path) as f:for line in f:

数据载入
对于本项目来说,数据就是日志的一行行记录,载入数据就是文件IO的读取,将获取的数据的防范封装成函数

def load(path):with open(path) as f:for line in f:fields=extract(line)if fields:yield fieldselse:continue

日志文件的加载
目前实现的代码中,只能接受一个路径,修改为接受一批路径。
可以约定一个路径下文件的存放形式:

  • 如果送来的是一批路径,就迭代其中路径。
  • 如果路径是一个普通的文件,就直接加载这个文件。
  • 如果路径是一个目录,就便利路径下所有指定类型的文件,每一个我呢见按照行处理,可以提供参数处理是否递归子目录
from pathlib import Path
def load(*paths,encoding='utf-8',ext='*.log',recursive=False):for x in paths:p=Path(x)#目录处理if p.is_dir():if isinstance(ext,str):ext=[ext]else:ext=list(ext)for e in ext:files=p.rglob(e)if recursiversive else p.glob(e)yield from loadfile(str(file.absolute()),encoding=encodingoding)elif p.is_file():yield from loadfile(str(file.absolute()),encoding=encodingoding)

完整代码

from pathlib import Path
import datetime
import re
pattern='''(?P<ip>[\d.]{3,}) - - \[(?P<time>.*)\] "(\w+) (\S+) (.*)" (\d+ \d+) "-" "(?P<useragent>.*)"'''
regex=re.compile(pattern)
conversion={"datetime":lambda timestr:datetime.datetime.strptime(timestr,'%d%b%Y:%H:%M:%S %z')
}
def extract(logline:str)->dict:"""返回字段的字典,如果返回None说明匹配失败"""m=regex.match(logline)if m:return {k:conversion.get(k,lambda x :x)(v)for k,v in m.groupdict().items()}else:return None #或输出日志记录
def loadfile(filename:str,encoding='utf-8'):"""装载日志文件"""with open(filename,encoding=encoding) as f :for line in f:fields=extract(lien)if fields:yield fieldselse:continue
from pathlib import Path
def load(*paths,encoding='utf-8',ext='*.log',recursive=False):"""装载日志文件"""for x in paths:p=Path(x)#目录处理if p.is_dir(): #处理目录if isinstance(ext,str):ext=[ext]else:ext=list(ext)for e in ext:files=p.rglob(e)if recursiversive else p.glob(e)yield from loadfile(str(file.absolute()),encoding=encodingoding)elif p.is_file():yield from loadfile(str(file.absolute()),encoding=encodingoding)

http://chatgpt.dhexx.cn/article/4KjCb0YJ.shtml

相关文章

日志分析工具

iis、windows日志做日志分析比较麻烦&#xff0c;这里找到了一款好用的免费的日志分析工具 Log Parser Lizard&#xff0c;下载这个工具之前建议先安装LogParser虽然他会自动弹窗提示。 1. 安装软件 安装没什么好说的一直下一步下一步就行 启动之后点击OK 弹出激活页面让激活…

redis日志分析

首先复习一下IO流&#xff1a; 关于读取文件&#xff1a; BufferedReader 从字符输入流中读取文本&#xff0c;缓冲各个字符&#xff0c;从而提供字符、数组和行的高效读取 InputStreamReader 字节流通向字符流的桥梁 以UTF-8编码读取 FileInputStream 从文件系统中的某…

【日志分析】Web日志分析

ox01 Web日志 Web访问日志记录了Web服务器接收处理请求及运行时错误等各种原始信息。通过对WEB日志进行的安全分析&#xff0c;不仅可以帮助我们定位攻击者&#xff0c;还可以帮助我们还原攻击路径&#xff0c;找到网站存在的安全漏洞并进行修复。 我们来看一条Apache的访问日…

日志分析方法概述

注&#xff1a;写得有点乱&#xff0c;但目前市面上这方面内容的确不多&#xff0c;mark一下~ http://blog.csdn.net/pkueecser/article/details/9569251 大数据应用--系统监控与日志分析 http://wenku.baidu.com/link?url8CJ-URMjVTVaw3GM1AZ2w9A7V0CIeRz3dx7xvysILLk6IdW…

日志分析软件

来源&#xff1a;http://onlyktt.blog.hexun.com/32563117_d.html 在经营管理亿枝客过程中&#xff0c;就遇到了非常多的困难。所以不断的学习知名与不知名互联网创业前辈留下来的经验特别重要&#xff0c;特别是上次与ZAC厦门交流后&#xff0c;以及拜读他写的《网络营销实践密…

简单的Web日志分析

Web日志分析 以apache为例 访问日志记录过程 apache日志大致分为两类&#xff1a;访问日志和错误日志 访问日志记录的过程&#xff1a; 客户端向web服务器发送请求&#xff0c;请求中包含客户端的IP、浏览器类型(User-Agent)、请示的URL等信息 web服务器向客户端返回请示的…

Window日志分析

0x01 Window事件日志简介 Windows系统日志是记录系统中硬件、软件和系统问题的信息&#xff0c;同时还可以监视系统中发生的事件。用户可以通过它来检查错误发生的原因&#xff0c;或者寻找受到攻击时攻击者留下的痕迹。 Windows主要有以下三类日志记录系统事件&#xff1a;应…

LOG日志详解

欢迎关注作者博客 简书传送门 文章目录 Log的用途记录Log的基本原则日志的级别划分日志对性能的影响什么时候输出日志系统启动参数、环境变量异常捕获处函数获得期望之外的结果时关键操作 日志输出的内容什么时候使用J2SE自带的日志 典型问题分析该用日志的地方不用啰嗦重复、没…

日志管理与分析

ISBN: 978-7-121-40632-4 编著&#xff1a;日志易学院 页数&#xff1a;198页 阅读时间&#xff1a;2022-09-25 推荐指数&#xff1a;★★★★☆ 本书是国产日志易团队按照主流的日志管理系统的实践来写的&#xff0c; 讲解了日志分析的基本概念、法律法规、技术选型、采集和解…

Linux日志分析

文章目录 一、系统日志介绍二、rsyslog管理三、实践1.将ssh服务日志单独存放2.远程日志3.排错 一、系统日志介绍 无论你的操作系统是 Windows 还是 Linux &#xff0c;只要使用操作系统&#xff0c;就都会产生日志。日志可以说记录了你在PC上的一切操作。就像小时候写的日记。…

日志分析方法

日志分析方法 日志分析方法分析方法&#xff1a; 1.特征字符分析&#xff08;Signature-based&#xff09;&#xff1a;2.访问频率分析&#xff08;Frequency analysis&#xff09; 1.漏洞扫描检测:2.暴力破解检测:3.webshell 检测 难点&#xff1a;风险评估模型&#xff1a;参…

【日志分析】Window日志分析

0x01 Window事件日志简介 Windows系统日志是记录系统中硬件、软件和系统问题的信息&#xff0c;同时还可以监视系统中发生的事件。用户可以通过它来检查错误发生的原因&#xff0c;或者寻找受到攻击时攻击者留下的痕迹。 Windows主要有以下三类日志记录系统事件&#xff1a;应…

日志分析篇---Web日志分析

日志分析篇—Web日志分析 文章目录 日志分析篇---Web日志分析一、 web日志二、日志分析技巧三、日志分析案例1、定位攻击源2、搜索相关日志记录3、对找到的访问日志进行解读&#xff0c;攻击者大致的访问路径如下&#xff1a; 四、日志统计分析技巧五、我的公众号 一、 web日志…

日志文件分析

文章目录 日志的功能日志文件的分类主要日志文件介绍内核以及系统日志日志记录的一般格式程序日志分析日志管理策略配置日志服务器收集日志journalctl日志管理工具 日志文件 日志的功能 &#xff1a; 用于记录系统、程序运行中发生的各种事件 通过阅读日志&#xff0c;有助于…

Windows安全日志分析

Windows安全日志分析 0x00 引言 在应急响应初步阶段&#xff0c;我们会对系统日志、中间件安全日志、恶意文件等进行收集。接下来便是要进一步对这些文件进行分析&#xff1a;对恶意文件逆向、日志文件分析、梳理入侵时间线和入侵路径等。本文主要对Windows安全日志进行举例分…

分析日志的流程

Web日志分析常见方法工具 1.编码 某web日志 URL 编码 BASE64编码 16进制编码&#xff08;以\x开头&#xff09; utf-8编码 字符集 Unicode&#xff08;以\u、\u、&#x、&#开头&#xff09;&#xff0c;gb2312&#xff0c;gbk 2.利用解码工具 http://www.mxcz.net/too…

spooling技术和通道及实现打印机共享

spooling技术的作用&#xff1a; 1、spooling技术的引入是为了 缓和高速CPU和低速I/O设备之间的矛盾 &#xff1b; 2、spooling技术能够允许多台外部设备进行联机并发操作&#xff0c; 实现虚拟性 &#xff1b; 在这个技术中用到了缓冲区和通道&#xff0c;缓冲区大家都…

假脱机技术Spooling和守护进程

文章目录 假脱机系统Spooling和守护进程1.假脱机技术的引入2.SPOOling系统的组成3.SPOOling系统的工作过程守护进程 假脱机系统Spooling和守护进程 1.假脱机技术的引入 脱机技术&#xff1a; 为了缓和CPU的高速性与IO设备的低速性间的矛盾&#xff0c;而引入了脱机输入&#…

【操作系统】SPOOLing技术(外部设备联机并行操作/假脱机技术)

SPOOling技术便可将一台物理I/O设备虚拟为多台逻辑I/O设备&#xff0c;同样允许多个用户共享一台物理I/O设备&#xff08;生活中最常见的就是多台电脑共享同一个打印机&#xff09; 目的&#xff1a;为了缓和CPU的高速性与I/O设备低速性之间的矛盾而引入了脱机输入/输出技术。…

操作系统~假脱机SPOOLing技术与缓冲区管理

文章目录 什么是脱机技术假脱机技术—―输入/输出缓冲区共享打印机的实现原理缓冲区的管理缓冲区的工作过程单缓冲双缓冲循环缓冲区缓冲池 什么是脱机技术 在传统的批处理操作系统中, 我们将输入数据统一写到磁带中, 又将输出数据统一写到磁带中, 这就是一种脱机技术 Tips:为…