2016-08-12 2 views
1

Входной сигнал logstash являетсяКак разбить большой вход json-файла в другой индекс поиска эластичности?

input { 
    file { 
     path => "/tmp/very-large.json" 
     type => "json" 
     start_position => "beginning" 
     sincedb_path => "/dev/null" 
    } 

и образец файла JSON

{"type":"type1", "msg":"..."} 
{"type":"type2", "msg":"..."} 
{"type":"type1", "msg":"..."} 
{"type":"type3", "msg":"..."} 

Можно ли сделать их кормить в другом упругим поискового индекса, так что я могу обрабатывать их легче в будущем?

Я знаю, если это возможно, чтобы назначить их с tag, то я могу сделать что-то вроде

if "type1" in [tags] { 
    elasticsearch { 
     hosts => ["localhost:9200"] 
     action => "index" 
     index => "logstash-type1%{+YYYY.MM.dd}" 
     flush_size => 50 
    } 
} 

Как сделать подобную вещь, глядя на конкретное значение поля JSon, например, type в моем примере выше?

+0

Ответ правильный, но только для справки, вы можете do: if [type] == "type1" – pandaadb

ответ

1

Даже проще, просто использовать type поле, чтобы построить имя индекса, как это:

elasticsearch { 
    hosts => ["localhost:9200"] 
    action => "index" 
    index => "logstash-%{type}%{+YYYY.MM.dd}" 
    flush_size => 50 
} 
0

Вы можете сравнить на любых полях. Вы должны сначала разобрать свой json с помощью json filter или codec.

Тогда вы будете иметь type поле работать, как это:

if [type] == "type1" { 
    elasticsearch { 
     ... 
     index => "logstash-type1%{+YYYY.MM.dd}" 
    } 
} else if [type] == "type2" { 
    elasticsearch { 
     ... 
     index => "logstash-type2%{+YYYY.MM.dd}" 
    } 
} ... 

Или, как в ответ Вэл:

elasticsearch { 
    hosts => ["localhost:9200"] 
    action => "index" 
    index => "logstash-%{type}%{+YYYY.MM.dd}" 
    flush_size => 50 
}