iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python正则捕获日志解析实例
  • 704
分享到

python正则捕获日志解析实例

正则实例日志 2023-01-31 02:01:51 704人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

   去年工作中的一个实例,觉得较有意思,由于实例需求较繁琐也不太典型,我只能稍作整理和修改后,和大家分享整个案例的需求以及我写脚本的思路和想法,希望对大家有参考的价值。      大概需求:主站有个js文件记录用户设备和IP信息以及在

   去年工作中的一个实例,觉得较有意思,由于实例需求较繁琐也不太典型,我只能稍作整理和修改后,和大家分享整个案例的需求以及我写脚本的思路和想法,希望对大家有参考的价值。  

   大概需求:主站有个js文件记录用户设备和IP信息以及在主页上一些操作和输入信息,这些数据写到Nginx日志里。需要每小时去分析一次上个小时日志(Nginx日志每小时做一次切割日志文件名如:click.master.com_access.log-2013102705),获取日志内相关信息按照规定格式写到以时间格式命名的文本并保存到相应目录中。

下面是实例:

日志格式为:(需获取标红的内容)

80.58.250.80 - - [28/Nov/2013:04:41:26 +0800] "GET /dj.gif?id=15904e7e858c438614266404a0b9e3Dc&dm=news.master.com&ul=Http%253A%252F%252Fnews.master.com%252Fsalon%252Fyuedu%252F&fs=1&tm=1385584886&os=WinXP&br=Firefox6.0&rf=http%253A%252F%252Fnews.master.com%252F&uid=1385584391326354&pt=BODY%3A0-DIV%3A1-DIV%3A1-DIV%3A0-DIV%3A1-DIV%3A0-UL%3A0-LI%3A3-A%3A0&tl=http%3A%2F%2Fnews.master.com%2Fstudy%2Fbilingual%2F1564112.shtml&co=%E8%82%AF%E5%B0%BC%E8%BF%AA%E9%81%87%E5%88%BA50%E5%B9%B4%EF%BC%9A%E7%89%B9%E5%B7%A5%E6%9B%9D%E5%85%89%E7%BB%86%E8%8A%82&HTTP/1.1" 200 46 "http://news.master.com/salon/yuedu/" "Mozilla/5.0 (windowsNT 5.1; rv:6.0) Gecko/20100101 Firefox/6.0"

wKioL1MnEfnxD7FPAAnkCfxCUKs349.jpg

根据参数dm(每条日志的dm有可能不一样)的值 取得路径为 /data/app/click.master.com/logs/dlogs/news.master.com/20131027/2013102705.log

(其中 /data/app/click.master.com/logs/dlogs/ 为固定路径,news.master.com为参数dm的值 ,20131027为当前时间的年月日,2013102705为上小时的年月日小时)

存文件的时候  文件的格式为:

tm #*# uid #*# os #*# br #*# ip #*# ul #*# pt #*# pm #*# tl #*# co

