GROK函数

9 篇文章 0 订阅
5 篇文章 1 订阅

https://help.aliyun.com/document_detail/125480.html

GROK函数

更新时间:2019-09-16 16:44:28

编辑我的收藏

本文档主要介绍GROK函数的语法规则,包括参数解释、函数示例等。

由于正则表达式较为复杂,推荐您优先使用GROK函数。说明 您也可以将GROK函数与正则表达式函数混合使用,例如:

# 会匹配 abc: 192.168.1.1  或者 xyz: 192.168.2.2 等形式
e_match("content", grok(r"\w+: (%{IP})"))
# 不会匹配 abc: 192.168.1.1, 而是匹配\w+: 192.168.1.1
e_match("content", grok(r"\w+: (%{IP})", escape=True))
  • 功能介绍

    根据正则表达式提取特定的值。

  • 函数格式
    grok(pattern, escape=False, extend=None)
  • GROK语法
    %{SYNTAX} 
    %{SYNTAX:NAME}
    其中SYNTAX表示预定义正则模式,NAME表示分组。如下:
    "%{IP}"               # 等价于 r"(?:\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})"
    "%{IP:source_id}"     # 等价于 r"(?P<source_id>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})"
    ("%{IP}")             # 等价于 r"(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})"
    GROK模式中有些是自带命名分组捕获的,所以针对这种模式只能使用%{SYNTAX}这种方式的语法。此类模式常见于语句解析,例如:
    "%{SYSLOGBASE}"        
    "%{COMMONAPACHELOG}" 
    "%{COMBINEDAPACHELOG}"
    "%{HTTPD20_ERRORLOG}"
    "%{HTTPD24_ERRORLOG}"
    "%{HTTPD_ERRORLOG}"
    ...
    具体请参见GROK模式参考中的Log formats模块。此外,在GROK模式中有些是非捕获分组模式,例如:
    "%{INT}"    
    "%{YEAR}"
    "%{HOUR}"
    ...
  • 参数说明
     
    参数名称参数类型是否必填说明
    patternStringGROK语法。具体的GROK模式,请参见GROK模式参考
    escapeBool是否将其他非GROK pattern中的正则相关特殊字符做转义,默认不转义。
    extendDict用户自定义的GROK表达式。
  • 函数示例
    • 示例1:提取日期和引用内容。原始日志:
      content: 2019 June 24 "I am iron man"
      加工规则:
      e_regex('content',grok('%{YEAR:year} %{MONTH:month} %{MONTHDAY:day} %{QUOTEDSTRING:motto}'))
      加工结果:
      content: 2019 June 24 "I am iron man"
      year: 2019
      month: June
      day: 24
      motto: "I am iron man"
    • 示例2:提取http请求日志。原始日志:
      content: 55.3.244.1 GET /index.html 15824 0.043
      加工规则:
      e_regex('content',grok('%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}'))
      加工结果:
      content: 55.3.244.1 GET /index.html 15824 0.043
      client: 55.3.244.1
      method: GET
      request: /index.html
      bytes: 15824
      duration: 0.043
    • 示例3:提取Apache日志。原始日志:
      content: 127.0.0.1 - - [13/Apr/2015:17:22:03 +0800] "GET /router.php HTTP/1.1" 404 285 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.15.3 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"
      加工规则:
      e_regex('content',grok('%{COMBINEDAPACHELOG}'))
      加工结果:
      content: 127.0.0.1 - - [13/Apr/2015:17:22:03 +0800] "GET /router.php HTTP/1.1" 404 285 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.15.3 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"
      clientip: 127.0.0.1
      ident: -
      auth: -
      timestamp: 13/Apr/2015:17:22:03 +0800
      verb: GET
      request: /router.php
      httpversion: 1.1
      response: 404
      bytes: 285
      referrer: "-"
      agent: "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.15.3 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"
    • 示例4:Syslog默认格式日志。原始日志:
      content: May 29 16:37:11 sadness logger: hello world
      加工规则:
      e_regex('content',grok('%{SYSLOGBASE} %{DATA:message}'))
      加工结果:
      content: May 29 16:37:11 sadness logger: hello world
      timestamp: May 29 16:37:11
      logsource: sadness
      program: logger
      message: hello world
    • 示例5:转义特殊字符。原始日志:
      content: Nov  1 21:14:23 scorn kernel: pid 84558 (expect), uid 30206: exited on signal 3
      加工规则:
      e_regex('content',grok(r'%{SYSLOGBASE} pid %{NUMBER:pid} \(%{WORD:program}\), uid %{NUMBER:uid}: exited on signal %{NUMBER:signal}'))
      """因为包含了一个正则特殊字符 "(" 与 ")", 也可以这么写:"""
      e_regex('content',grok('%{SYSLOGBASE} pid %{NUMBER:pid} (%{WORD:program}), uid %{NUMBER:uid}: exited on signal %{NUMBER:signal}', escape=True))
      加工结果:
      content: Nov  1 21:14:23 scorn kernel: pid 84558 (expect), uid 30206: exited on signal 3
      timestamp: Nov  1 21:14:23
      logsource: scorn
      program: expect
      pid: 84558
      uid: 30206
      signal: 3
    • 示例6:用户自定义GROK表达式。原始日志:
      content: Beijing-1104,gary 25 "never quit"
      加工规则:
      e_regex('content',grok('%{ID:user_id},%{WORD:name} %{INT:age} %{QUOTEDSTRING:motto}',extend={'ID': '%{WORD}-%{INT}'}))
      加工结果:
      content: Beijing-1104,gary 25 "never quit"
      user_id: Beijing-1104
      name: gary
      age: 25
      motto: "never quit"

 上一篇:正则表达式函数

下一篇:特定结构化数据函数 

相关文档

相关产品

  • 日志服务

    日志服务(Log Service,简称 LOG)是针对日志类数据一站式服务,在阿里巴巴集团经历了大量大数据场景锤炼而成。用户无需开发就能快捷完成数据采集、消费、投递以及查询分析等功能,帮助提升运维、运营效率,建立 DT 时代海量日志处理能力。

  • 对象存储 OSS

    阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以通过调用 API,在任何应用、任何时间、任何地点上传和下载数据,也可以通过 Web 控制台对数据进行简单的管理。OSS 适合存放任意类型的文件,适合各种网站、开发企业及开发者使用。按实际容量付费真正使您专注于核心业务。

  • 云监控

    云监控(CloudMonitor) 是一项针

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值