У меня есть экземпляр Logstash, работающий как служба, которая читает из Redis и выводит на Elasticsearch. Я только заметил, что в последние несколько дней в Elasticsearch ничего нового не было, но списки Redis увеличивались.
Журнал Logstash был заполнен двумя ошибками, повторяющимися для тысяч строк:
:message=>"Got error to send bulk of actions"
:message=>"Failed to flush outgoing items"
Причина:
{"error":"IllegalArgumentException[Malformed action/metadata line [107], expected a simple value for field [_type] but found [START_ARRAY]]","status":500},
Кроме того, попытка остановить службу несколько раз подряд, я должен был ее убить. Перезапуск он опустошил списки Redis и импортировал все в Elasticsearch. Кажется, сейчас все работает нормально.
Но я не знаю, как предотвратить это снова. Указанное поле type
задается как строка для каждой директивы ввода, поэтому я не понимаю, как это могло стать массивом.
Что мне не хватает?
Я использую Elasticsearch 1.7.1 и Logstash 1.5.3. Файл logstash.conf
выглядит следующим образом:
input {
redis {
host => "127.0.0.1"
port => 6381
data_type => "list"
key => "b2c-web"
type => "b2c-web"
codec => "json"
}
redis {
host => "127.0.0.1"
port => 6381
data_type => "list"
key => "b2c-web-staging"
type => "b2c-web-staging"
codec => "json"
}
/* other redis inputs, only key/type variations */
}
filter {
grok {
match => ["msg", "Cache hit %{WORD:query} in %{NUMBER:hit_total:int}ms. Network: %{NUMBER:hit_network:int} ms. Deserialization %{NUMBER:hit_deserial:int}"]
add_tag => ["cache_hit"]
tag_on_failure => []
}
/* other groks, not related to type field */
}
output {
elasticsearch {
host => "[IP]"
port => "9200"
protocol=> "http"
cluster => "logstash-prod-2"
}
}