Collecte des journaux VMware ESXi dans Elasticsearch et visualisation de ceux-ci dans Grafana

Eh bien, aujourd’hui, il est temps pour un autre article sur la collecte de journaux, comment les traiter et surtout comment les visualiser; dans ce document, nous allons voir comment effectuer l’ensemble du processus avec les journaux de l’hyperviseur VMware ESXi, les traiter avec Elastic Stack et enfin visualiser dans Grafana ce qui nous intéresse, tels que les journaux d’erreurs, Connexions incorrectes…

Tous ceux d’entre nous qui travaillent avec des infrastructures VMware savent que l’ensemble de la fondation est soutenu par un hyperviseur fabuleux, nos hôtes ESXi bien-aimés. Un hyperviseur basé sur la sécurité et la stabilité, qu’ils posent généralement peu de problèmes, mais que cela ne fait pas de mal de rassembler leurs journaux dans un endroit centralisé pour suivre leur santé. Comme nous le savons, Nous pouvons stocker vos journaux dans un syslog, Donc, en profiter, nous enverrons les journaux à Logstash. Logstash se chargera de recevoir et de commander les journaux, Séparation de chaînes de texte fastidieuses en différents champs avec des données valides, pour enfin envoyer ces données à Elasticsearch et les stocker dans un index. Ensuite, grâce à Kibana ou Grafana, nous pourrons visualiser ce contenu de manière graphique, et afficher les tentatives de connexion à l’hôte (par SSH, Interface graphique…), Voir simplement les accès, Comprendre les événements ayant échoué, Comparer différents hyperviseurs entre eux, Connaître les erreurs répétitives… Et tout cela comme toujours en temps réel ou pour faire des données historiques des dernières 24 heures, semaine, mois, année…

Tout d’abord, nous devons évidemment faire installer la partie Elastic Stack, Ce qui a été Logstash, Recherche élastique et Kibana; il s’agirait alors de dire à chaque hyperviseur d’envoyer les Logs à Logstash, vers le port de notre choix. Arrête ça, Nous avons plusieurs façons de le faire, Hôte à hôte, à partir de l’interface graphique, CLI, à partir de vCenter…

Le plus si vous avez peu d’hôtes, à partir de vCenter, nous allons à chaque hôte, dans “Configurer” > Paramètres système avancés” > et nous cherchons “syslog.global”, nous modifions 'Syslog.global.logHost” Indication au format TCP/UDP://DIRECCION_IP:PORT la destination de nos Logs. Ou mieux encore avec 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 -Nom syslog Get-VMHostFireWallException -VMHost NOMBRE_HOST_ESXi -Nom Syslog | Set-VMHostFirewallException -Enabled:$Vrai.

Entrée {
        TCP {
                type => "ESXi"
                port => "1514"
                Mots-clés => ["VMware","ESXi"]
        }
}

filtre {

        si [type] == "ESXi" {
                        Grok {
                            match => { "Message" => [
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} Hostd: %{MOT:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:Titre} opID=%{GREEDYDATA:Op_id} utilisateur=%{GREEDYDATA:Utilisateur}\] %{GREEDYDATA:Evento_tipo} %{GREEDYDATA:Evento_codigo} : %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} Hostd: %{MOT:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:Titre} opID=%{GREEDYDATA:Op_id} utilisateur=%{GREEDYDATA:Utilisateur}\] %{GREEDYDATA:Evento_codigo}: %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} Hostd: %{MOT:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:Titre} opID=%{GREEDYDATA:Op_id} utilisateur=%{GREEDYDATA:Utilisateur}\] \(%{GREEDYDATA:Evento_codigo}\)",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} Hostd: %{MOT:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:Titre} opID=%{GREEDYDATA:Op_id}\] \[%{GREEDYDATA:Evento_codigo}\]: %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} Hostd: %{MOT:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:Titre} opID=%{GREEDYDATA:Op_id}\] %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} Hostd: %{MOT:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:Titre}\] %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} Hostd: %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} Vpxa: %{MOT:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:Titre} opID=%{GREEDYDATA:Op_id}\] %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} Vpxa: %{MOT:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:Titre}\] %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} Vpxa: %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} Rhttpproxy: %{MOT:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:Titre}\] %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} Rhttpproxy: %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} apiForwarder: %{MOT:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:Titre}\] %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} VSANMGMTSVC: %{MOT:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[opID=%{GREEDYDATA:Titre}\] %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} VSANSYSTEM: %{MOT:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[%{GREEDYDATA:Titre}\] %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} VSANSYSTEM: %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} vmkernel: %{MOT:CPU_core}:%{INT:Evento_id}\)%{GREEDYDATA:Titre}: %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} vmkernel: %{MOT:CPU_core}:%{INT:Evento_id} opID=%{PROG:Op_id}\)%{GREEDYDATA:Titre}: %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} vmkernel: %{MOT:CPU_core}:%{INT:Evento_id}\)%{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} vmkwarning: %{MOT:CPU_core}:%{INT:Evento_id}\)%{GREEDYDATA:Titre}: %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} Fdm: %{MOT:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:Titre} opID=%{PROG:Op_id}\] %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} Fdm: %{MOT:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:Titre}\] %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} hostd-sonde: %{MOT:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:Titre}\] %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} %{PROG:Log_proceso}\[%{INT:Evento_id}\]: UTILISATEUR %{MOT:Utilisateur} Pid %{INT:Pid} %{MOT:Tipo_proceso} %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} %{PROG:Log_proceso}\[%{INT:Evento_id}\]: %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} esxtokend: %{MOT:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:Titre} opID=%{DATE:Op_id}\] %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} Kmxa: %{MOT:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:Titre} opID=%{DATE:Op_id}\] %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} Kmxa: %{MOT:Log_nivel} %{PROG:Log_proceso}\[%{INT:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:Titre}\] %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} VOBD:  \[%{MOT:Log_nivel}\] %{MOT:Log_id}: \[%{GREEDYDATA:Titre}\] %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} configStoreBackup: %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} ConfigStore[%{INT:Evento_id}\]: %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} battement: %{MOT:Uptime_estado} %{MOT:Uptime_tiempo}, %{GREEDYDATA:MVs_encendidas}; %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} ISCSID: %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} intelligent: \[%{MOT:Log_nivel}\] %{GREEDYDATA:Titre}: %{GREEDYDATA:Message}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:Date} %{NOM D’HÔTE:Host_ESXi} %{PROG:Log_proceso}\[%{INT:Evento_id}\]: %{GREEDYDATA:Message}"
                                       ]
                            }
                        }
        }
}


