Sviluppo della piattaforma dei servizi cloud di base per il data center

Sviluppo della piattaforma dei servizi cloud di
base per il data center TIX
UTILIZZO DI DOCUMENTI XML E FONTI DATI JDBC
COME INPUT PER LOGSTASH/ELASTICSEARCH
Redazione
Tommaso Anzidei
23/05/2016
AlmavivA
Silvana Ciampi,
Verifica
Marco Giolo
AlmavivA
Approvazione
Versione
1
Vincenzo Martiello
Regione Toscana
1.0
Sommario
1. Introduzione......................................................................................3
2. XML..................................................................................................4
3. JDBC................................................................................................6
2
1. Introduzione
In questo documento descriviamo l'introduzione, all'interno della piattaforma
Saas-plat, di modalità di input dati che estendono gli attuali.
Regione Toscana (RT) ha infatti richiesto di verificare la possibilità di utilizzare
come input alla piattaforma sia documenti XML conservati su disco, sia tabelle
di database raggiungibili via JDBC.
In particolare RT ha chiesto:
1. JDBC: E' di interesse verificare la disponibilità e approfondire la modalità
d'uso del modulo di Logstash che consente di acquisire dati da database
con interfaccia JDBC. Questa possibilità consentirebbe ad esempio di
georeferenziare e rappresentare con Kibana 4 i log di accesso ad una
vasta gamma di applicazioni di cui l'infrastruttura di autenticazione ARPA
mette già a disposizione i log per indirizzo ip (a tale riguardo è possibile
fornire maggiori dettagli tecnici in sede operativa).
2. XML: E' possibile memorizzare dati XML in ELK?
Entrambe le richieste sono state analizzate ed in entrambi i casi si è verificata
positivamente la fattibilità della richiesta.
Questo documento descrive operativamente entrambe le modalità di input.
3
2. XML
Sia data una cartella nel file system contente file XML. L'esigenza dell'utente è
caricare tali documenti in Elasticsearch in modo da poterli sia conservare che
ricercare. Esistono due modalità per raggiungere tale obiettivo.
2.1 Approccio Logstash
Logstash offre una modalità nativa di caricamento di documenti XML. Infatti è
sufficiente utilizzare il plugin XML di Logstash (che è disponibile
nell'installazione standare di Logstash). Vediamo un esempio di configurazione.
input {
file {
type => "file"
path => "/some folder/*.xml"
}
}
output {
elasticsearch { host => "localhost" protocol => "http" }
}
In questo esempio gli xml presenti in un folder vengono caricati da Logstash,
convertiti in formato json e memorizzati in elasticsearch.
Il vantaggio di questo approccio è che
immediatamente disponibile out-of-the-box.
rappresenta
una
soluzione
Lo svantaggio è che il documento XML non viene memorizzato in elasticsearch.
Se lo si vuole recuperare da elasticsearch è necessario eseguire un parsing
json → xml che non restituisce con certezza il documento originale.
4
2.2 Approccio Java
Per ovviare al limitazione dell'approccio logstash è stata sviluppata una libreria
Java denominata XML2ES. La libreria è costituita da un unico jar chiamato
XML2ES.jar (i binari e i sorgenti sono disponibili su OSCAT).
La libreria carica i documenti XML
congiuntamente con i file XML originali.
su
elasticsearch
in
formato
json
La libreria fornisce un demone che rimane in ascolto sulla creazione/modifica di
documenti XML presenti in una data cartella.
La libreria è facilmente modificabile per adattarsi a scenari personalizzati.
Per utilizzare la libreria è sufficiente lanciare il comando:
java -jar XML2ES.jar path_dei_file_XML serverES:portaES/indice/tipo
dove:
path_dei_file_XML = cartella che contiene i documenti XML da caricare
serverES = indirizzo del servizio elasticsearch
portaES = porta di elasticsearch
indice = indice elasticsearch nel quale memorizzare i documenti
tipo = tipo elasticsearch dove risiederanno i documenti XML
Per esempio:
java -jar XML2ES.jar /home/xmls/ http://10.228.16.9:9200/xml/xml/
5
3. JDBC
Il caricamento di tabelle di database relazionali è immediatamente disponibile il
Logstash tramite il plugin JDBC.
Vediamo un semplice esempio.
Si supponga di avere una tabella, per esempio ESTABLE, conservata in un
database DB/2. Si vuole caricare i dati della tabella su di un indice
elasticsearch, per esempio un indice di nome “jdbc”. Il file di configurazione di
Logstash sarà simile al seguente:
input {
jdbc {
jdbc_driver_library => "/path driver db2/db2jcc.jar"
jdbc_driver_class => "com.ibm.db2.jcc.DB2Driver"
jdbc_connection_string => "jdbc:db2://ip:port/DB"
jdbc_user => "username"
jdbc_password => "password"
schedule => "* * * * *"
statement => "SELECT * FROM ESTABLE"
}
}
output {
elasticsearch {
hosts => ["es_ip:es_port"]
index => "jdbc"
}
}
Come si vede dall'esempio è sufficiente comunicare a Logstash le seguenti
informazioni:
jdbc_driver_library = path che contiene la libreria JDBC del database
6
jdbc_driver_class = la classe del driver
jdbc_connection_string = la definizione della connessione JDBC
jdbc_user = utente che ha accesso alla tabella
jdbc_password = password dell'utente
schedule = rappresenta, in formato Cron, la periodicità del caricamento
statement = istruzione SQL che seleziona i dati da caricare. Spesso, nella
WHERE, contiene un filtro temporale che, unitamente al parametro schedule,
permette di caricare i soli record più recenti.
Il caricamento può essere raffinato attraverso parametri aggiuntivi, si veda la
pagina:
https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html
per maggiori dettagli.
Il caricamento può essere eseguito una tantum o periodicamente.
Kibana potrà interrogare dati geografici provenienti dalla tabella caricata: la
prossima versione di questo documento conterrà un esempio significativo.
7