Я пытаюсь разобрать файл JSON из Keen.io с помощью logstash в elasticsearch. Местоположение и временная метка хранятся в таких параметрах:
{
"result":
[
{
"keen":
{
"timestamp": "2014-12-02T12:23:51.000Z",
"created_at": "2014-12-01T23:25:31.396Z",
"id": "XXXX",
"location":
{
"coordinates": [-95.8, 36.1]
}
}
}
]
}
Мой фильтр в настоящее время выглядит так:
input {
file {
path => ["test.json"]
start_position => beginning
type => json
}
}
filter {
json {
source => message
remove_field => message
}
}
output {
stdout { codec => rubydebug }
}
Как я могу проанализировать поля «отметка времени» и «местоположение», чтобы они использовались для @timestamp и @geoip.coordinates в Elasticsearch?
Обновление: я пробовал варианты этого без везения. Документация очень простая - я неправильно понимаю, как ссылаться на поля JSON? Есть ли способ добавить вывод отладки, чтобы помочь? Я попробовал Как отладить плагин файла logstash и Вывести строку на стандартный вывод с помощью Logstash 1.4?, но ни то, ни другое не работает.
filter {
json {
source => message
remove_field => message
}
if ("[result][0][keen][created_at]") {
date {
add_field => [ "[timestamp]", "[result][0][keen][created_at]" ]
remove_field => "[result][0][keen][created_at]"
}
}
Обновление 2:
Дата работает сейчас, все еще нужно, чтобы работало местоположение.
filter {
json {
source => message
remove_field => message
add_tag => ["valid_json"]
}
if ("valid_json") {
if ("[result][0][keen][created_at]") {
date {
match => [ "[result][0][keen][created_at]", "ISO8601" ]
}
}
}
}
add_field
правильный, вам понадобитсяupdate_field
, потому что поле метки времени уже существует. Во всяком случае, он вообще переходит в частьif (...)
? Добавьте тег где-нибудь там, чтобы узнать. - person Ulrich Eckhardt   schedule 26.04.2015update_field
не существует? Хорошая идея с биркой, интересно, для чего они. - person parsley72   schedule 26.04.2015match
фильтраdate
, напримерfilter { date { match => [ "[result][0][keen][created_at]", "MMM dd YYYY HH:mm:ss" ] } }
- person Rafael Fonseca   schedule 26.04.2015mutate
. Итак, сохраните значение во временном файле, а затем обновите его с помощью этого фильтра. Что касается тегов, я регулярно устанавливал тег, напримерvalid_json
, в фильтрjson
, а затем проверял этот тег, чтобы принять решение о дальнейшей обработке. Я бы также использовал ветку else, чтобы пометить эту запись в журнале как явно недействительную, так как это предполагает, что где-то есть ошибка программирования. - person Ulrich Eckhardt   schedule 26.04.2015