Я хочу, чтобы мой ввод http (JSON), запущенный через curl, был проанализирован и сохранен вasticsearch. Ввод будет что-то вроде этого: -
curl http://localhost:8080 -d {"applicationname": "app2", "timestamp": "06.07.2009 12:40:40", "errormsg": "Ошибка в строке 1"}
Я хочу проанализировать каждый ключ JSON (имя приложения, метка времени, errormsg) и создать индекс на основе имени приложения и метки времени.
Ниже приведен файл logstash.conf, который я использую.
input {
http {
host => "localhost"
port => "8080"
codec => json
}
}
filter {
json {
source => "message"
target => "parsedJson"
}
mutate {
add_field => {
"appname" => "%{[parsedJson][applicationname]}"
"tst" => "%{[parsedJson][timestamp]}"
"msg" => "%{[parsedJson][errormsg]}"
}
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "%{[appname]}-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug }
}
Нужна помощь в разборе этого ввода JSON. Я получаю вывод ниже в logstash:
{
"tst" => "%{[parsedJson][timestamp]}",
"msg" => "%{[parsedJson][errormsg]}",
"tags" => [
[0] "_jsonparsefailure"
],
"@timestamp" => 2019-06-08T11:21:21.607Z,
"appname" => "%{[parsedJson][application]}",
"message" => "'{applicationname:app2,timestamp:07/06/2019 12:40:40,errormsg:Error at line 1}'",
"headers" => {
"request_path" => "/",
"http_user_agent" => "curl/7.55.1",
"content_type" => "application/x-www-form-urlencoded",
"http_host" => "localhost:8080",
"content_length" => "79",
"http_accept" => "*/*",
"request_method" => "POST",
"http_version" => "HTTP/1.1"
},
"@version" => "1",
"host" => "127.0.0.1"
}
ожидаемый результат:
имя приложения: app2
tst: 06.07.2009 12:40:40
msg: ошибка в строке 1
Индекс должен быть создан с помощью "appname-tst" вasticsearch.