with elasticsearch logstash

with - logstash elasticsearch url



El agente Logstash ya no indexa (1)

Tengo una instancia de Logstash ejecutándose como un servicio que se lee desde Redis y se envía a Elasticsearch. Me di cuenta de que no había nada nuevo en Elasticsearch en los últimos días, pero las listas de Redis estaban aumentando.

El registro de Logstash se llenó con 2 errores repetidos para miles de líneas:

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

La razón es:

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

Además, al intentar detener el servicio fallido repetidamente, tuve que matarlo. Al reiniciarlo, vació las listas de Redis e importó todo a Elasticsearch. Parece que funciona bien ahora.

Pero no tengo idea de cómo evitar que eso vuelva a pasar. El campo de type mencionado se establece como una cadena para cada directiva de entrada, por lo que no entiendo cómo podría haberse convertido en una matriz.
¿Qué me estoy perdiendo?

Estoy usando Elasticsearch 1.7.1 y Logstash 1.5.3. El archivo logstash.conf ve así:

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


De acuerdo con su mensaje de registro:

{"error": "IllegalArgumentException [línea de acción / metadatos mal formados [107], esperaba un valor simple para el campo [_type] pero se encontró [START_ARRAY]]", "estado": 500},

Parece que estás intentando indexar un documento con un campo type que es una matriz en lugar de una cadena.

No puedo ayudarte sin más del archivo logstash.conf . Pero revise los siguientes para asegurarse:

  1. Cuando usa add_field para cambiar el type , realmente convierte el type en una array con múltiples valores, que es de lo que se queja Elasticsearch.

  2. Puede usar mutate join para convertir matrices en cadenas: api link

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