# ELK - PPT
> Segui la scaletta [qui](https://hackmd.io/6e15eM_pRpKZKGP_-28_QQ).
## Architettura
## Kibana
Per accedere alla dashboard di Kibana di Vidiemme ci sono due endpoint, uno per gli ambienti di sviluppo (dev/stag) e uno per quelli di produzione. I link sono i seguenti:
- https://elk-nonprod.vidiemme.it/
- https://elk-prod.vidiemme.it/
Per accedere potete utilizzare le vostre credenziali aziendali tramite l'accesso con Google.
___
### Cos'è uno Space
Kibana è suddiviso in vari space, ogni space rappresenta uno specifico progetto.
Alle vostre utenze sono assocati solo una parte degli space presenti su Kibana in base ai progetti in cui avete lavorato, se vi mancassero uno o più space potete segnalarlo a `xxx@vidiemme.it`
TODO
___
### Cos'è un indice
Un indice può essere definito come un tipo di meccanismo di archiviazione di dati, che consente all'utente di organizzare e accedere ai dati in modo rapido.
Invece di archiviare le informazioni come righe di dati in colonna, Elasticsearch archivia strutture di dati complesse che sono state serializzate come documenti JSON.
>Quando un documento viene archiviato, viene indicizzato ed è completamente ricercabile quasi in tempo reale, entro 1 secondo questo perchè Elasticsearch utilizza una struttura di dati chiamata "inverted index" che supporta ricerche full-text molto veloci. Un "inverted index" elenca ogni parola univoca che appare in qualsiasi documento e identifica tutti i documenti in cui si trova ogni parola.
Il layout più semplice e familiare per comprendere come è formato un indice è pensare a ciò che ti aspetteresti da un database relazionale. Puoi (molto approssimativamente) pensare a un indice come a un database.
MySQL => Databases => Tables => Columns/Rows
Elasticsearch => Indices => Types => Documents with Properties.
Un cluster Elasticsearch può contenere più indici (database), che a loro volta contengono più Types (Tables). Questi type contengono più Documents (rows) e ogni Docuemnts ha delle Properties (Columns).
___
### Index pattern
Kibana richiede un index pattern (modello) per accedere ai dati Elasticsearch che desideriamo far espolare nel nostro space (progetto). Un index pattern seleziona i dati da utilizzare e consente di definire le proprietà dei campi.
Un index pattern può puntare a uno o più indici, flusso di dati o alias di indice.
Ecco un esempio di un index pattern che punta a un indice preciso

Ecco un esempio di un index pattern che punta a più indici

Per abbinare più origini viene utilizzato il carattere jolly `*`. Ad esempio, vidiemme-boost-dev_webadmin* corrisponde vidiemme-boost-dev_webadmin-2022.09.25, vidiemme-boost-dev_webadmin-2022.09.25... così via.

Per abbinare più origini singole basta inserire i loro nomi separati da una virgola. **Non includere uno spazio dopo la virgola.**
I nostri index pattern generalmente seguono la seguente sintassi: clients-project-environment* (vidiemme-boost-dev*)
IN questo modo leggono tutto gli indici separati per ambiente

___
### Lifecycle policy
E' possibile configurare i criteri per la gestione del ciclo di vita degli indici (index lifecycle management (ILM)) per gestire automaticamente gli indici in base ai tuoi requisiti di prestazioni, resilienza e conservazione.
Ad esempio, puoi utilizzare ILM per:
* Crea un nuovo indice quando un indice raggiunge una determinata dimensione o numero di documenti
* Crea un nuovo indice ogni giorno, settimana o mese e archivia i precedenti
* Elimina gli indici obsoleti per far rispettare gli standard di conservazione dei dati
Si possono creare e gestire le policy tramite Kibana Management o le API ILM.
---
### Discover
#### Cos'è
Con Discover è possibile ottenere rapidamente informazioni dettagliate dai dati presenti nei nostri indici con la possibilità di effettuare delle ricercare e filrarli rapidamente E' possibile anche personalizzare e salvare le ricerche per poi inserirle in una dashboard.
#### Come accedere
Menù -> Analytics -> Discover

Nel dettaglio andremo ad analizzare i vari componenti della sezione:
#### Selezione Index pattern
Kibana utilizza l'index pattern per sapere dove trovare i dati di Elasticsearch quindi facciamo attenzioen a utilizzare quello corretto. E' possibile modificarlo selezioen dal menù quello corretto.

#### Campo di ricerca
Una delle potenzialità di Discover è la possibilità di combinare la ricerca di testo libero con il filtraggio basato su dati strutturati. Per cercare in tutti i campi basta inserire una semplice stringa nella barra delle query.

Mentre per cercare campi particolari e creare query più complesse abbiamo la necessità di utilizzare il [Kibana Query language](https://www.elastic.co/guide/en/kibana/7.17/kuery-query.html).
Durante la digitazione, KQL ti mostra i campi che puoi cercare e gli operatori che puoi utilizzare per costruire una query strutturata.
Di seguito alcuni esempi



#### Aggiunta Filtri
Mentre la query definisce l'insieme di documenti che ti interessa, i filtri ti consentono di concentrarti su diversi sottoinsiemi.
Puoi, ad esempio, filtrare i risultati per includere o escludere campi specifici, filtrare un valore in un intervallo e altro ancora.

#### Intervallo di tempo
E' possibile definire un intervallo di tempo per filtrare le nostre ricerche, di default è impostato sugli ultimi 15 minuti

La modifica del campo non viene eseguita in automatico al cambio dell'intervallo di tempo ma bisogna utilizzare il bottone refresh. Questo per evitare continue richieste.
#### Risultati della ricerca
Discover mostra come risultato una tabella che che contiene tutti i documenti che corrispondono alla ricerca effettuata e una rappresentazioni grafica dei risultati attraverso un grafico a base temporale.

Cliccando sulle varie colonne del grafico è possibile analizzare il dettaglio di un determinato periodo. Infatti come potete vedere dall'esempio viene modificato l'intervallod i tempo della ricerca

Per impostazione predefinita, la tabella include la colonna con l'ora e il contenuto completo del campo _source ma è possibile customizzare il layout secondo le nostre esigenze andando a definire i campi di nostro interesse nel menu "Available fields" a sinistra

Attraverso il bottone salva, in alto a destra, possiamo salvare il nostro custom layout e richiamarlo attraverso la funzioen Open. Verrà riaperto il layout senza sovrascrivere i valori di ricerca e il filtro temporale

Nella tabella è possibile espandere ogni record

Possiamo analizza i campi e i loro valori e Se troviamo un campo di nostro interesse, passando il mouse sopra il suo nome possiamo aggiungerlo ai filtri ed eseguire altri controlli.
Per visualizzare gli eventi che si sono verificati prima o dopo l'evento che stai guardando, fai clic su "**View surrounding documents**".

### APM
#### Cos'è
APM consente di monitorare i servizi e le applicazioni software in tempo reale; visualizzare informazioni dettagliate sulle prestazioni dei servizi, identificare e analizzare gli errori e monitorare le metriche a livello di host e specifiche dell'agent come le metriche di runtime JVM.
Avere accesso a informazioni dettagliate a livello di applicazione con pochi clic può ridurre drasticamente il tempo impiegato per il debug di errori, tempi di risposta lenti e arresti anomali.
#### Come accedere
Menù -> Observability -> APM

La pagina dei services fornisce una panoramica rapida e di alto livello dello stato di salute e delle prestazioni generali di tutti i servizi strumentati.

Selezionare il service per il dettaglio



Adesso vediamo nel dettaglio le varie funzionalità a disposizione:
**selezione dell'environment**
Abbiamo la possibilità di selezionare un determinato environment o tutti "All"

**selezione dei gruppi**
nel nostro caso abbiamo request, graphQl o cron
