- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以提取嵌套在日志中的 json 字段?
我一直在研究的示例:
thread-191555 app.main - [cid: 2cacd6f9-546d-41ew-a7ce-d5d41b39eb8f, uid: e6ffc3b0-2f39-44f7-85b6-1abf5f9ad970] Request: protocol=[HTTP/1.0] method=[POST] path=[/metrics] headers=[Timeout-Access: <function1>, Remote-Address: 192.168.0.1:37936, Host: app:5000, Connection: close, X-Real-Ip: 192.168.1.1, X-Forwarded-For: 192.168.1.1, Authorization: ***, Accept: application/json, text/plain, */*, Referer: https://google.com, Accept-Language: cs-CZ, Accept-Encoding: gzip, deflate, User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko, Cache-Control: no-cache] entity=[HttpEntity.Strict application/json {"type":"text","extract": "text", "field2":"text2","duration": 451 }
{
"extract": "text",
"duration": "451"
}
"(extract)"\s*:\s*"([^"]+)",?
) 与
example_parser %{data::json}
结合起来(对于初学者,使用 JSON 作为日志示例数据)但我没有设法使任何工作。
最佳答案
该示例文本的格式是否正确?最终的实体对象缺少 ]
从最后。entity=[HttpEntity.Strict application/json {"type":"text","extract": "text", "field2":"text2","duration": 451 }
应该entity=[HttpEntity.Strict application/json {"type":"text","extract": "text", "field2":"text2","duration": 451 }]
假设这是一个错字,并且实体字段实际上以 ]
结尾,我将继续这些说明。 .如果没有,我认为您需要修复基础日志以正确格式化并关闭括号。
与其只是跳过整个日志并仅解析出那个 json 位,我决定解析整个内容并展示看起来不错的最终结果。所以我们需要做的第一件事就是在请求对象之后取出那组键/值对:
示例输入:thread-191555 app.main - [cid: 2cacd6f9-546d-41ew-a7ce-d5d41b39eb8f, uid: e6ffc3b0-2f39-44f7-85b6-1abf5f9ad970] Request: protocol=[HTTP/1.0] method=[POST] path=[/metrics] headers=[Timeout-Access: <function1>, Remote-Address: 192.168.0.1:37936, Host: app:5000, Connection: close, X-Real-Ip: 192.168.1.1, X-Forwarded-For: 192.168.1.1, Authorization: ***, Accept: application/json, text/plain, */*, Referer: https://google.com, Accept-Language: cs-CZ, Accept-Encoding: gzip, deflate, User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko, Cache-Control: no-cache] entity=[HttpEntity.Strict application/json {"type":"text","extract": "text", "field2":"text2","duration": 451 }]
Grok 解析器规则:app_log thread-%{integer:thread} %{notSpace:file} - \[%{data::keyvalue(": ")}\] Request: %{data:request:keyvalue("=","","[]")}
结果:
{
"thread": 191555,
"file": "app.main",
"cid": "2cacd6f9-546d-41ew-a7ce-d5d41b39eb8f",
"uid": "e6ffc3b0-2f39-44f7-85b6-1abf5f9ad970",
"request": {
"protocol": "HTTP/1.0",
"method": "POST",
"path": "/metrics",
"headers": "Timeout-Access: <function1>, Remote-Address: 192.168.0.1:37936, Host: app:5000, Connection: close, X-Real-Ip: 192.168.1.1, X-Forwarded-For: 192.168.1.1, Authorization: ***, Accept: application/json, text/plain, */*, Referer: https://google.com, Accept-Language: cs-CZ, Accept-Encoding: gzip, deflate, User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko, Cache-Control: no-cache",
"entity": "HttpEntity.Strict application/json {\"type\":\"text\",\"extract\": \"text\", \"field2\":\"text2\",\"duration\": 451 }"
}
}
[]
引用字符串的键值解析器。 ,这使我们可以轻松地从请求对象中提取所有内容。
request.entity
上运行,因为这就是我们所说的属性
HttpEntity.Strict application/json {"type":"text","extract": "text", "field2":"text2","duration": 451 }
entity_rule %{notSpace:request.entity.class} %{notSpace:request.entity.media_type} %{data:request.entity.json:json}
{
"request": {
"entity": {
"class": "HttpEntity.Strict",
"media_type": "application/json",
"json": {
"duration": 451,
"extract": "text",
"type": "text",
"field2": "text2"
}
}
}
}
request.headers
解析):
Timeout-Access: <function1>, Remote-Address: 192.168.0.1:37936, Host: app:5000, Connection: close, X-Real-Ip: 192.168.1.1, X-Forwarded-For: 192.168.1.1, Authorization: ***, Accept: application/json, text/plain, */*, Referer: https://google.com, Accept-Language: cs-CZ, Accept-Encoding: gzip, deflate, User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko, Cache-Control: no-cache
headers_rule %{data:request.headers:keyvalue(": ", "/)(; :")}
{
"request": {
"headers": {
"Timeout-Access": "function1",
"Remote-Address": "192.168.0.1:37936",
"Host": "app:5000",
"Connection": "close",
"X-Real-Ip": "192.168.1.1",
"X-Forwarded-For": "192.168.1.1",
"Accept": "application/json",
"Referer": "https://google.com",
"Accept-Language": "cs-CZ",
"Accept-Encoding": "gzip",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko",
"Cache-Control": "no-cache"
}
}
}
/)(; :
的 characterWhiteList .主要处理所有这些特殊字符在
User-Agent
中。 field 。
关于json - Datadog Grok 解析 - 从嵌套的 JSON 中提取字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62092243/
我有一个 GROK 模式,我正尝试在 Logstash 中使用它,它在 GROK 调试器中工作 website但不在日志存储中。我尝试了不同的配置但没有成功。我希望有人可以帮助我确定为什么这不起作用。
以下是事件消息的示例: { "timestamp":"2016-03-29T22:35:44.770750-0400", "flow_id":45385792, "in_iface":"eth1",
我有一个像这样的日志字符串: 2018-08-02 12:02:25.904 [http-nio-8080-exec-1] WARN o.s.w.s.m.s.DefaultHandlerExcept
以下是事件消息的示例: { "timestamp":"2016-03-29T22:35:44.770750-0400", "flow_id":45385792, "in_iface":"eth1",
我有一个像这样的日志字符串: 2018-08-02 12:02:25.904 [http-nio-8080-exec-1] WARN o.s.w.s.m.s.DefaultHandlerExcept
我的问题是关于如何使用 Grok 模式。 我知道给定的现有 Grok 模式,我可以使用以下语法将值分配给字段: %{DATESTAMP_RFC822:timestamp} 我也知道我可以创建自己的自定
我正在尝试为 Java 应用程序设置 ELK。 tomcat 日志是使用 log4j 生成的。要编写测试模式,我使用 Grok Debugger .但是在调试器上它总是显示 Compile ERROR
我正在尝试使用某种 grok 模式来使用以下日志记录格式: *Sun 07:05:18.372 INFO [main] [userID] perf - 0ms - select x from y 我
我正在尝试学习如何第一次使用 logstash 的 grok 过滤器捕获日志文件中的不同字段,但无法正确解析它。我正在使用 https://grokdebug.herokuapp.com/来测试我的工
这是我的 grok 模式 2017-09-25 08:58:17,861 p=14774 u=ec2-user | 14774 1506329897.86160:检查 any_errors_fatal
我有一个 200 MB 的日志文件。我将日志文件输入logstash,需要几个小时才能完成工作。 我想知道是否有办法加快速度?也许以并行模式运行它? 最佳答案 您可以看看here关于如何加快速度。 T
在 Logstash 2.3.3 中,grok 过滤器不适用于最后一个字段。 要重现该问题,请创建 test.conf,如下所示: input { file { path => "/Use
我是 logstash 和 grok 的新手,对模式有疑问。我正在尝试为我的 apache 错误日志创建一个 grok 模式。但是我对以下行为有点困惑。 如果我在 http://grokdebug.h
以下是我的日志 # Time: 2017-11-02T07:41:22.631956Z# User@Host: root[root] @ localhost [] Id: 我无法为单词 ro
2012 年 9 月 27 日星期四 15:30:27 BST:- 无效 token $_POST[custom],指示金额、用户 ID 这是来 self 尝试使用 grok 解析 logstash
我有一个类似于以下的输入 2015-12-02T12:39:57.546461+08:00 222.55.201.19 c): start_time="2015-12-02 ...some other
我是 logstash 和 grok 的新手,对模式有疑问。我正在尝试为我的 apache 错误日志创建一个 grok 模式。但是我对以下行为有点困惑。 如果我在 http://grokdebug.h
我有这些日志,我试图使用 grok 从每一行中提取多个信息。但似乎有些匹配没有被考虑在内,尽管它们对我来说似乎很好。 这是一个示例行: "#wtb# GetSP ok. Referer:http://
我有来自 kafka 的数据,我想将它们发送到 ElasticSearch。我有一个这样的带有标签的日志: APPLI_A|PRF|ENV_1|003 我试图用 grok 解析它使用 grok 调试器
几周来我一直在做这件事,但我似乎无法理解这有什么问题。 我试图让所有这些行适应与 grok 的多行匹配,但它只选择最后一行,甚至丢弃行开头的数字。 11:31:03.936 5: Loa
我是一名优秀的程序员,十分优秀!