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
表示分组。如下:
GROK模式中有些是自带命名分组捕获的,所以针对这种模式只能使用"%{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})"
%{SYNTAX}
这种方式的语法。此类模式常见于语句解析,例如:
具体请参见GROK模式参考中的Log formats模块。此外,在GROK模式中有些是非捕获分组模式,例如:"%{SYSLOGBASE}" "%{COMMONAPACHELOG}" "%{COMBINEDAPACHELOG}" "%{HTTPD20_ERRORLOG}" "%{HTTPD24_ERRORLOG}" "%{HTTPD_ERRORLOG}" ...
"%{INT}" "%{YEAR}" "%{HOUR}" ...
- 参数说明
参数名称 参数类型 是否必填 说明 pattern String 是 GROK语法。具体的GROK模式,请参见GROK模式参考。 escape Bool 否 是否将其他非GROK pattern中的正则相关特殊字符做转义,默认不转义。 extend Dict 否 用户自定义的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"
- 示例1:提取日期和引用内容。原始日志:
相关文档
相关产品
- 日志服务
日志服务(Log Service,简称 LOG)是针对日志类数据一站式服务,在阿里巴巴集团经历了大量大数据场景锤炼而成。用户无需开发就能快捷完成数据采集、消费、投递以及查询分析等功能,帮助提升运维、运营效率,建立 DT 时代海量日志处理能力。
- 对象存储 OSS
阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以通过调用 API,在任何应用、任何时间、任何地点上传和下载数据,也可以通过 Web 控制台对数据进行简单的管理。OSS 适合存放任意类型的文件,适合各种网站、开发企业及开发者使用。按实际容量付费真正使您专注于核心业务。
- 云监控
云监控(CloudMonitor) 是一项针