Expone los logs de la plataforma a través de una API HTTP.
Filebeat es una aplicación que hay que instalar y correr en la misma máquina donde corre la app que genera logs.
Filebeat consume el archivo de log y por cada linea del archivo emite un evento a Logstash.
Logstash consume los eventos que recibe de Filebeat y los indexa en un repositorio de eventos de log (MongoDB o Elasticsearch)
Para consultar los eventos de log, el usuario consume la API de esta aplicación, que a su vez consulta el repositorio de eventos de log.
PLATFORM_LOGS_API_PORT
: puerto HTTP de la aplicación, default 6001
Instalar Logstash.
Luego configurar Logstash según el repositorio de eventos de log usado (ver sección Repositorios
debajo)
Ejecutar Logstash:
cd $LOGSTASH_HOME
./logstash
La API se puede configurar para consumir información de un repositorio MongoDB o Elasticsearch (excluyentemente).
La base de datos se llama platform_logs
, y la collection con los logs de la aplicación app_logs
.
Para mantener reducido el tamaño de la base de datos, configurar un índice Time To Live (TTL) para que expiren los documentos automáticamente luego del tiempo configurado.
En mongosh
:
use platform_logs
db.app_log.createIndex({"@timestamp": 1}, {expireAfterSeconds: 259200})
Este comando setea TTL para los documentos de la collection app_log
de 3 días (259200 segundos).
Referencia: https://docs.mongodb.com/manual/core/index-ttl/
Logstash consume los logs originales y produce eventos que luego envía al repositorio.
- Instalar el plugin de output mongodb
$LOGSTASH_HOME/bin/logstash-plugin install --version=3.1.5 logstash-output-mongodb
NOTA: usar la version 3.1.5
ya que la actual (3.1.6) tiene un bug
- Copiar los archivos de configuración a la instalación de Logstash:
cp mongodb/logstash/config/pipelines.yml $LOGSTASH_HOME/config
cp mongodb/logstash/config/app.conf $LOGSTASH_HOME/config
MONGODB_HOST
: default localhost
MONGODB_PORT
: default 27017
ELASTICSEARCH_HOST
: default localhost
ELASTICSEARCH_PORT
: default 9200
ELASTICSEARCH_USERNAME
: default elastic
ELASTICSEARCH_PASSWORD
: default changeme
Instalar Filebeat en la máquina que genera el o los archivos de log.
Configurar Filebeat para que envíe los eventos al server de Logstash, escribir en $FILEBEAT_HOME/filebeat.yml el host de Logstash.
Ejecutar Filebeat:
cd $FILEBEAT_HOME
./filebeat
Construcción de la imagen:
cd app
gradle bootBuildImage
Ejecución:
docker run flow/platform-logs-api
Ejecutar el container de MongoDB:
docker run --name mongodb -p27017:27017 mongo
De ser necesario ejecutar mongosh
en el container:
docker exec -it mongodb bash
mongo
Ejecutar la aplicación:
cd app
gradle bootRun --args='--spring.profiles.active=mongodb'
Ejecutar la aplicación:
cd app
gradle bootRun --args='--spring.profiles.active=elasticsearch'
https://www.baeldung.com/spring-data-elasticsearch-tutorial
https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#reference
https://spring.io/guides/tutorials/rest/
https://reflectoring.io/spring-boot-web-controller-test/
https://www.baeldung.com/spring-rest-openapi-documentation