2015-09-02 12 views
13

Mam instancję Logstash działającą jako usługa, która odczytuje dane z usługi Redis i wyświetla wyniki w trybie Elasticsearch. Właśnie zauważyłem, że w ciągu ostatnich kilku dni nie było nic nowego w Elasticsearch, ale listy Redis rosły.Agent programu Logstash już się nie indeksuje.

Logstash dziennika została wypełniona 2 błędów powtarzanych przez tysiące wierszach:

:message=>"Got error to send bulk of actions" 
:message=>"Failed to flush outgoing items" 

Powodem jest:

{"error":"IllegalArgumentException[Malformed action/metadata line [107], expected a simple value for field [_type] but found [START_ARRAY]]","status":500}, 

Dodatkowo, próbując zatrzymać usługę wielokrotnie nie miałem go zabić . Ponowne uruchomienie opróżniło listę Redis i zaimportowało wszystko do Elasticsearch. Wydaje się działać teraz dobrze.

Ale nie mam pojęcia, jak temu zapobiec. Wymienione pole type jest ustawione jako ciąg znaków dla każdej dyrektywy wejściowej, więc nie rozumiem, w jaki sposób mogła stać się tablicą.
Czego mi brakuje?

Używam Elasticsearch 1.7.1 i Logstash 1.5.3. Plik logstash.conf wygląda następująco:

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" 
    } 
} 
+0

Mógłbyś podać swój config lub co najmniej fragment gdzie można ustawić pole typu? Wygląda na to, że ma on związek ze zbiorczym interfejsem elasticsearch: https://github.com/elastic/elasticsearch/issues/11458 – hurb

+0

Rzeczywiście problem wygląda podobnie, ale z problemem macierzy zamiast wartości NULL. – Antoine

+0

Czy można wyczyścić plik logstash.log, zaktualizować wtyczkę elasticsearch-logstash i uruchomić ją ponownie. Miałem podobny problem iw moim przypadku moje elastyczne wyszukiwanie zepsuło się najpierw w b/w, a po ponownym uruchomieniu miałem problem z wtyczką i połączeniem. –

Odpowiedz

1

Według wiadomości dziennika:

{ "error": "IllegalArgumentException [Błędny działanie linia metadane/[107], oczekuje prostego wartość dla pola [ _Typ], ale okazało [START_ARRAY]]”,«status»: 500},

wydaje próbujesz indeksu dokumentu z type dziedzinie, która jest tablicą zamiast łańcucha.

Nie mogę ci pomóc bez większej ilości pliku logstash.conf. ale sprawdź następne upewnić:

  1. Podczas korzystania add_field do zmiany type rzeczywiście włączyć się w arraytype z wielu wartości, która jest co Elasticsearch narzeka.

  2. Można użyć mutate join przekonwertować tablice do strun:

    filter { 
        mutate { 
         join => { "fieldname" => "," } 
        } 
    } 
    
+0

Zapomniałem zaktualizować to pytanie, gdy się dowiedziałem, ale w rzeczywistości filtr mutacji rozwiązał problem. – Antoine