Raccolta dei LOG di VMware ESXi in Elasticsearch e visualizzazione in Grafana

Bene, oggi è il momento di un altro post sulla raccolta dei log, come trattarli e soprattutto come visualizzarli; in questo documento vedremo come eseguire l'intero processo con i log dell'hypervisor VMware ESXi, trattarli con Elastic Stack e infine visualizzare in Grafana ciò che ci interessa, come i log degli errori, Accessi errati…

Tutti noi che lavoriamo con le infrastrutture VMware sappiamo che l'intera base è supportata da un favoloso hypervisor, i nostri amati host ESXi. Un hypervisor basato su sicurezza e stabilità, che di solito danno pochi problemi, ma che non fa male raccogliere i loro registri in un luogo centralizzato per tenere traccia della loro salute. Come sappiamo, Possiamo memorizzare i tuoi log in un syslog, Quindi approfittarne, invieremo i log a Logstash. Logstash si occuperà della ricezione e dell'ordine dei log, Separazione di noiose stringhe di testo in campi diversi con dati validi, per inviare infine questi dati a Elasticsearch e memorizzarli in un indice. Quindi, attraverso Kibana o Grafana, saremo in grado di visualizzare quel contenuto in modo grafico, e visualizzare i tentativi di accesso all'host (di SSH, Interfaccia grafica…), Visualizzare semplicemente gli accessi, Informazioni sugli eventi non riusciti, Confronta tra loro diversi hypervisor, Conosci gli errori ripetitivi… E tutto questo come sempre in tempo reale o per fare dati storici delle ultime 24 ore, settimana, mese, anno…

Per prima cosa dobbiamo ovviamente avere installato la parte Elastic Stack, Cosa è stato Registro, Ricerca elastica e Kibana; quindi sarebbe quello di dire a ciascun hypervisor di inviare i log a Logstash, al porto di nostra scelta. Smettila, Abbiamo molti modi per farlo, Da host a host, dalla GUI, CLI, da vCenter…

Il più simile se hai pochi host, da vCenter andiamo a ciascun host, in “Configurare” > Impostazioni di sistema avanzate” > e cerchiamo “syslog.global”, modifichiamo 'Syslog.global.logHost” Indicazione in formato TCP/UDP://DIRECCION_IP:PORT la destinazione dei nostri Log. O meglio ancora con PowerShell:

Get-VMHostSysLogServer -VMHost NOMBRE_HOST_ESXi
Set-VMHostSysLogServer -VMHost NOMBRE_HOST_ESXi -SysLogServer 'udp://DIRECCION_IP:PUERTO
Set-VMHostSysLogServer -VMHost NOMBRE_HOST_ESXi -SysLogServer 'tcp://DIRECCION_IP:PORT Get-VMHostSysLogServer -VMHost NOMBRE_HOST_ESXi Get-VMhostFireWallException -VMhost NOMBRE_HOST_ESXi -Nome syslog Get-VMHostFireWallException -VMHost NOMBRE_HOST_ESXi -Nome Syslog | Set-VMHostFirewallException -Abilitato:$Vero.

Immissione {
        TCP {
                tipo => "ESXi"
                porta => "1514"
                tag => ["VMware","ESXi"]
        }
}

filtro {

        se [digitare] == "ESXi" {
                        Grok {
                            corrispondenza => { "Messaggio" => [
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} Ospitato: %{PAROLA:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{DATI GREEDYDATA:Titolo} opID=%{DATI GREEDYDATA:Op_id} utente=%{DATI GREEDYDATA:Utente}\] %{DATI GREEDYDATA:Evento_tipo} %{DATI GREEDYDATA:Evento_codigo} : %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} Ospitato: %{PAROLA:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{DATI GREEDYDATA:Titolo} opID=%{DATI GREEDYDATA:Op_id} utente=%{DATI GREEDYDATA:Utente}\] %{DATI GREEDYDATA:Evento_codigo}: %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} Ospitato: %{PAROLA:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{DATI GREEDYDATA:Titolo} opID=%{DATI GREEDYDATA:Op_id} utente=%{DATI GREEDYDATA:Utente}\] \(%{DATI GREEDYDATA:Evento_codigo}\)",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} Ospitato: %{PAROLA:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{DATI GREEDYDATA:Titolo} opID=%{DATI GREEDYDATA:Op_id}\] \[%{DATI GREEDYDATA:Evento_codigo}\]: %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} Ospitato: %{PAROLA:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{DATI GREEDYDATA:Titolo} opID=%{DATI GREEDYDATA:Op_id}\] %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} Ospitato: %{PAROLA:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{DATI GREEDYDATA:Titolo}\] %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} Ospitato: %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} Vpxa: %{PAROLA:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{DATI GREEDYDATA:Titolo} opID=%{DATI GREEDYDATA:Op_id}\] %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} Vpxa: %{PAROLA:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{DATI GREEDYDATA:Titolo}\] %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} Vpxa: %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} Rhttpproxy: %{PAROLA:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{DATI GREEDYDATA:Titolo}\] %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} Rhttpproxy: %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} apiForwarder: %{PAROLA:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{DATI GREEDYDATA:Titolo}\] %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} VSANMGMTSVC: %{PAROLA:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[opID=%{DATI GREEDYDATA:Titolo}\] %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} VSANSYSTEM: %{PAROLA:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[%{DATI GREEDYDATA:Titolo}\] %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} VSANSYSTEM: %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} vmkernel: %{PAROLA:CPU_core}:%{INT:Evento_id}\)%{DATI GREEDYDATA:Titolo}: %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} vmkernel: %{PAROLA:CPU_core}:%{INT:Evento_id} opID=%{PROG:Op_id}\)%{DATI GREEDYDATA:Titolo}: %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} vmkernel: %{PAROLA:CPU_core}:%{INT:Evento_id}\)%{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} vmkwarning: %{PAROLA:CPU_core}:%{INT:Evento_id}\)%{DATI GREEDYDATA:Titolo}: %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} Fdm: %{PAROLA:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{DATI GREEDYDATA:Titolo} opID=%{PROG:Op_id}\] %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} Fdm: %{PAROLA:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{DATI GREEDYDATA:Titolo}\] %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} hostd-probe: %{PAROLA:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{DATI GREEDYDATA:Titolo}\] %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} %{PROG:Log_proceso}\[%{INT:Evento_id}\]: UTENTE %{PAROLA:Utente} Pid %{INT:Pid} %{PAROLA:Tipo_proceso} %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} %{PROG:Log_proceso}\[%{INT:Evento_id}\]: %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} esxtokend: %{PAROLA:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{DATI GREEDYDATA:Titolo} opID=%{DATTERO:Op_id}\] %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} Kmxa: %{PAROLA:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{DATI GREEDYDATA:Titolo} opID=%{DATTERO:Op_id}\] %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} Kmxa: %{PAROLA:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{DATI GREEDYDATA:Titolo}\] %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} vobd:  \[%{PAROLA:Log_nivel}\] %{PAROLA:Log_id}: \[%{DATI GREEDYDATA:Titolo}\] %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} configStoreBackup: %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} ConfigStore[%{INT:Evento_id}\]: %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} battito: %{PAROLA:Uptime_estado} %{PAROLA:Uptime_tiempo}, %{DATI GREEDYDATA:MVs_encendidas}; %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} Codice ISCSID: %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} intelligente: \[%{PAROLA:Log_nivel}\] %{DATI GREEDYDATA:Titolo}: %{DATI GREEDYDATA:Messaggio}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Dattero} %{NOME HOST:Host_ESXi} %{PROG:Log_proceso}\[%{INT:Evento_id}\]: %{DATI GREEDYDATA:Messaggio}"
                                       ]
                            }
                        }
        }
}


