Configurar Logstash para que obtenga datos de una base de datos SQL

Configurar Logstash para que obtenga datos de una base de datos SQL

En caso de que necesitemos que nuestro logstash obtenga datos de una base de datos lo podemos hacer utilizando el plugin logstash-input-jdbc para establecer la conexión y ejecutar las consultas directamente desde nuestro logstash

El plugin logstash-input-jdbc

Este plugin nos permite configurar como input de logstash cualquier fuente a la que se puede acceder con Java JDBC

En este tutorial configuraremos logstash para que acceda a una base de datos MySQL/MariaDB, luego ejecute una consulta SQL, una vez que reciba los datos los mismos pueden ser tratados con cualquier filtro que tengamos definido en nuestro logstash

Este turorial esta basado en:

S.O. : CentOS 7.2
Logstash : 5.0

Obtener el driver JDBC

Lo primero que tenemos que hacer es obtener el driver JDBC a utilizar, en este caso lo podemos descargar de https://dev.mysql.com/downloads/connector/j/, una vez que descarguemos el .zip debemos copiar el .jar que se encuentra dentro del mismo a nuestro servidor logstash a la ruta /etc/logstash/jdbc/mysql-connector-java.jar

mkdir /etc/logstash/jdbc
chown -R logstash /etc/logstash/jdbc
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.40.zip
unzip mysql-connector-java-5.1.40.zip
mv mysql-connector-java-5.1.40/mysql-connector-java-5.1.40-bin.jar /etc/logstash/jdbc/mysql-connector-java.jar

Con esto tendremos listo nuestro driver JDBC, ahora podemos comenzar a configurar el logstash

Instalar y configurar el plugin logstash-input-jdbc

Para instalar el plugin debemos ejecutar el siguiente comando:

/usr/share/logstash/bin/logstash-plugin install logstash-input-jdbc

Una vez instalado el plugin debemos configurar el input de logstash, para esto creamos el archivo /etc/logstash/conf.d/01-mysql-jdbc.conf

vi /etc/logstash/conf.d/01-mysql-jdbc.conf
input {
   jdbc {
    # Ruta del driver JDBC que utilizaremos
    jdbc_driver_library => "/etc/logstash/jdbc/mysql-connector-java.jar"
    # Clase a utilizar (consultar documentacion del driver)
    jdbc_driver_class => "com.mysql.jdbc.Driver"            
    # URl de la conexion a base de datos, deben reemplazar el host y el nombre de la BD
    jdbc_connection_string => "jdbc:mysql://host:3306/basededatos"
    # Usuario con el cual se conectara a la BD
    jdbc_user => "user"
    # Password del usuario
    jdbc_password => "pass"
    # Activa la opcion para utilizar el nombre de las columnas como nombre del campo
    use_column_value => "true"
    # Define que columna se utilizara para hacer el seguimiento de las consultas
    tracking_column => "fecha"
    # Se activa la opcion de registrar la última consulta
    record_last_run => "true"
    # Ruta donde se guardara un registro de la última consulta
    last_run_metadata_path => "/etc/logstash/jdbc/registro_volmap_last_run"
    # Consulta SQL, la variable :sql_last_value se reemplaza por el ultimo valor obtenido de la columna que se definio en tracking_column
    # con esto evitamos que logstash reciba datos repetidos, debido a que filtra los valores que se crearon luego de la última vez que
    # el consulto
    statement => "SELECT fecha, monto FROM ventas WHERE fecha > :sql_last_value"  
    # Desactiva la opcion de ejecutar una consulta como si fuese la primera vez siempre
    clean_run => "false"
    # Podemos definir los tags que tendran los datos recolectados
    tags => "mysql-jdbc"
    # Agendamos la ejecucion en formato crontab
    # Para que se ejecute cada 1 minuto: * * * * *
    schedule => "* * * * *"
   }
}

Una vez que guardamos en caso de que tengamos configurado nuestro logstash con autoreload veríamos en unos minutos que se ejecuta la consulta en el log /var/log/logstash/logstash-plain.log

Caso contrario debemos reiniciar el servicio logstash para que tome los cambios

Con esto tenemos una fuente JDBC como input de logstash, tal como dije al inicio, para logstash es como cualquier otro input por lo tanto podemos agregar filtros como si fuese un log normal

Para más informacion:
https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html

Deja un comentario