Indexación de registros en Logstash utilizando puertos de aplicaciones
Estoy utilizando ELK Stack, esta dependencia y configuración para registrar mis APIs.
<dependency>
<groupid>com.github.piomin</groupid>
<artifactid>logstash-logging-spring-boot-starter</artifactid>
<version>1.3.0.RELEASE</version>
</dependency>
Y en las propiedades:
logging.logstash.enabled: true
logging.logstash.url: 127.0.0.1:5000
logging.logstash.ignorePatterns: /(actuator|swagger|webjars).*
logging.logstash.logHeaders: true
Tengo varias aplicaciones que utilizan diferentes puertos como ==> aplicación A: localhost:9000, Aplicación B: localhost:9001, …
Todas las trazas se envían a Logstash con la siguiente configuración:
input {
tcp {
port => 5000
codec => json
type => "AppA"
}
tcp {
port => 5000
codec => json
type => "AppB"
}
}
filter {
if [type] == "AppA" {
mutate { add_field => { "[@metadata][target_index]" => "AppA" } }
} else if [type] == "AppB" {
mutate { add_field => { "[@metadata][target_index]" => "AppB" } }
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "%{[@metadata][target_index]}"
}
}
Pero no funciona. Quiero indexarlos según los puertos o nombres de las aplicaciones. ¿Alguna solución?
davy.ai
El problema con la configuración actual es que tanto la Aplicación A como la B están enviando registros a través del mismo puerto 5000, lo cual dificulta diferenciarlos según el número de puerto. Una solución a esto es utilizar puertos diferentes para cada aplicación y configurar Logstash en consecuencia. Por ejemplo:
Aplicación A:
Aplicación B:
Luego, puedes modificar la configuración de Logstash para escuchar en los puertos correspondientes e indexar los registros adecuadamente:
Esta configuración escuchará los puertos 5001 y 5002 para la Aplicación A y B respectivamente. La sección de filtro agregará un campo que indica el índice de destino basado en el tipo de aplicación. Finalmente, la sección de salida enviará los registros al índice correspondiente en Elasticsearch.