prodotto {

        se ([digitare]=="ESXi"){

                Ricerca elastica {
                   indice => "vmware_esxi-%{+AAAA. MM.dd}"
                   hosts=> "DIRECCION_IP_ELASTICSEARCH:9200"
                }

        }
}

Ora tocca Logstash, Quindi, una volta collegato ad esso, Creiamo da un file di configurazione , Per esempio: '/etc/logstash/conf.d/vmware-esxi.conf'. Ed è qui che indicheremo la porta di ascolto, Se scegliamo TCP o UDP e arrivano anche i filtri. Così come chiedo sempre che i guru non mi lancino pietre, ma questi grok sono validi per l'analisi dei log di VMware ESXi 7.0, Certo, Migliorabile e molto 😉 buono, dopo aver separato i log in blocchi, ti diremo che li memorizzeremo in Elasticsearch, e mettiamo un indice. Ricordati di non essere come me e aggiungi anche le credenziali, Questo è: nome utente & parola d’ordine.

Una volta creato il file di configurazione, ricordarsi di riavviare il servizio Logstash per ricaricare la nuova configurazione. Dopo, andremo a Kibana e una volta che i dati arriveranno potremo andare su "Gestione" > "Gestione dello stack" > "Kibana" > "Modelli di indice" > "Crea modello di indice" per creare il modello di indice, Come ho detto, come al solito (in questo caso e senza virgolette) 'vmware_esxi-*' e avremo i dati già memorizzati correttamente in Elasticsearch. Ora possiamo connetterci da "Discover" al nostro indice VMware ESXi e visualizzare che sta raccogliendo dati, che tutti gli host inviano…

E per finire, dopo aver creato l'indice in Kibana, ora in Grafana dovremmo creare una "Data Source" che punti al nostro Elasticsearch e all'indice VMware ESXi appena creato. Allora si tratta di dare libero sfogo alla tua immaginazione, creare una Dashboard con diverse Dashboard, con dati diversi da visualizzare, Un pannello di stile Sankey per visualizzare gli IP di origine/destinazione e il traffico inviato, in formato colonna, in stallo per visualizzare dati specifici, ad esempio i tentativi di accesso, Corretto, Scorretto, Ricarica i log degli errori e prova a risolverli, Confrontare tra diversi host il 'normale'’ della frequenza di alcuni log di informazioni, avvertimento, errore….

Come al solito, tutto questo per cercare di ispirarti se ne hai bisogno, per prendere le idee e migliorarle, quindi con questo sarai in grado di vedere cosa sta succedendo sui tuoi ESXi in tempo reale, Mettere un aggiornamento automatico ogni 10 secondi è molto impressionante, Ci aiuterà anche ad analizzare il riassunto dell'ultimo giorno, o sapere quando succede qualcosa di strano... Come al solito, Grazie a tutti e al massimo con cui muovete questo tipo di contenuti sui social network!!! 😉

Post consigliati

Autore

nheobug@bujarra.com
Autor del blog Bujarra.com Cualquier necesidad que tengas, Non esitate a contattarmi, Cercherò di aiutarti ogni volta che potrò, Condividere è vivere ;) . Goditi i documenti!!!

Utilizzo di Automap in NagVis

16 Settembre 2021