Sammeln von VMware ESXi LOGs in Elasticsearch und Anzeigen in Grafana

Nun, heute ist ein weiterer Beitrag über das Sammeln von Protokollen, wie man sie behandelt und vor allem wie man sie visualisiert; In diesem Dokument sehen wir, wie Sie den gesamten Prozess mit den VMware ESXi-Hypervisor-Protokollen durchführen, behandeln sie mit Elastic Stack und visualisieren schließlich in Grafana, was uns interessiert, Wie könnten Fehlerprotokolle sein?, von falschen Logins…

Wir alle, die mit VMware-Infrastrukturen arbeiten, wissen, dass das gesamte Fundament von einem fabelhaften Hypervisor unterstützt wird, unsere lieben ESXi-Hosts. Ein Hypervisor basierend auf Sicherheit und Stabilität, dass wenige Probleme normalerweise geben, Aber es ist keine schlechte Idee, Ihre Protokolle an einem zentralen Ort zu sammeln, um Ihre Gesundheit zu kontrollieren. wie wir wissen,, wir können Ihre Logs in einem Syslog speichern, also nutze das aus, Wir senden die Protokolle an Logstash. Logstash wird für den Empfang und die Bestellung der Protokolle verantwortlich sein, Trennen mühsamer Textfolgen in verschiedenen Feldern mit gültigen Daten, um diese Daten schließlich an Elasticsearch zu senden und in einem Index zu speichern. Dann können wir diesen Inhalt bereits über Kibana oder Grafana grafisch visualisieren, und sehen Sie sich die Anmeldeversuche beim Host an (von SSH, GUI…), einfach Zugänge sehen, kennen die Ereignisse mit Fehlern, verschiedene Hypervisoren miteinander vergleichen, kennen wiederkehrende Fehler… und das alles wie immer in Echtzeit oder um historische Daten mit Daten der letzten 24 Stunden durchzuführen, Woche, meine, Jahr…

Zuerst müssen wir natürlich das Elastic Stack-Teil installieren, was war Logstash, Elasticsearch und Kibana; dann wäre es, jedem Hypervisor mitzuteilen, dass er die Logs an Logstash senden soll, zum Hafen, den wir wollen. dafür, wir haben viele möglichkeiten, einen Gastgeber bewirten, von GUI, CLI, desde vCenter…

Am liebsten, wenn Sie wenige Gastgeber haben, Von vCenter gehen wir zu jedem Host, in “Konfigurieren” > Erweiterte Systemeinstellungen” > und wir suchen “syslog.global”, editamos 'Syslog.global.logHost” Angabe im tcp / udp-Format://ip_adresse:PUERTO das Ziel unserer Logs. Oder noch besser mit PowerShell:

Get-VMHostSysLogServer -VMHost NOMBRE_HOST_ESXi
Set-VMHostSysLogServer -VMHost NOMBRE_HOST_ESXi -SysLogServer 'udp://ip_adresse:PUERTO
Set-VMHostSysLogServer -VMHost NOMBRE_HOST_ESXi -SysLogServer 'tcp://ip_adresse:PUERTO
Get-VMHostSysLogServer -VMHost NOMBRE_HOST_ESXi

Get-VMhostFireWallException -VMhost NOMBRE_HOST_ESXi -Name syslog
Get-VMHostFireWallException -VMHost NOMBRE_HOST_ESXi -Name Syslog | Set-VMHostFirewallException -Enabled:$Wahr.

Eingang {
        tcp {
                Typ => "ESXi"
                port => "1514"
                Tags => ["VMware","ESXi"]
        }
}

