Итак, у меня есть конвейерная конфигурация, содержащая это:
filter {
if [message] =~ "\A\{.+\}\z" and [kubernetes][labels][app] {
json {
skip_on_invalid_json => true
source => "message"
target => "%{[kubernetes][labels][app]}_fields"
}
mutate {
add_field => { "@log_type" => "%{[kubernetes][labels][app]}" }
}
} else {
mutate {
add_field => { "@log_type" => "generic" }
}
}
}
Фильтр mutate
вызван правильно, поэтому я предполагаю, что моя проблема не в условии. Мое сообщение всегда помечается _jsonparsefailure
, но, как я вижу, оно действительно JSON:
{
"type": "response",
"@timestamp": "2020-02-28T13:54:23Z",
"tags": [],
"pid": 6,
"method": "get",
"statusCode": 200,
"req": {
"url": "/app/kibana",
"method": "get",
"headers": {
"user-agent": "curl/7.29.0",
"host": "localhost:5601",
"accept": "*/*"
},
"remoteAddress": "127.0.0.1",
"userAgent": "127.0.0.1"
},
"res": {
"statusCode": 200,
"responseTime": 24,
"contentLength": 9
},
"message": "GET /app/kibana 200 24ms - 9.0B"
}
Таким образом, результатом является исходное сообщение, помеченное правильно, но без "... Поле _fields "и помечено как _jsonparsefailure
. Есть идеи?