json 解析器的 Logstash 输出未发送到 elasticsearch
Logstash output from json parser not being sent to elasticsearch
这是我的另一个问题的跟进:
但是这次我觉得问题比上次更清楚,可能更容易有人回答。
我正在像这样使用 JSON 解析器:
json #Parse all the JSON
{
source => "MFD_JSON"
target => "PARSED"
add_field => { "%{FAMILY_ID}" => "%{[PARSED][platform][family_id][1]}_%{[PARSED][platform][family_id][0]}" }
}
logstash.stdout 中的一个日志的输出部分如下所示:
"FACILITY_NUM" => "1",
"LEVEL_NUM" => "7",
"PROGRAM" => "mfd_status",
"TIMESTAMP" => "2016-01-12T11:00:44.570Z",
MORE FIELDS
当我删除 JSON 代码时,有一大堆字段与上面的字段类似。当我添加 JSON 过滤器时,由于某种原因整个日志从 elasticserach/kibana 中消失了。 JSON 过滤器添加的位如下:
"PARSED" => {
"platform" => {
"boot_mode" => [
[0] 2,
[1] "NAND"
],
"boot_ver" => [
[0] 6,
[1] 1,
[2] 32576,
[3] 0
],
WHOLE LOT OF OTHER VARIABLES
"family_id" => [
[0] 14,
[1] "Hatchetfish"
],
A WHOLE LOT MORE VARIABLES
},
"flash" => [
[0] 131072,
[1] 7634944
],
"can_id" => 1700,
"version" => {
"kernel" => "3.0.35 #2 SMP PREEMPT Thu Aug 20 10:40:42 UTC 2015",
"platform" => "17.0.32576-r1",
"product" => "next",
"app" => "53.1.9",
"boot" => "2013.04 (Aug 20 2015 - 10:33:51)"
}
},
"%{FAMILY_ID}" => "Hatchetfish 14"
让我们假装 JSON 不起作用,我现在可以接受,这不应该与 elasticsearch/kibana 中的日志有关的所有其他事情混为一谈。另外,最后我得到了 FAMILY_ID 作为我使用 add_field 单独添加的字段。最起码应该出现了吧?
如果有人以前见过类似的东西,那将会很有帮助。
也很抱歉两次发送几乎相同的问题。
示例日志行:
1452470936.88 1448975468.00 1 7 mfd_status 000E91DCB5A2 load {"up":[38,1.66,0.40,0.13],"mem":[967364,584900,3596,116772],"cpu":[1299,812,1791,3157,480,144],"cpu_dvfs":[996,1589,792,871,396,1320],"cpu_op":[996,50]}
示例行将被解析(加载后的所有内容都是JSON),并且在stdout中我可以看到它被解析成功,但是我在elasticsearch中没有看到它。
这是我的输出代码:
elasticsearch
{
hosts => ["localhost:9200"]
document_id => "%{fingerprint}"
}
stdout { codec => rubydebug }
我的很多 logstash 过滤器都在另一个问题中,但我认为现在所有相关部分都在这个问题中。
如果您想查看这里的 link:
在这里回答我自己的问题。这不是理想的答案,但是如果有人遇到与我类似的问题,您可以尝试一下。
json #Parse all the JSON
{
source => "MFD_JSON"
target => "PARSED"
add_field => { "%{FAMILY_ID}" => "%{[PARSED][platform][family_id][1]}_%{[PARSED][platform][family_id][0]}" }
}
这就是我之前解析所有 JSON 的方式,我一直在反复试验,希望我能在某个时候得到它。我打算只使用 grok 过滤器来获取我想要的位,如果这对您不起作用,这是一个选项。后来我回过头来想 "What if I removed everything after" 因为一些我忘记的疯狂原因。最后我这样做了:
json
{
source => "MFD_JSON"
target => "PARSED_JSON"
add_field => { "FAMILY_ID" => "%{[PARSED_JSON][platform][family_id][1]}_%{[PARSED_JSON][platform][family_id][0]}" }
remove_field => [ "PARSED_JSON" ]
}
所以,把你感兴趣的field/fields提取出来,然后去掉解析器最后做的字段。这就是对我有用的。我不知道为什么,但它可能也适用于其他人。
这是我的另一个问题的跟进:
我正在像这样使用 JSON 解析器:
json #Parse all the JSON
{
source => "MFD_JSON"
target => "PARSED"
add_field => { "%{FAMILY_ID}" => "%{[PARSED][platform][family_id][1]}_%{[PARSED][platform][family_id][0]}" }
}
logstash.stdout 中的一个日志的输出部分如下所示:
"FACILITY_NUM" => "1",
"LEVEL_NUM" => "7",
"PROGRAM" => "mfd_status",
"TIMESTAMP" => "2016-01-12T11:00:44.570Z",
MORE FIELDS
当我删除 JSON 代码时,有一大堆字段与上面的字段类似。当我添加 JSON 过滤器时,由于某种原因整个日志从 elasticserach/kibana 中消失了。 JSON 过滤器添加的位如下:
"PARSED" => {
"platform" => {
"boot_mode" => [
[0] 2,
[1] "NAND"
],
"boot_ver" => [
[0] 6,
[1] 1,
[2] 32576,
[3] 0
],
WHOLE LOT OF OTHER VARIABLES
"family_id" => [
[0] 14,
[1] "Hatchetfish"
],
A WHOLE LOT MORE VARIABLES
},
"flash" => [
[0] 131072,
[1] 7634944
],
"can_id" => 1700,
"version" => {
"kernel" => "3.0.35 #2 SMP PREEMPT Thu Aug 20 10:40:42 UTC 2015",
"platform" => "17.0.32576-r1",
"product" => "next",
"app" => "53.1.9",
"boot" => "2013.04 (Aug 20 2015 - 10:33:51)"
}
},
"%{FAMILY_ID}" => "Hatchetfish 14"
让我们假装 JSON 不起作用,我现在可以接受,这不应该与 elasticsearch/kibana 中的日志有关的所有其他事情混为一谈。另外,最后我得到了 FAMILY_ID 作为我使用 add_field 单独添加的字段。最起码应该出现了吧?
如果有人以前见过类似的东西,那将会很有帮助。 也很抱歉两次发送几乎相同的问题。
示例日志行:
1452470936.88 1448975468.00 1 7 mfd_status 000E91DCB5A2 load {"up":[38,1.66,0.40,0.13],"mem":[967364,584900,3596,116772],"cpu":[1299,812,1791,3157,480,144],"cpu_dvfs":[996,1589,792,871,396,1320],"cpu_op":[996,50]}
示例行将被解析(加载后的所有内容都是JSON),并且在stdout中我可以看到它被解析成功,但是我在elasticsearch中没有看到它。 这是我的输出代码:
elasticsearch
{
hosts => ["localhost:9200"]
document_id => "%{fingerprint}"
}
stdout { codec => rubydebug }
我的很多 logstash 过滤器都在另一个问题中,但我认为现在所有相关部分都在这个问题中。
如果您想查看这里的 link:
在这里回答我自己的问题。这不是理想的答案,但是如果有人遇到与我类似的问题,您可以尝试一下。
json #Parse all the JSON
{
source => "MFD_JSON"
target => "PARSED"
add_field => { "%{FAMILY_ID}" => "%{[PARSED][platform][family_id][1]}_%{[PARSED][platform][family_id][0]}" }
}
这就是我之前解析所有 JSON 的方式,我一直在反复试验,希望我能在某个时候得到它。我打算只使用 grok 过滤器来获取我想要的位,如果这对您不起作用,这是一个选项。后来我回过头来想 "What if I removed everything after" 因为一些我忘记的疯狂原因。最后我这样做了:
json
{
source => "MFD_JSON"
target => "PARSED_JSON"
add_field => { "FAMILY_ID" => "%{[PARSED_JSON][platform][family_id][1]}_%{[PARSED_JSON][platform][family_id][0]}" }
remove_field => [ "PARSED_JSON" ]
}
所以,把你感兴趣的field/fields提取出来,然后去掉解析器最后做的字段。这就是对我有用的。我不知道为什么,但它可能也适用于其他人。