热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ElasticSearchGrokProcessor(Grok处理器)

原文链接:https://www.elastic.co/guide/en/elasticsearch/reference/5.3/grok-processor.html译文链接

原文链接 : https://www.elastic.co/guide/en/elasticsearch/reference/5.3/grok-processor.html

译文链接 : http://www.apache.wiki/pages/viewpage.action?pageId=10027802

贡献者 : [那伊抹微笑],[ApacheCN],[Apache中文网]

document(文档)中的单个 textfiled(文本字段)提取 structuredfields(结构化字段)。您可以选择从哪个字段来提取所匹配的字段,以及您想要匹配的 **grok **patterngrok pattern 就像正则表达式,并且支持可以重用的 aliasedexpressions(别名表达式)。

此工具非常适用于 sysloglogsapache 和其它的 webserverlogsmysqllogs,以及一般情况下,用于人类而不是计算机使用的任何的 logformat(日志格式)。该 processor(处理器)包含超过 120 种可重用的 patterns。

如果您需要工具来帮助 buildingpatterns(构建模式)以匹配 log(日志),您将会发现  http://grokdebug.herokuapp.com 和 http://grokconstructor.appspot.com/ 应用程序是相当有用的。

Grok Basics(Grok 基础)

Grokregularexpressions(正则表达式)为基础,所以在 Grok 中的任何正则表达式也是有效的。正则表达式库是 Oniguruma。您可以在 Onigiruma 网站上 查看所支持的完整的 r****egexp syntax(正在表达式语法)。

Grok 通过利用这种正则表达式语言来工作,允许命名现有的 pattern(模式),并将它们组合成与您的字段相匹配的更复杂的 pattern(模式)。

对于重用 grok patterngrok 模式)的语法有三种形式 : %{SYNTAX:SEMANTIC}%{SYNTAX}**%{SYNTAX:SEMANTIC:TYPE}**。

SYNTAX(语法)是将要匹配您的文本的 pattern(模式)的名称。例如,3.44 将会被 NUMBER 模式匹配并且 55.3.244.1 将会被 IP 模式匹配。该语法是告诉你如何匹配的。**NUMBER** 和 **IP** 都是在 default patterns set(默认模式集)中提供的 pattern(模式)。

SEMANTIC(语义)是您给一段被匹配的文本的标识符。例如,3.44 可以是事件的持续时间,所以你可以简单的称之为 duration。此外,字符串 55.3.244.1 可能会标识 client 发出的请求。

TYPE(类型)是您希望转换您命名的 field(字段)的 type(类型)。intfloat 是目前唯一所支持的强制类型。

例如,您可能想要去匹配以下文本 : 

3.44 55.3.244.1

 您可能知道该示例中的消息是一个 number(数字),后跟一个 IP addressIP 地址)。您可以通过使用下列的 **Grok **expressionGrok 表达式)来匹配这个文本。

%{NUMBER:duration} %{IP:client}

Using the Grok Processor in a Pipeline(在管道中使用 Grok 表达式)

Table 20. Grok Options(表 20. Grok 选项)

Name(名称)Required(必要的)Default(默认值)Description(描述)
fieldyes-The field to use for grok expression parsing
patternsyes-An ordered list of grok expression to match and extract named captures with. Returns on the first expression in the list that matches.
pattern_definitionsno-A map of pattern-name and pattern tuples defining custom patterns to be used by the current processor. Patterns matching existing names will override the pre-existing definition.
trace_matchnofalsewhen true, _ingest._grok_match_index will be inserted into your matched document’s metadata with the index into the pattern found in patterns that matched.
ignore_missingnofalseIf true and field does not exist or is null, the processor quietly exits without modifying the document

以下是使用提供的 pattern(模式)从 document(文档)中的 stringfield(字符串字段)中提取和命名结构化字段的示例。

{
"message": "55.3.244.1 GET /index.html 15824 0.043"
}

 这个 pattern(模式)可以是 : 

%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}

以下是一个使用 Grok 处理上述 document(文档)的示例 pipeline(管道): 

{
"description" : "...",
"processors": [
{
"grok": {
"field": "message",
"patterns": ["%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}"]
}
}
]
}

pipeline(管道)将这些 named captures(命名捕获)作为文档中的新字段插入,如下所示 : 

{
"message": "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"
}

Custom Patterns and Pattern Files(自定义模式和模式文件)

Grokprocessor 采用基本的 pattern(模式)进行预包装。这些 pattern(模式)可能并不总是有你想要的。Pattern 有一个非常基本的格式。每个 entry 描述有一个 name(名称)和 pattern(模式)本身。

您也可以在 pattern_definitions 选项下添加您自己的 pattern(模式)到 processordefinition(处理器定义)中。

以下是一个指定自定义 patterndefinitions(模式定义)的 pipeline(管道): 

{
"description" : "...",
"processors": [
{
"grok": {
"field": "message",
"patterns": ["my %{FAVORITE_DOG:dog} is colored %{RGB:color}"]
"pattern_definitions" : {
"FAVORITE_DOG" : "beagle",
"RGB" : "RED|GREEN|BLUE"
}
}
}
]
}

Providing Multiple Match Patterns(提供多个匹配模式)

有时一种 pattern(模式)不足以捕捉一个 field(字段)的潜在结构。假设我们要匹配包含您最喜欢的猫或狗宠物品种的所有 message(消息)。实现这一点的一个方法是提供两个不同的 pattern(模式),而不是一个真正复杂的表达式所捕获相同的 **or** 行为。

以下是针对 simulateAPI(模拟 API)执行的这种配置的示例 : 

curl -XPOST 'localhost:9200/_ingest/pipeline/_simulate?pretty' -H 'Content-Type: application/json' -d'
{
"pipeline": {
"description" : "parse multiple patterns",
"processors": [
{
"grok": {
"field": "message",
"patterns": ["%{FAVORITE_DOG:pet}", "%{FAVORITE_CAT:pet}"],
"pattern_definitions" : {
"FAVORITE_DOG" : "beagle",
"FAVORITE_CAT" : "burmese"
}
}
}
]
},
"docs":[
{
"_source": {
"message": "I love burmese cats!"
}
}
]
}
'

响应如下 : 

{
"docs": [
{
"doc": {
"_type": "_type",
"_index": "_index",
"_id": "_id",
"_source": {
"message": "I love burmese cats!",
"pet": "burmese"
},
"_ingest": {
"timestamp": "2016-11-08T19:43:03.850+0000"
}
}
}
]
}

两种 pattern(模式)都将使用适当的匹配来设置该字段 pet。但是如果要跟踪是哪以个模式匹配并且填充了字段,该怎么办呢?我们可以通过使用 **trace_match**参数来做到这一点。

以下是一个一样 pipeline(管道)的输出,但是使用的是 "trace_match": **true **的配置 : 

{
"docs": [
{
"doc": {
"_type": "_type",
"_index": "_index",
"_id": "_id",
"_source": {
"message": "I love burmese cats!",
"pet": "burmese"
},
"_ingest": {
"_grok_match_index": "1",
"timestamp": "2016-11-08T19:43:03.850+0000"
}
}
}
]
}

在上述响应中,您可以看到匹配的 pattern(模式)的 index(索引)为 "**1**"。这就是说,它是在 patterns 中用于匹配的第二个(索引从零开始)模式。

这些所跟踪的元数据可以调试哪些 patterns(模式)被匹配到了。这些信息存储在 ingestmetadata(元数据)中,并且不会被索引。


推荐阅读
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 标题: ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
author-avatar
Owi妓l_972
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有