【发布时间】:2019-01-11 20:57:34
【问题描述】:
我需要有关 logstash 过滤器的帮助,以将 json 键/值提取到 new_field。以下是我的logstash conf。
input {
tcp {
port => 5044
}
}
filter {
json {
source => "message"
add_field => {
"data" => "%{[message][data]}"
}
}
}
output {
stdout { codec => rubydebug }
}
我已经尝试过 mutate:
filter {
json {
source => "message"
}
mutate {
add_field => {
"data" => "%{[message][data]}"
}
}
}
我试过了。而不是 []:
filter {
json {
source => "message"
}
mutate {
add_field => {
"data" => "%{message.data}"
}
}
}
我已经尝试过使用索引号:
filter {
json {
source => "message"
}
mutate {
add_field => {
"data" => "%{[message][0]}"
}
}
}
都没有运气。 :(
以下json被发送到5044端口:
{"data": "blablabla"}
问题是新字段无法从 json 的键中提取值。
"数据" => "%{[消息][数据]}"
以下是我的标准输出:
{
"@version" => "1",
"host" => "localhost",
"type" => "logstash",
"data" => "%{[message][data]}",
"path" => "/path/from/my/app",
"@timestamp" => 2019-01-11T20:39:10.845Z,
"message" => "{\"data\": \"blablabla\"}"
}
但是,如果我改用 "data" => "%{[message]}":
filter {
json {
source => "message"
add_field => {
"data" => "%{[message]}"
}
}
}
我将从标准输出中获取整个 json。
{
"@version" => "1",
"host" => "localhost",
"type" => "logstash",
"data" => "{\"data\": \"blablabla\"}",
"path" => "/path/from/my/app",
"@timestamp" => 2019-01-11T20:39:10.845Z,
"message" => "{\"data\": \"blablabla\"}"
}
谁能告诉我我做错了什么。
提前谢谢你。
我使用 docker-elk 堆栈,ELK_VERSION=6.5.4
【问题讨论】:
标签: json logstash elastic-stack logstash-configuration