Filter {

        ob [Art] == "ESXi" {
                        grok {
                            Übereinstimmung => { "Botschaft" => [
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} Gastgeber: %{WORT:Log_nivel} %{PROG:Prozesslog}\[%{INT:Evento_id}\] \[Absender@6876 sub=%{GREEDYDATA:Titel} opID =%{GREEDYDATA:Op_id} Benutzer=%{GREEDYDATA:Benutzer}\] %{GREEDYDATA:Ereignistyp} %{GREEDYDATA:Code_event} : %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} Gastgeber: %{WORT:Log_nivel} %{PROG:Prozesslog}\[%{INT:Evento_id}\] \[Absender@6876 sub=%{GREEDYDATA:Titel} opID =%{GREEDYDATA:Op_id} Benutzer=%{GREEDYDATA:Benutzer}\] %{GREEDYDATA:Code_event}: %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} Gastgeber: %{WORT:Log_nivel} %{PROG:Prozesslog}\[%{INT:Evento_id}\] \[Absender@6876 sub=%{GREEDYDATA:Titel} opID =%{GREEDYDATA:Op_id} Benutzer=%{GREEDYDATA:Benutzer}\] \(%{GREEDYDATA:Code_event}\)",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} Gastgeber: %{WORT:Log_nivel} %{PROG:Prozesslog}\[%{INT:Evento_id}\] \[Absender@6876 sub=%{GREEDYDATA:Titel} opID =%{GREEDYDATA:Op_id}\] \[%{GREEDYDATA:Code_event}\]: %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} Gastgeber: %{WORT:Log_nivel} %{PROG:Prozesslog}\[%{INT:Evento_id}\] \[Absender@6876 sub=%{GREEDYDATA:Titel} opID =%{GREEDYDATA:Op_id}\] %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} Gastgeber: %{WORT:Log_nivel} %{PROG:Prozesslog}\[%{INT:Evento_id}\] \[Absender@6876 sub=%{GREEDYDATA:Titel}\] %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} Gastgeber: %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} Vpxa: %{WORT:Log_nivel} %{PROG:Prozesslog}\[%{INT:Evento_id}\] \[Absender@6876 sub=%{GREEDYDATA:Titel} opID =%{GREEDYDATA:Op_id}\] %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} Vpxa: %{WORT:Log_nivel} %{PROG:Prozesslog}\[%{INT:Evento_id}\] \[Absender@6876 sub=%{GREEDYDATA:Titel}\] %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} Vpxa: %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} Rhttpproxy: %{WORT:Log_nivel} %{PROG:Prozesslog}\[%{INT:Evento_id}\] \[Absender@6876 sub=%{GREEDYDATA:Titel}\] %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} Rhttpproxy: %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} apiForwarder: %{WORT:Log_nivel} %{PROG:Prozesslog}\[%{INT:Evento_id}\] \[Absender@6876 sub=%{GREEDYDATA:Titel}\] %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} VSANMGMTSVC: %{WORT:Log_nivel} %{PROG:Prozesslog}\[%{INT:Evento_id}\] \[opID =%{GREEDYDATA:Titel}\] %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} vsansystem: %{WORT:Log_nivel} %{PROG:Prozesslog}\[%{INT:Evento_id}\] \[%{GREEDYDATA:Titel}\] %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} vsansystem: %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} VMkernel: %{WORT:CPU_Kern}:%{INT:Evento_id}\)%{GREEDYDATA:Titel}: %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} VMkernel: %{WORT:CPU_Kern}:%{INT:Evento_id} opID =%{PROG:Op_id}\)%{GREEDYDATA:Titel}: %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} VMkernel: %{WORT:CPU_Kern}:%{INT:Evento_id}\)%{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} vmkwarnung: %{WORT:CPU_Kern}:%{INT:Evento_id}\)%{GREEDYDATA:Titel}: %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} fdm: %{WORT:Log_nivel} %{PROG:Prozesslog}\[%{INT:Evento_id}\] \[Absender@6876 sub=%{GREEDYDATA:Titel} opID =%{PROG:Op_id}\] %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} fdm: %{WORT:Log_nivel} %{PROG:Prozesslog}\[%{INT:Evento_id}\] \[Absender@6876 sub=%{GREEDYDATA:Titel}\] %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} hostd-probe: %{WORT:Log_nivel} %{PROG:Prozesslog}\[%{INT:Evento_id}\] \[Absender@6876 sub=%{GREEDYDATA:Titel}\] %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} %{PROG:Prozesslog}\[%{INT:Evento_id}\]: BENUTZER %{WORT:Benutzer} pid %{INT:pid} %{WORT:Prozesstyp} %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} %{PROG:Prozesslog}\[%{INT:Evento_id}\]: %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} esxtokend: %{WORT:Log_nivel} %{PROG:Prozesslog}\[%{INT:Evento_id}\] \[Absender@6876 sub=%{GREEDYDATA:Titel} opID =%{DATEN:Op_id}\] %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} kmxa: %{WORT:Log_nivel} %{PROG:Prozesslog}\[%{INT:Evento_id}\] \[Absender@6876 sub=%{GREEDYDATA:Titel} opID =%{DATEN:Op_id}\] %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} kmxa: %{WORT:Log_nivel} %{PROG:Prozesslog}\[%{INT:Evento_id}\] \[Absender@6876 sub=%{GREEDYDATA:Titel}\] %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} vobd:  \[%{WORT:Log_nivel}\] %{WORT:Log_id}: \[%{GREEDYDATA:Titel}\] %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} configStoreBackup: %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} Konfigurationsspeicher[%{INT:Evento_id}\]: %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} Herzschlag: %{WORT:Uptime_state} %{WORT:Uptime_time}, %{GREEDYDATA:MVs_on}; %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} iscsid: %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} schlau: \[%{WORT:Log_nivel}\] %{GREEDYDATA:Titel}: %{GREEDYDATA:Nachricht}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Datum} %{Hostname:Host_ESXi} %{PROG:Prozesslog}\[%{INT:Evento_id}\]: %{GREEDYDATA:Nachricht}"
                                       ]
                            }
                        }
        }
}


