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:
Cuando usa
add_field
para cambiar eltype
, realmente convierte eltype
en unaarray
con múltiples valores, que es de lo que se queja Elasticsearch.Puede usar
mutate join
para convertir matrices en cadenas: api linkfilter { mutate { join => { "fieldname" => "," } } }