
Ciao, mi chiamo Evgeny, sono il team leader della divisione B2B di Citymobil. Uno dei compiti del nostro team è supportare le integrazioni per le ordinazioni di taxi dai partner e per garantire un servizio stabile dobbiamo sempre capire cosa sta succedendo nei nostri microservizi. Per questo motivo, dobbiamo monitorare costantemente i log.
In Citymobil utilizziamo il stack ELK (ElasticSearch, Logstash, Kibana) per lavorare con i log, e il volume dei dati in arrivo è enorme. Trovare tra questa massa di richieste le problematiche che possono sorgere dopo il deployment di nuovo codice è piuttosto difficile. Per una loro visualizzazione chiara, in Kibana esiste una sezione chiamata Dashboard.
Su Habr ci sono molti articoli con esempi su come configurare il stack ELK per ricevere e memorizzare dati, ma non ci sono materiali aggiornati sulla creazione di Dashboard. Pertanto, voglio mostrare come creare rappresentazioni visive dei dati in Kibana basate sui log in arrivo.
Impostazione
Per renderlo più chiaro, ho creato un'immagine Docker con ELK e Filebeat. E ho inserito nel contenitore un piccolo scritto in Go, che per il nostro esempio genererà log di test. Non entrerò nei dettagli della configurazione di ELK, ci sono già molte informazioni al riguardo su Habr.
Cloniamo il repository con la configurazione docker-compose e le impostazioni di ELK, e lo avviamo con il comando docker-compose up. Non aggiungo intenzionalmente la chiave -d, per vedere il processo di funzionamento dello stack ELK.
git clone https://github.com/et-soft/habr-elk
cd habr-elk
docker-compose up
Se tutto è configurato correttamente, nei log vedremo una registrazione (forse non subito, il processo di avvio del container con tutto lo stack può richiedere alcuni minuti):
{"type":"log","@timestamp":"2020-09-20T05:55:14Z","tags":["info","http","server","Kibana"],"pid":6,"message":"http server running at http://0:5601"}
All'indirizzo localhost:5061 dovrebbe aprirsi Kibana.


L'unica cosa che dobbiamo configurare è creare un Index Pattern per Kibana con informazioni su quali dati visualizzare. Per farlo, eseguiremo una richiesta curl o faremo una serie di azioni nell'interfaccia grafica.
$ curl -XPOST -D- 'http://localhost:5601/api/saved_objects/index-pattern'
-H 'Content-Type: application/json'
-H 'kbn-xsrf: true'
-d '{"attributes":{"title":"logstash-*","timeFieldName":"@timestamp"}}'
Creazione dell'Index Pattern tramite interfaccia grafica
Per la configurazione, scegliamo nella menu a sinistra la sezione Discover, e arriviamo alla pagina di creazione dell'Index pattern.

Cliccando sul pulsante «Crea index pattern», arriviamo alla pagina di creazione dell'indice. Nel campo «Nome del pattern dell'indice» inseriamo «logstash-*». Se tutto è configurato correttamente, sotto Kibana mostrerà gli indici corrispondenti alla regola.

Nella pagina successiva scegliamo il campo chiave con il timestamp; nel nostro caso è @timestamp.

Così si aprirà la pagina delle impostazioni dell'indice, ma al momento non sono necessarie ulteriori azioni da parte nostra.

Ora possiamo tornare alla sezione Discover, dove vedremo le registrazioni dei log.

Dashboard
Nel menu a sinistra clicchiamo sulla sezione di creazione del Dashboard e accediamo alla pagina corrispondente.

Facciamo clic su «Create new dashboard» e accederemo alla pagina per aggiungere oggetti al Dashboard.

Clicchiamo sul pulsante «Create new», e il sistema ci chiederà di selezionare il tipo di visualizzazione dei dati. In Kibana ce ne sono molti, ma esamineremo la creazione della visualizzazione grafica «Vertical Bar» e della tabella «Data Table». Gli altri tipi di visualizzazione si configurano in modo simile.

Alcuni oggetti disponibili hanno le etichette B ed E — questo significa che il formato è sperimentale o in fase di beta testing. Nel tempo, il formato potrebbe cambiare o scomparire del tutto da Kibana.
Vertical Bar
Per esempio, con «Vertical Bar» creeremo un istogramma che mostra il rapporto tra stati di risposta riusciti e non riusciti del nostro servizio. Alla fine delle impostazioni otterremo il seguente grafico:

Considereremo come riusciti tutte le richieste con uno stato di risposta = 400.
Per creare un grafico a barre verticali, dobbiamo selezionare la fonte dei dati. Selezioniamo il Pattern di Indice che abbiamo creato in precedenza.

Per impostazione predefinita, dopo aver selezionato la fonte dei dati, apparirà un grafico continuo. Configuriamolo.

Nel blocco 'Buckets', facciamo clic sul pulsante 'Add', selezioniamo 'X-axis' e configuriamo l'asse X. Vi riporteremo le etichette temporali della registrazione dei log. Nella casella 'Aggregation' scegliamo 'Date Histogram' e nel campo 'Field' selezioniamo '@timestamp', che indica il campo temporale. Lasceremo 'Minimum interval' su 'Auto', e si adatterà automaticamente alla nostra visualizzazione.

Cliccando sul pulsante 'Update', vedremo un grafico con il numero di richieste ogni 30 secondi.

Ora configurate le colonne lungo l'asse Y. Attualmente visualizziamo il numero totale di richieste nel periodo di tempo selezionato.

Modifichiamo il valore di 'Aggregation' in 'Sum Bucket', che ci permetterà di combinare i dati sulle richieste riuscite e non riuscite. Nel blocco Bucket -> Aggregation selezioniamo l'aggregazione per 'Filters' e impostiamo il filtro su 'statusCode >= 400'. Nel campo 'Custom label' indichiamo il nome del nostro indicatore per una visualizzazione più chiara nella legenda del grafico e nell'elenco generale.

Cliccando il pulsante «Update» sotto il blocco delle impostazioni, otterremo un grafico con le query problematiche.

Se si fa clic sul cerchio accanto alla legenda, apparirà una finestra in cui è possibile cambiare il colore delle colonne.

Ora aggiungiamo al grafico i dati sulle query di successo. Nella sezione «Metrics» premiamo il pulsante «Add» e scegliamo «Y-axis».

Nella metrica creata facciamo le stesse impostazioni come per le query errate. Solo nel filtro indichiamo «statusCode < 400».

Cambiando il colore della nuova colonna, otterremo una visualizzazione del rapporto tra query problematiche e di successo.

Cliccando nella parte superiore dello schermo sul pulsante «Save» e specificando un nome, vedremo il primo grafico nel Dashboard.

Data Table
Ora consideriamo la rappresentazione tabellare «Data Table». Creiamo una tabella con l'elenco di tutti gli URL a cui sono state effettuate le richieste e il numero di queste richieste. Come nell'esempio con il Vertical Bar, iniziamo scegliendo la fonte dei dati.

Dopo di ciò, sullo schermo verrà visualizzata una tabella con una colonna che mostra il numero totale di richieste per l'intervallo di tempo selezionato.

Modificheremo solo il blocco «Buckets». Premi il pulsante «Add» e scegli «Split rows».

Nel campo «Aggregation» scegliamo «Terms». E nel campo «Field» che appare, selezioniamo «url.keyword».

Inserendo nel campo «Custom label» il valore «Url» e cliccando su «Update», otteniamo la tabella desiderata con il numero di richieste per ciascun URL nel periodo di tempo selezionato.

Nella parte superiore dello schermo, premiamo di nuovo il pulsante «Save» e indichiamo il nome della tabella, per esempio Urls. Torniamo indietro al Dashboard e vediamo entrambe le visualizzazioni create.

Lavorare con il Dashboard
Quando creiamo un Dashboard, nelle impostazioni degli oggetti di visualizzazione abbiamo impostato solo i parametri fondamentali. Non ha senso fornire nei dati degli oggetti informazioni per i filtri, ad esempio, «intervallo di date», «filtraggio per user agent», «filtraggio per paese della richiesta», ecc. È molto più comodo specificare il periodo di tempo desiderato o impostare la filtrazione necessaria nel pannello delle richieste, che si trova sopra gli oggetti.
![]()
I filtri aggiunti in questo pannello verranno applicati all'intero Dashboard e tutti gli oggetti di visualizzazione si ristrutturano in base ai dati filtrati attuali.
Conclusione
Kibana è uno strumento potente che consente di visualizzare qualsiasi dato in modo intuitivo. Ho cercato di mostrare la configurazione di due principali tipi di visualizzazione. Tuttavia, anche altri tipi possono essere configurati in modo simile. E la varietà di impostazioni, che ho lasciato "fuori campo", ti permetterà di personalizzare i grafici in base alle tue esigenze.
Fonte: habr.com
