github开源项目介绍-使用pygrok轻松解析字符串(log, event..)

原创 2014年07月26日 17:32:52

        Pygrok是一个开源的Python字符串解析库,github地址:https://github.com/garyelephant/pygrok。正如其项目主页所述,它可以用来解析字符串形式的log, event等,将字符串中有用信息提取出来。这个字符串解析库支持正则表达式匹配,它提供了众多预定义的字符串匹配模式,既有正则表达式的超强匹配能力,又有简单的易用性。pygrok底层也是利用正则表达式实现的。








        使用pygrok只需要了解一个简单的接口grok_match(),一个简单的例子:

        我们的任务是从'gary is male, 25 years old and weighs 68.5kilograms'这样的字符串中获得“姓名”,“性别”,“年龄”,“体重”信息。

>>> import pygrok
>>> text = 'gary is male, 25 years old and weighs 68.5 kilograms'
>>> pattern = '%{WORD:name} is %{WORD:gender}, %{NUMBER:age} years old and weighs %{NUMBER:weight} kilograms'
>>> print pygrok.grok_match(text, pattern)
{'gender': 'male', 'age': '25', 'name': 'gary', 'weight': '68.5'}
        Pattern是为需要解析的字符串定义好的匹配模式,以使grok_match()知道如何进行匹配。

        WORD,NUMBER,是模式的名称。WORD代表要匹配的一个单词,相当于正则表达式的“\b\w+\b”,NUMBER代表要匹配的是一个数字(整数或包含小数点),相当于正则表达式的“(?<![0-9.+-])(?>[+-]?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+)))”。看起来有点晦涩复杂,但是一般使用时无需关注这些细节,只需要使用“NUMBER”来匹配数字即可,pygrok提供了多个通过模式名称即可明白其可匹配内容的模式,如“IP”,” QUOTEDSTRING”, “DATE”。看,多简单!!

        %{WORD:name}的意思是要匹配一个单词,这个单词提取出来后可以通过“name”引用。其他的类似。所以最后得到结果:{'gender': 'male', 'age': '25', 'name': 'gary','weight': '68.5'}



        这个例子太简单吗?来个高大上的,从nginxlog中获取domain, ip, timestamp, uripath, referrer, web browser:

>>> import pygrok

>>> text = 'edge.v.iask.com.edge.sinastorage.com 14.18.243.65 6.032s - [21/Jul/2014:16:00:02 +0800]' \
...     + ' "GET /edge.v.iask.com/125880034.hlv HTTP/1.0" 200 70528990 "-"' \
...     + ' "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)' \
...     + ' Chrome/36.0.1985.125 Safari/537.36"'

>>> pat = '%{HOST:host} %{IP:client_ip} %{NUMBER:delay}s - \[%{DATA:time_stamp}\]' \
...     + ' "%{WORD:verb} %{URIPATHPARAM:uri_path} HTTP/%{NUMBER:http_ver}" %{INT:http_status} %{INT:bytes} %{QS}' \
...     + ' %{QS:client}'

>>> m = pygrok.grok_match(text, pat)

>>> import pprint
>>> pprint.pprint(m, indent = 4)
{   'bytes': '70528990',
    'client': '"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36"',
    'client_ip': '14.18.243.65',
    'delay': '6.032',
    'host': 'edge.v.iask.com.edge.sinastorage.com',
    'http_status': '200',
    'http_ver': '1.0',
    'time_stamp': '21/Jul/2014:16:00:02 +0800',
    'uri_path': '/edge.v.iask.com/125880034.hlv',
    'verb': 'GET'
}

        这里又出现了几个模式:INT,匹配整形数字;IP,匹配ip v4或ipv6;HOST,匹配域名;URIPATHPARAM,匹配http://后面的url地址及参数。正如开始所说,既有正则表达式的超强匹配能力,又有简单的易用性。


(图片来源:http://kovshenin.com/2014/fail2ban-wordpress-nginx/)

(图片来源:http://www.greenleafheatingandcooling.com/high-efficiency/)



转载本文请注明作者和出处[Gary的影响力]http://garyelephant.me,请勿用于任何商业用途!
Author: Gary Gao( garygaowork[at]gmail.com) 关注互联网、分布式、高性能、NoSQL、自动化、软件团队

支持我的工作:  https://me.alipay.com/garygao




版权声明:本文为博主(微博@Gary的影响力)原创文章,未经博主允许不得转载。博客地址:http://garyelephant.me

如何使用github上的开源项目

以提交的一次开源代码为例,教会你步入开源的世界。 1,首先登陆到https://github.com平台上注册一个自己的账号,这个过程就不演示了 2,然后在左上部分输入一个开源项目的名字,...
  • u012889638
  • u012889638
  • 2015年10月13日 10:11
  • 3493

Github上100个经典开源Java项目 值得阅读学习

1. React Native 这个是 Facebook 在 React.js Conf 2015 大会上推出的基于 JavaScript 的开源框架 React Native, 该框架结合了 W...
  • woshizhhblog
  • woshizhhblog
  • 2016年11月28日 15:18
  • 5279

Android studio 使用github上的android开源项目

一般github上面的开源项目都会生成一个library(就是工具类库,可随意命名的),我们就是想要用里面的东西。 以开源项目https://github.com/liaohuqiu/android...
  • u014774589
  • u014774589
  • 2016年01月09日 18:20
  • 3031

如何在GitHub上发现优秀的开源项目

如果作为一名程序员,你连GitHub都没有听过或者用过的话,那真是太遗憾了。GitHub的使用可是程序员在职业生涯中的一项必备技能啊,最近在网上搜了一下,发现有好多童鞋都在提问GitHub的使用教程,...
  • shenjie12345678
  • shenjie12345678
  • 2016年10月30日 16:07
  • 10827

GitHub 上最火的开源项目

1JavaScript 运行环境 Napa.js https://github.com/Microsoft/napajs Star 6566 Napa.js 是微软开源的一...
  • LengendGrass
  • LengendGrass
  • 2017年11月17日 22:40
  • 149

Android Studio如何使用GitHub上的开源项目

转载请注明出处以SlidingMenu开源项目为例 去github上搜索SlidingMenu,找到自己喜欢的download到本地。 将download下来的压缩包解压,把解压出来的library重...
  • sin574
  • sin574
  • 2016年10月25日 14:31
  • 1522

GitHub上排名前100的优秀开源项目

iOS开源项目总结
  • u013673242
  • u013673242
  • 2016年04月20日 13:27
  • 8414

GitHub查找优秀的开源项目和一些资源福利

GitHub 我大概了解了,Git 也差不多会使用了,但是 还是搞不清 GitHub 如何帮助我的工作,怎么提升我的工作效率? GitHub 其中一个最重要的作用就是发现全世界最优秀的开源项目,...
  • swj524152416
  • swj524152416
  • 2016年10月31日 18:22
  • 9376

GitHub上的一些开源项目

Interactive-animation 描述:收集android上开源的酷炫的交互动画和视觉效果。 1.交互篇 2.视觉篇 交互篇 1.SlidingUpPanelL...
  • hechenghai
  • hechenghai
  • 2015年03月29日 10:27
  • 1819

2016最流行的开源项目及了解Github

这篇是我转载的 ,原文地址:原文地址 版权声明:本文为 stormzhang 原创文章,转载请务必注明出处! 目录(?)[+] 这两天 GitHub 对其官网进行了改版,紧接...
  • qq_27397109
  • qq_27397109
  • 2016年10月12日 12:04
  • 4138
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:github开源项目介绍-使用pygrok轻松解析字符串(log, event..)
举报原因:
原因补充:

(最多只允许输入30个字)