(注释:每个文本第一行为:tm #*# uid #*# os #*# br #*# ip #*# ul #*# pt #*# pm #*# tl #*# co)然后才添加解析后的信息。下列为解析后信息:

1385584886 #*# 1385584391326354 #*# WinXP #*# Firefox6.0 #*# 80.58.250.80 #*#http%253A%252F%252Fnews.master.com%252Fsalon%252Fyuedu%252F&fs=1 #*#BODY:0-DIV:1-DIV:1-DIV:0-DIV:1-DIV:0-UL:0-LI:3-A:0 #*#cddc3281aa7b73a83ac9b42ad08c34a7 #*#http://news.master.com/study/bilingual/1564112.shtml #*#肯尼迪遇刺50年:特工曝光细节

(注释:这是一行数据,数据以" #*# "隔开,依次顺序为:请求参数中的tm、uid、os、br、请求访问的ip、参数中的ul、pt、参数中pt的md5值、参数中tl的url反编码的值、参数中的co)

处理日志文件的时候,保存路径中的时间不是服务器的时间 ,是上一个小时的时间

   需求繁琐,我尽量描述这样大家在看脚本的时候能明白我的初衷和思路,也许能很好的了解脚本所有的方法。

   要做的事:

   1:获取日志内标红的数据(ipython模式正则捕获如下图)


wKiom1MnGLXyN3PYAAYoC-2T8OU375.jpg

wKioL1MnHSWR6jAaAADaDdNgD9Q442.jpg

   2:转换相关选项的md5和反编码值

   3:根据dm值和上个小时的年月日(如:20131027)(需要考虑凌晨零点几分的时对应的目录是昨天日期)找到相应目录,如不存在则创建

   4:新建以上小时格式命名的文本(如:20131027050)写入数据

下面是代码:

#!/usr/bin/Python
#coding:utf-8
"""
Logs parse and fORMat than write to the rigth dir
Author by Qfeian @20131130
"""
import os
import re
from urllib import unquote
import hashlib
import datetime
#from time import sleep
def hour(n=0):
    """Timeformat for hours the default is the current time """
    now = datetime.datetime.now()
    h = now + datetime.timedelta(hours=n)
    return h.strftime('%Y%m%d'), h.strftime('%Y%m%d%H')
def hash_str(str):
    """md5 encryption"""
    m = hashlib.md5()
    m.update(str)
    return m.hexdigest()
def unquote_str(str):
    """urldecode by unquote"""
    s = unquote(str)
    return s
def dir_query(str):
    """Check the dir if not exist create it """
    s = os.path.isdir(str)
    if not s:
        os.makedirs(str)
def path_query(paths,str):
    """如果第一次创建文本,则写入第一行内容"""
    s1 = os.path.isfile(paths)
    if not s1:
        f1 = open(paths,'a')
        f1.write(str)
        f1.close()
def main():
    log_dir = "/usr/local/nginx/logs/click.master.com_log/" #需要分析日志的路径
    S_dir = "/data/app/click.master.com/logs/dlogs/" #分析后日志保存路径
    str1 = "tm #*# uid #*# os #*# br #*# ip #*# ul #*# pt #*# pm #*# tl #*# co\n"
    """"format last hour  time """
    (D, H) = hour(-1)
    log_name = 'click.master.com_access.log-' + H  #上小时nginx日志文件
    log_path = os.path.join(log_dir, log_name)
    logfile = open(log_path, 'r')
    crg = re.compile(ur"(^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})"
                     ur".*&dm=(.*?)"
                     ur"&ul=(.*?)"
                     ur"&tm=(.*?)"
                     ur"&os=(.*?)"
                     ur"&br=(.*?)"
                     ur"&.*?&uid=(\d+)"
                     ur"&pt=(.*?)"
                     ur"&tl=(.*?)"
                     ur"&co=(.*?)&")
    for lines in logfile.readlines():
        """ check up on the  nginx logs by regular"""
        a = crg.findall(lines)
        """ if matching write to the logfile """
        if a:
            (ip, dm, ul, tm, OS, br, uid, pt, tl, co) = a[0]
            pt = unquote_str(pt)
            tl = unquote_str(tl)
            co = unquote_str(co)
            pm = hash_str(pt)
            s = "%s #*# %s #*# %s #*# %s #*# %s #*# %s #*# %s #*# %s #*# %s #*# %s\n" % \
                (tm, uid, OS, br, ip, ul, pt, pm, tl, co)
            W_log = os.path.join(S_dir, dm, D, H)
            W_log = W_log + '.log'
            W_dir = os.path.dirname(W_log)
            """ check  logdir and logpath"""
            dir_query(W_dir)
            path_query(W_log,str1)
            """ write logs """
            f = open(W_log, 'a')
            f.write(s)
#            print s
#            print dm, "\n"
#            sleep(1)
    f.close()
    logfile.close()
if __name__ == "__main__":
    main()


--结束END--

本文标题: python正则捕获日志解析实例

本文链接: https://www.lsjlt.com/news/186629.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python正则捕获日志解析实例
       去年工作中的一个实例,觉得较有意思,由于实例需求较繁琐也不太典型,我只能稍作整理和修改后,和大家分享整个案例的需求以及我写脚本的思路和想法,希望对大家有参考的价值。      大概需求:主站有个js文件记录用户设备和IP信息以及在...
    99+
    2023-01-31
    正则 实例 日志
  • python 正则分析nginx日志
      有个需求要分析nginx日志,也懒得去研究logstach之类的开源工具,干脆直接写一个脚本,自己根据需求来实现:先看日志格式:我们跟别人的不太一样,所以没办法了:12.195.166.35 [10/May/2015:14:38:09 ...
    99+
    2023-01-31
    正则 日志 python
  • python正则分析nginx的访问日志
    前言 本文的脚本是分析nginx的访问日志, 主要为了检查站点uri的访问次数的,检查的结果会提供给研发人员做参考,因为谈到分析嘛,那肯定要用到正则表达式了,所以请没有接触过正则的小伙伴自行补脑,因为涉及正...
    99+
    2022-06-04
    正则 日志 python
  • ELK 5.0.1+Filebeat5.0.1实时监控MongoDB日志并使用正则解析mongodb日志的示例分析
    ELK 5.0.1+Filebeat5.0.1实时监控MongoDB日志并使用正则解析mongodb日志的示例分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴...
    99+
    2022-10-18
  • JavaScript正则表达式之非捕获性分组的示例分析
    这篇文章主要介绍了JavaScript正则表达式之非捕获性分组的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。非捕获性分组定义子表达...
    99+
    2022-10-19
  • Python正则re.compile实例分析
    今天小编给大家分享一下Python正则re.compile实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、re.c...
    99+
    2023-07-02
  • Python正则简单实例分析
    本文实例讲述了Python正则简单用法。分享给大家供大家参考,具体如下: 悄悄打入公司内部UED的一个Python爱好者小众群,前两天一位牛人发了条消息: 小的测试题: re.split('(W+)',...
    99+
    2022-06-04
    正则 实例 简单
  • python打印日志实例分析
    这篇“python打印日志实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python打印日志实例分析”文章吧。一、必...
    99+
    2023-07-02
  • Python正则表达式实例分析
    这篇“Python正则表达式实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python正则表达式实例分析”文章吧。一...
    99+
    2023-06-29
  • Linux pstore实现自动“抓捕”内核崩溃日志实例分析
    今天就跟大家聊聊有关Linux pstore实现自动“抓捕”内核崩溃日志实例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。简介pstore文件系统(是的,这是个文件系统)是Per...
    99+
    2023-06-16
  • JavaScript正则表达式中g标志实例分析
    本篇内容主要讲解“JavaScript正则表达式中g标志实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript正则表达式中g标志实例分析”吧!有一天在思否社区看到有个问题,大...
    99+
    2023-06-29
  • Python正则表达式使用实例分析
    这篇文章主要介绍“Python正则表达式使用实例分析”,在日常操作中,相信很多人在Python正则表达式使用实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python正则表达式使用实例分析”的疑惑有所...
    99+
    2023-06-08
  • 常见的python正则用法实例讲解
    下面列出Python正则表达式的几种匹配用法: 此外,关于正则的一切http://deerchao.net/tutorials/regex/regex.htm 1.测试正则表达式是否匹配字符串的全部或部分...
    99+
    2022-06-04
    正则 实例 常见
  • Spark网站日志过滤分析实例讲解
    目录日志过滤日志分析日志过滤 对于一个网站日志,首先要对它进行过滤,删除一些不必要的信息,我们通过scala语言来实现,清洗代码如下,代码要通过别的软件打包为jar包,此次实验所用需...
    99+
    2023-02-01
    Spark日志分析 Spark日志过滤
  • Python之正则表达式常用语法实例分析
    正则表达式概述正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。 Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。 re 模块使 Python 语言拥有全部的正则表达式功...
    99+
    2023-05-14
    Python
  • Python实现日志实时监测的示例详解
    目录介绍观察者模式类图观察者模式示例1、创建订阅者类2、创建发布者类3、应用客户端-Map_server_client.py4、测试介绍 观察者模式:是一种行为型设计模式。主要关注的...
    99+
    2022-11-10
  • 实时日志解析器:Java和Apache的典型示例
    日志解析器是一个常用的工具,它可以从大量的日志数据中提取有用的信息。在实时应用场景中,需要快速处理大量的日志数据,以便及时发现问题并采取措施。本文介绍了一个实时日志解析器的典型示例,使用Java和Apache的相关技术实现。 实时日志解...
    99+
    2023-07-26
    apache 日志 实时
  • Python正则表达式中flags参数的实例详解
    目录flags参数忽略大小写多行模式匹配任何字符补充:正则表达式中的flags总结flags参数 re.I    IGNORECASE    ...
    99+
    2022-11-13
  • python正则表达式查找和替换内容的实例详解
    1、编写Python正则表达式字符串s。 2、使用re.compile将正则表达式编译成正则对象Patternp。 3、正则对象p调用p.search或p.findall或p.fin...
    99+
    2022-11-12
  • python 根据正则表达式提取指定的内容实例详解
    python 根据正则表达式提取指定的内容 正则表达式是极其强大的,利用正则表达式来提取想要的内容是很方便的事。 下面演示了在python里,通过正则表达式来提取符合要求的内容。 实例代码: i...
    99+
    2022-06-04
    详解 实例 内容
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作