sortie {

        si ([type]=="ESXi"){

                Recherche élastique {
                   indice => "vmware_esxi %{+AAAA. MM.jj}"
                   hôtes=> "DIRECCION_IP_ELASTICSEARCH:9200"
                }

        }
}

Appuyez maintenant sur Logstash, Donc, une fois connecté à celui-ci, Nous créons par un fichier de configuration , Par exemple: '/etc/logstash/conf.d/vmware-esxi.conf'. Et c’est là que nous indiquerons le port d’écoute, Si nous choisissons TCP ou UDP et que viennent aussi les filtres. Tout comme je demande toujours aux gourous de ne pas me jeter la pierre, mais ces groks sont valides pour l’analyse des journaux VMware ESXi 7.0, Bien sûr, Améliorable et beaucoup de 😉 bien, après avoir séparé les journaux en morceaux, nous vous dirons que nous allons le stocker dans Elasticsearch, et nous mettons un indice. N’oubliez pas de ne pas être comme moi et ajoutez également des références, C’est: nom d’utilisateur & mot de passe.

Une fois le fichier de configuration créé, n’oubliez pas de redémarrer le service Logstash pour recharger la nouvelle configuration. Après, nous irons sur Kibana et une fois que les données arriveront, nous pourrons aller dans « Gestion » > « Gestion de la pile » > « Kibana » > « Modèles d’indice » > « Create index pattern » pour créer le modèle d’index, Comme je l’ai dit, comme d'habitude (dans ce cas et sans les guillemets) 'vmware_esxi-*' et nous aurons les données déjà stockées correctement dans Elasticsearch. Nous pouvons maintenant nous connecter depuis « Discover » à notre index VMware ESXi et visualiser qu’il collecte des données, que tous les hôtes envoient…

Et pour finir, après la création de l’index dans Kibana, maintenant, dans Grafana, nous devons créer une « source de données » qui pointe vers notre Elasticsearch et l’index VMware ESXi nouvellement créé. Ensuite, il s’agit de laisser libre cours à votre imagination, créer un tableau de bord avec différents tableaux de bord, avec différentes données à visualiser, Un panneau de style Sankey pour afficher les adresses IP d’origine/de destination et le trafic envoyé, au format colonne, dans pat Pour afficher des données spécifiques, par exemple des tentatives de connexion, C’est bien ça, Incorrect, Rechargez les journaux d’erreurs et essayez de les corriger, comparer entre différents hôtes le 'normal'’ de la fréquence de certains journaux d’informations, avertissement, erreur….

Comme d'habitude, tout cela pour essayer de vous inspirer si vous en avez besoin, prendre des idées et les améliorer, ainsi, avec cela, vous pourrez voir ce qui se passe sur vos ESXi en temps réel, Mettre un rafraîchissement automatique tous les 10 secondes est très impressionnant, Cela nous aidera également à analyser le résumé du dernier jour, ou savoir quand quelque chose d’étrange se produit... Comme d'habitude, Merci à tous et au plus grand merci avec lequel vous déplacez ce type de contenu sur les réseaux sociaux!!! 😉

Articles recommandés

Auteur

nheobug@bujarra.com
Autor del blog Bujarra.com Cualquier necesidad que tengas, N’hésitez pas à me contacter, J’essaierai de vous aider chaque fois que je le pourrai, Partager, c’est vivre ;) . Profiter des documents!!!