Enviar Logs desde Spring Boot a Logstash
La gestión de logs en proyecto java, normalmente se registran en archivos según la configuración va generando historial con el tiempo.
Para tener disponible mediante acceso web a los logs del servidor, una buena practica es gestionar con herramientas especializadas y segun nuestras necesidades explotar esos logs con el obetivo de entender mejor que esta pasando en el funcionamiento de nuestra aplicación
En este Post veremos como configurar la librería Logback que permite enviar logs desde un proyecto Spring Boot al servidor LogStash, y este podrá enviar a un servidor ElasticSearch u otro segun necesidad.
Agregamos la dependencia maven al proyecto
<dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>6.6</version> </dependency>
Configuración de Logback junto al archivo de application.yml de spring
logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration> <property resource="application.yml" /> <springProperty scope="context" name="logstash" source="logging.logstash.url"/> <springProperty scope="context" name="loglevel" source="logging.level.root"/> <include resource="org/springframework/boot/logging/logback/base.xml"/> <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <destination>${logstash}</destination> <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"> <providers> <mdc /> <context /> <logLevel /> <loggerName /> <pattern> <pattern> { "app": "myapp" } </pattern> </pattern> <threadName /> <message /> <logstashMarkers /> <stackTrace /> </providers> </encoder> </appender> <logger level="${loglevel}"> <appender-ref ref="logstash"/> </logger> <root level="${loglevel}"> <appender-ref ref="logstash"/> </root> </configuration>
Ahora configuramos el archivo application.yml del proyecto de Spring.
# Configuración de Logs logging: file: name: /opt/apps/myapp.log max-size: 10MB max-history: 30 clean-history-on-start: true logstash: url: logstash.mydominio.com:5000 pattern: console: "%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n" level: root: INFO org.springframework.web: INFO
Como se puede apreciar, en la secion "logging" se define file y logstash, esto permitirá escribir los logs en disco y enviar a logstash al mismo tiempo.
Ahora vamos a ver el contenido del archivo de configuración de logstash que estará escuchando en el puerto 5000, esperando que logback envie los logs desde spring boot.
Crear el archivo apps.conf en /etc/logstash/conf.d
input { tcp { port => "5000" codec => json_lines } } filter { } output { elasticsearch { hosts => ["https://localhost:9200"] user => "logstash" password => "123456789" cacert => "/etc/logstash/certs/http_ca.crt" ssl => true ssl_certificate_verification => false index => "miempresa-apps-%{+YYYY.MM.dd}" } }
El codigo de la configuración de logstash decepciona el log, no aplica filtro y envía a elasticsearch para su indexación y su posterior visualización desde Kibana, similar a la imagen siguiente.
Saludos.
0 comments:
Publicar un comentario