es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , , ,

Answer

  1. Avatar for 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:

    logging.logstash.url: 127.0.0.1:5001
    logging.logstash.ignorePatterns: /(actuator|swagger|webjars).*
    logging.logstash.logHeaders: true
    

    Aplicación B:

    logging.logstash.url: 127.0.0.1:5002
    logging.logstash.ignorePatterns: /(actuator|swagger|webjars).*
    logging.logstash.logHeaders: true
    

    Luego, puedes modificar la configuración de Logstash para escuchar en los puertos correspondientes e indexar los registros adecuadamente:

    input {
       tcp {
        port => 5001
        codec => json
        type => "AppA"
      }
       tcp {
        port => 5002
        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]}"
      }
    }
    

    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.

Comments are closed.