Ausgabe {

        ob ([Art]=="ESXi"){

                Elasticsearch {
                   Index => "vmware_esxi-%{+JJJJ.MM.tt}"
                   Gastgeber => "DIRECTION_IP_ELASTICSEARCH:9200"
                }

        }
}

Tippen Sie nun auf Logstash, also einmal mit ihm verbunden, wir erstellen durch eine Konfigurationsdatei , zum Beispiel: ‘/etc/logstash/conf.d/vmware-esxi.conf’. Und es wird dort sein, wo wir den Abhörport angeben, wenn wir tcp oder udp wählen und die Filter auch kommen. So wie ich immer darum bitte, dass die Gurus mich nicht mit Steinen bewerfen, Diese Groks sind jedoch für das Parsen von VMware ESXi-Protokollen gültig 7.0, ja, verbesserungswürdig und viel 😉 Gut, Nachdem wir die Protokolle in Blöcke unterteilt haben, geben wir an, dass wir sie in Elasticsearch speichern werden, und wir setzen einen Index. Denken Sie daran, nicht wie ich zu sein und fügen Sie auch Anmeldeinformationen hinzu, nämlich: Nutzername & Passwort.

Sobald die Konfigurationsdatei erstellt wurde, Denken Sie daran, den Logstash-Dienst neu zu starten, um die neue Konfiguration neu zu laden. dann, Wir werden nach Kibana gehen und sobald die Daten eingegeben sind, können wir zu "Management" gehen. > „Stapelverwaltung“ > „Kibana“ > „Indexmuster“ > "Indexmuster erstellen", um das Indexmuster zu erstellen, ich sagte:, wie gewöhnlich (in diesem Fall und ohne die Anführungszeichen) ‘Vmware_esxi-*’ und wir haben die Daten bereits in Elasticsearch korrekt gespeichert. Jetzt könnten wir uns von "Discover" mit unserem VMware ESXi-Index verbinden und visualisieren, dass er Daten sammelt, die alle Hosts senden…

Und zum Schluss, nach dem Erstellen des Index in Kibana, Jetzt sollten wir in Grafana eine „Datenquelle“ erstellen, die auf unsere Elasticsearch und den neu erstellten VMware ESXi-Index verweist. Dann lässt es schon die Fantasie fliegen, ein Dashboard mit verschiedenen Panels erstellen, mit verschiedenen Daten zur Anzeige, ein Stilpanel Sankey um Quell-/Ziel-IPs und den gesendeten Datenverkehr zu sehen, im Spaltenformat, in zeichnen um spezifische Daten von beispielsweise Zugriffsversuchen zu sehen, Korrekt, falsch, Machen Sie ein Top mit den Fehlerprotokollen und versuchen Sie, sie zu lösen, Vergleichen Sie die „Normalität zwischen verschiedenen Gastgebern“’ der Häufigkeit bestimmter Infologs, Warnung, Error….

wie immer, all dies, um zu versuchen, dich zu inspirieren, wenn du es brauchst, Ideen aufnehmen und verbessern, Damit können Sie in Echtzeit sehen, was in Ihren ESXi passiert, eine automatische Erfrischung jeden 10 Sekunden ist sehr beeindruckend, Es wird uns auch helfen, die Zusammenfassung des letzten Tages zu analysieren, oder wissen, wenn etwas Seltsames passiert ... Wie immer, Vielen Dank an alle, die diese Art von Inhalten in sozialen Netzwerken verschieben!!! 😉