心意相通可能是来自火星的英语中唯一的单词。Grok于罗伯特A. Heinlein的1961年科学小说小说介绍年代董里我一个奇怪的土地。然而,在这篇文章中,我将重点关注Grok作为解析日志消息的行业标准,以及它在New Relic中的工作原理。
但首先,关于Grok Parsing一般如何工作的一点。
要从任何平台的日志遥测中提取最大价值,您需要能够解析一些经常发送到日志后端的非结构化消息。
考虑具有这样的日志记录之间的区别...
{" message ": " 54.3.824.2 2048 0 "}
…与这样的人相比:
{“host_ip”:“54.3.824.2”、“bytes_received”:2048年,“bytes_sent”:0}
具有三个单独字段的实体提供了在一大块的自由文本中提供的主要可观察性,并且Grok使这种细化相对容易。
您可以通过定义GROK模式搜索日志消息中的特定数据:%{语法:语义}
句法
将与文本匹配的模式的名称。有一些非常常用的模式可以放在句法
日志,如数量
,㈡
,知识产权
, 还有很多。这数量
图案可匹配4.55、4、8等任意数字;IP模式可以匹配54.3.824.2、174.49.99.1等。语义
是给定给匹配文本的标识符。如果模式与您的文本匹配,那么将在日志记录中创建一个带有标识符的字段。
因此,如果您的表单的日志消息“[IP地址] [收到字节] [字节发送]”
(例如,“54.3.824.2 2048 0”
),你可以使用下面的Grok模式来匹配这个表单,并提取三个有用的字段:
“% {IP: host_ip} % {INT: bytes_received} % {INT: bytes_sent}”
处理后,您的日志记录将有三个新字段:host_ip
,bytes_received
, 和bytes_sent.
。您现在可以在可观察性平台中使用这些字段来过滤,方面和对日志数据执行统计操作。
Grok解析如何在New Relic工作
解析应用于转发层或日志管道的后端。新的遗物使用后端解析,并为某些指定的日志类型提供内置解析,但您还可以在Parsing UI中创建自定义解析规则。
我们的内置解析规则和自定义规则都使用GROK模式指定如何从自由文本字符串中提取有用信息。解析允许我们使用统计分析等高级功能,如统计分析,刻面搜索,过滤器等。如果我们无法将数据分类和分解为单独的字段,我们将返回繁琐的全文搜索与通配符和正则表达式和较少的定量价值。
新遗迹内嵌的Grok图案
任何带有logtype
将检查现场内置的模式列表相关的logtype
。如果可能,相关的内置Grok模式将应用到该日志;例如:
请阅读New Relic的内置解析在我们的文档。
在新遗物中创建自定义GROK模式
如果您有正确的权限,您可以使用管理解析在New Relic中创建、测试和启用Grok模式的UI。
假设您有一个名为“Inventory Service”的微服务。该服务发出某些错误日志,其中包含免费的、非结构化文本的有用信息。
这里有一个例子:
{“entity.name”:“Inventory Management”,“Entity.Type”:“服务”,“FB.Input”:“tail”,“fb.source”:“nri-agent”,“hostname”:“库存-host-1“,”标签“:”库存“,”级别“:”错误“,"信息":"库存错误:处理产品7186的缩略图内存不足",”插件。源”:“裸机”、“插件。类型”:“fluent-bit”、“插件。”:“版本1.1.4”、“跨越。我d": "e2056adfcaf06c15", "timestamp": 1598046141558, "trace.id": "3c517a62483f66ef5943143b4165c62e" }
同样,这是有用的信息,但您希望它有更多的结构。
您可以使用免费文本查询来查找UI中的此类日志,但在没有复杂和计算昂贵的正则表达式的情况下,很难在NRQL中使用这些查询。
相反,你可以创建一个解析规则来提取你需要的信息:
点击管理解析>创建新的解析规则并执行以下步骤:
- 为规则提供有用的名称,如“InventoryService错误解析”。
- 输入一个属性/价值配对起到预过滤器的作用。这将缩小该规则需要处理的日志数量,删除不必要的处理。在本例中,选择属性“entity.name”和值“Inventory Service”。
- 添加GROK解析规则。在这种情况下:
库存错误:产品%{int:product_id}的%{data:error_message}
- 点击测试Grok.如果GROK规则会匹配到系统中的任何日志,则会向您展示。
- 现在启用规则并单击保存解析规则。
很快,您将看到进入系统的库存服务日志现在通过添加两个新字段得到了增强,error_message
和product_id
。
现在,您可以使用以下字段在data explorer中使用查询创建可视化:
开发Grok模式的工具和资源
神交调试器是一个非常方便的用户界面,用于试验Grok模式。可以把它看作是一个IDE,用于创建可以在New Relic中使用的可用于生产的Grok模式。
输入您的示例日志内容以及要匹配的模式:
如果您的模式与示例内容匹配,您将看到提取的字段:
在语法方面,这里有一些更有用的GROK模式的子集,您可能在Parse规则上工作时经常需要使用:
语法 | 样本匹配内容(不包括引号) |
---|---|
%{IP} | “73.241.172.237” |
% {IPV4} | “73.241.172.237” |
%{IPv6} | “2001:0db8:85a3:0000:0000:8a2e: 0370:7334” |
%{iporhost} | “cache1.acme.com” |
% {INT} | -365年 |
%{posint} | 77 |
%{}数量 | 44.5 |
%{单词} | 一些词 |
%{数据} | “数据” |
%{notspace} | “&XYZSOMETEXT&” |
%{空间} | “ |
%{timestamp_iso8601} | “2020-08-19T15:59:49.439513z” |
% {UNIXPATH} | “/ tmp / mypath” |
Grok调试器有更多完整的列表Grok模式及其底层正则表达式定义的。
结论
如果日志中的消息字段包含有用的人类可读信息,则具有一些明显的结构,请考虑使用Grok解析的数据。这样做会使您的日志首个类实体可以在NRQL中查询,并与仪表板和警报一起使用,就像我们的APM或基础架构监控代理商的任何其他事件一样。
现在您知道了如何从日志数据中提取这种值,报名为一个免费的New Relic帐户,并获得日志的上下文作为一部分完整的可观测性。