Ubiquiti UniFi LOGs in Elasticsearch sammeln und in Grafana visualisieren

Druckfreundlich, PDF & Email

Und wir machen weiter mit noch seltsameren Dingen… heute die erste zum Sammeln von Protokollen in der Ubiquiti Unifi Umgebung, unserer APs, Schalter… Zum zweiten Mal analysieren wir., Wir behandeln die Logs mit Logstash und zum Nachtisch speichern wir sie in Elasticsearch, und das i-Tüpfelchen wird die Visualisierung mit Grafana sein. All dies, um in Echtzeit zu kontrollieren, was in unserer Kommunikationsinfrastruktur passiert, der versucht, auf die Wisfis zuzugreifen…

Nun, was ich gesagt habe, wenn wir ein paar Ubiquiti haben, die einen Service anbieten, und wir wissen wollen, was dort passiert, Wer kommuniziert mit wem?… Ich war eher neugierig auf den WiFi-Teil, Anzeigen von Verbindungsversuchen, Gesundheit der Kunden… Jeder wird visualisieren, was ihn am meisten interessiert. Wir beginnen also damit, die UniFi-Konsole anzuweisen, die Protokolle in einem Syslog zu speichern, Unser Logstash sendet die Protokolle und ich hinterlasse Ihnen eine Beispieldatei, um die gesammelten Daten zu filtern und in interessante Felder unterteilen zu können, Dieselbe Konfigurationsdatei zeigt an, dass die Informationen, die bereits in verschiedene Felder unterteilt sind, in einem Elasticsearch-Index gespeichert sind. Und wir werden mit Kibana oder Grafana abschließen, indem wir in einem Dashboard die Informationen visualisieren, die uns interessieren, und zwar in dem Format, das uns interessiert.

Zuerst müssen wir natürlich den Elastic Stack-Teil installiert haben, Was wurde Logstash, Elasticsearch (Englisch) und Kibana; Dann aktivieren wir das Remote-Syslog über die UniFi Controller-Konsole > “Einstellungen” > “Systemeinstellungen” > “Controller-Konfiguration” > “Remote-Protokollierung”, und nur das Aktivieren des Syslog-Teils reicht uns aus, ohne Netconsole. Wir geben die IP-Adresse unseres Logstash und einen ungenutzten zufälligen Port an, an den die Protokolle gesendet werden.

Eingabe {
        UDP {
                Typ => "UniFi"
                Anschluss => "1601"
                -Tags => ["UniFi"]
        }
}

Filter {

        wenn [Art] == "UniFi" {
                        Begreifen {
                            Übereinstimmung => { "Nachricht" => [
                              "^<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{WORT:UniFi_MAC},%{GIERIGE DATEN:UniFi_Firmware}: %{PROG:Proceso_nombre}: \[%{ZAHL:Proceso_pid}\] \[%{DATUM:Proceso_tarea}\] Zeitüberschreitung bei DNS-Anforderung; \[STA: %{COMMONMAC:Cliente_MAC}\]\[FRAGE: %{GIERIGE DATEN:Cliente_consulta}\] \[DNS_SERVER :%{IPV4}\] \[TXN_ID %{DATUM:Txn_id}\] \[BERICHT %{ZAHL:Cliente_puerto_origen}\]",
                              "^<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{WORT:UniFi_MAC},%{GIERIGE DATEN:UniFi_Firmware}: %{PROG:Proceso_nombre}: \[%{ZAHL:Proceso_pid}\] \[%{DATUM:Proceso_tarea}\] %{GIERIGE DATEN:Nachricht}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{WORT:UniFi_MAC},%{GIERIGE DATEN:UniFi_Firmware}: : %{PROG:Proceso_nombre}\[%{ZAHL:Proceso_pid}\]: wireless_agg_stats.log_sta_anomalien(\): bssid=%{COMMONMAC:BSSID_MAC} Radius=%{WORT:BSSID_radio} VAP=%{WORT:Vap} sta=%{COMMONMAC:Cliente_MAC} satisfaction_now=%{ZAHL:Cliente_satisfaccion} Anomalien=%{GIERIGE DATEN:Cliente_anomalia}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{WORT:UniFi_MAC},%{GIERIGE DATEN:UniFi_Firmware}: : %{PROG:Proceso_nombre}\[%{ZAHL:Proceso_pid}\]: \[%{DATUM:Proceso_tarea}\].stahtd_dump_event(\): \{\"query_%{ZAHL:Consulta_id}\":\"%{HOSTNAME:Consulta_FQDN}\",\"mac\":\"%{COMMONMAC:Cliente_MAC}\",\"message_type\":\"%{DATUM:Mensaje_tipo}\",\"query_server_%{ZAHL:Consulta_id}\":\"%{IPV4:IP_servidor}\",\"assoc_status\":\"%{ZAHL:Asociacion_estado}\",\"vap\":\"%{WORT:Vap}\",\"event_type\":\"%{DATUM:Evento_tipo}\"\}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{WORT:UniFi_MAC},%{GIERIGE DATEN:UniFi_Firmware}: : %{PROG:Proceso_nombre}\[%{ZAHL:Proceso_pid}\]: \[%{DATUM:Proceso_tarea}\].stahtd_dump_event(\): \{\"dns_resp_seen\":\"%{WORT:DNS_resp_seen}\",\"message_type\":\"%{DATUM:Mensaje_tipo}\",\"mac\":\"%{COMMONMAC:Cliente_MAC}\",\"vap\":\"%{WORT:Vap}\",\"assoc_status\":\"%{ZAHL:Asociacion_estado}\",\"event_type\":\"%{DATUM:Evento_tipo}\",\"event_id\":\"%{ZAHL:Evento_id}\",\"arp_reply_gw_seen":\"%{WORT:ARP_resp_seen}\",\"auth_ts\":\"%{ZAHL:Auth_ts}\"\}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{WORT:UniFi_MAC},%{GIERIGE DATEN:UniFi_Firmware}: : %{PROG:Proceso_nombre}\[%{ZAHL:Proceso_pid}\]: \[%{DATUM:Proceso_tarea}\].stahtd_dump_event(\): \{\"query_server_%{ZAHL:Consulta_id}\":\"%{IPV4}\",\"query_%{ZAHL:Consulta_id}\":\"%{HOSTNAME:Consulta_FQDN}\",\"mac\":\"%{COMMONMAC:Cliente_MAC}\",\"message_type\":\"%{DATUM:Mensaje_tipo}\",\"assoc_status\":\"%{ZAHL:Asociacion_estado}\",\"vap\":\"%{WORT:Vap}\",\"event_type\":\"%{DATUM:Evento_tipo}\"\}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{WORT:UniFi_MAC},%{GIERIGE DATEN:UniFi_Firmware}: : %{PROG:Proceso_nombre}\[%{ZAHL:Proceso_pid}\]: \[%{DATUM:Proceso_tarea}\].stahtd_dump_event(\): \{\"query_server_%{ZAHL:Consulta_id}\":\"%{IPV4}\",\"mac\":\"%{COMMONMAC:Cliente_MAC}\",\"message_type\":\"%{DATUM:Mensaje_tipo}\",\"vap\":\"%{WORT:Vap}\",\"%{DATUM:Evento_tipo}\",\"query_%{ZAHL:Consulta_id}\":\"%{HOSTNAME:Consulta_FQDN}\",\"assoc_status\":\"%{ZAHL:Asociacion_estado}\"\}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{WORT:UniFi_MAC},%{GIERIGE DATEN:UniFi_Firmware}: : %{PROG:Proceso_nombre}\[%{ZAHL:Proceso_pid}\]: \[%{DATUM:Proceso_tarea}\].stahtd_dump_event(\): \{\"mac\":\"%{COMMONMAC:Cliente_MAC}\",\"message_type\":\"%{DATUM:Mensaje_tipo}\",\"assoc_status\":\"%{ZAHL:Asociacion_estado}\",\"vap\":\"%{WORT:Vap}\",\"event_type\":\"%{DATUM:Evento_tipo}\":\"%{ZAHL:Evento_id}\"\}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{WORT:UniFi_MAC},%{GIERIGE DATEN:UniFi_Firmware}: : %{PROG:Proceso_nombre}\[%{ZAHL:Proceso_pid}\]: \[%{DATUM:Proceso_tarea}\].stahtd_dump_event(\): \{\"mac\":\"%{COMMONMAC:Cliente_MAC}\",\"message_type\":\"%{DATUM:Mensaje_tipo}\",\"vap\":\"%{WORT:Vap}\",\"query_server_%{ZAHL:Consulta_id}\":\"%{IPV4}\",\"event_type\":\"%{DATUM:Evento_tipo}\",\"assoc_status\":\"%{ZAHL:Asociacion_estado}\",\"query_%{ZAHL:Consulta_id}\":\"%{HOSTNAME:Consulta_FQDN}\"\}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{WORT:UniFi_MAC},%{GIERIGE DATEN:UniFi_Firmware}: : %{PROG:Proceso_nombre}\[%{ZAHL:Proceso_pid}\]: \[%{DATUM:Proceso_tarea}\].stahtd_dump_event(\): \{\"dns_resp_seen\":\"%{WORT:DNS_resp_seen}\",\"mac\":\"%{COMMONMAC:Cliente_MAC}\",\"message_type\":\"%{DATUM:Mensaje_tipo}\",\"assoc_status\":\"%{ZAHL:Asociacion_estado}\",\"vap\":\"%{WORT:Vap}\",\"event_type\":\"%{DATUM:Evento_tipo}\",\"event_id\":\"%{ZAHL:Evento_id}\",\"auth_ts\":\"%{ZAHL:Auth_ts}\"\}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{WORT:UniFi_MAC},%{GIERIGE DATEN:UniFi_Firmware}: : %{PROG:Proceso_nombre}\[%{ZAHL:Proceso_pid}\]: \[%{DATUM:Proceso_tarea}\].stahtd_dump_event(\): \{\"dns_resp_seen\":\"%{WORT:DNS_resp_seen}\",\"message_type\":\"%{DATUM:Mensaje_tipo}\",\"mac\":\"%{COMMONMAC:Cliente_MAC}\",\"ip_assign_type\":\"%{DATUM:Tipo_asignacion_ip}\",\"vap\":\"%{WORT:Vap}\",\"assoc_status\":\"%{ZAHL:Asociacion_estado}\",\"event_type\":\"%{DATUM:Evento_tipo}\",\"auth_ts\":\"%{ZAHL:Auth_ts}\",\"wpa_auth_delta\":\"%{ZAHL:WPA_auth_delta}\",\"assoc_delta\":\"%{ZAHL:Assoc_delta}\",\"auth_delta\":\"%{ZAHL:Auth_delta}\",\"event_id\":\"%{ZAHL:Evento_id}\"\}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{WORT:UniFi_MAC},%{GIERIGE DATEN:UniFi_Firmware}: %{PROG:Proceso_nombre}: %{WORT:Vap}: STA %{COMMONMAC:Cliente_MAC} %{DATUM:Proceso_tarea}: %{GIERIGE DATEN:Nachricht}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{WORT:UniFi_MAC},%{GIERIGE DATEN:UniFi_Firmware}: : %{PROG:Proceso_nombre}\[%{ZAHL:Proceso_pid}\]: wevent.ubnt_custom_event\(\): %{DATUM:Evento_tipo} %{WORT:Vap}: %{COMMONMAC:Cliente_MAC} / %{IPV4:Cliente_ip}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{WORT:UniFi_MAC},%{GIERIGE DATEN:UniFi_Firmware}: : %{PROG:Proceso_nombre}\[%{ZAHL:Proceso_pid}\]: wevent.ubnt_custom_event\(\): %{DATUM:Evento_tipo} %{WORT:Vap}: %{COMMONMAC:Cliente_MAC} / %{ZAHL:Evento_id}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{WORT:UniFi_MAC},%{GIERIGE DATEN:UniFi_Firmware}: : %{PROG:Proceso_nombre}\[%{ZAHL:Proceso_pid}\]: %{GIERIGE DATEN:Nachricht}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{WORT:UniFi_MAC},%{GIERIGE DATEN:UniFi_Firmware}: %{PROG:Proceso_nombre}: %{DATUM:Proceso_tarea}\[%{ZAHL:Proceso_pid}\]: %{GIERIGE DATEN:Aufgabe}: %{GIERIGE DATEN:Nachricht}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{WORT:UniFi_MAC},%{GIERIGE DATEN:UniFi_Firmware}: %{PROG:Proceso_nombre}: %{DATUM:Proceso_tarea} %{COMMONMAC:Cliente_MAC} %{WORT:Vap} \(%{GIERIGE DATEN:Nachricht}\)",
                              "^<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{WORT:UniFi_MAC},%{GIERIGE DATEN:UniFi_Firmware}: %{UNIXPATH:Proceso_nombre}\[%{ZAHL:Proceso_pid}\]: %{GIERIGE DATEN:Nachricht}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{WORT:UniFi_MAC},%{GIERIGE DATEN:UniFi_Firmware}: %{PROG:Proceso_nombre}: \[%{ZAHL:Proceso_pid}\] %{GIERIGE DATEN:Nachricht}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{WORT:UniFi_MAC},%{GIERIGE DATEN:UniFi_Firmware}: %{PROG:Proceso_nombre}: %{DATUM:Proceso_tarea}: %{GIERIGE DATEN:Nachricht}"
                                       ]
                            }
                        }

                        Stumm {
                          konvertieren => {
                            "Cliente_satisfaccion" => "Ganze Zahl"
                          }
                        }
        }
}

Ausgabe {

        wenn ([Art]=="UniFi"){

                ElasticSearch (Englisch) {
                   Index => "unifi-%{+JJJJ. MM.dd}"
                   hosts=> "DIRECCION_IP_ELASTICSEARCH:9200"
                }

        }
}

Fortsetzen, necesitamos crear un fichero en Logstash para ingestar, Transformieren und Senden von Daten. Primero escucharemos en el puerto TCP indicado en UniFi que vimos en el paso anterior; Sekunde, tratar los logs que recibe y separarlos en distintos campos para ser por último almacenados en nuestro Elasticsearch. Erstellen wir also zum Beispiel die Konfigurationsdatei '/etc/logstash/conf.d/unifi.conf', Weiter geht es mit den Filtern, Ich machte meinen Grok so gut ich konnte, Ich entschuldige mich bei den Weisen zu diesem Thema, aber absolut gültig, um die Logs des Ubiquiti UniFi mit Version 6.2.x zu sammeln. Am Ende, in der Ausgabe geben wir unsere Elasticsearch aus, Denken Sie daran, den Benutzernamen einzugeben & Passwort, dass meines ein LAB ist und ich die schlechtesten Praktiken liebe… Und verzeih wirklich den wahren Gurus, meine Groks,, Ich bin immer noch in der 1. der Filter.

Sobald die Konfigurationsdatei erstellt wurde, Denken Sie daran, den Logstash-Dienst neu zu starten, um die neue Konfiguration neu zu laden. Danach wie immer, Wir gehen zu Kibana und sobald die Daten eintreffen, können wir zu "Management" gehen. > "Stack-Verwaltung" > "Kibana" > "Index-Muster" > "Indexmuster erstellen", um das Indexmuster zu erstellen, Wie ich schon sagte, wie gewöhnlich (In diesem Fall und ohne die Anführungszeichen) 'unifi-*' und wir werden die Daten bereits korrekt in Elasticsearch gespeichert haben. Wir konnten uns jetzt von "Discover" aus mit unserem Ubiquiti UniFi-Index verbinden, um zu visualisieren, dass er Daten sammelt.

Und wir landen wie immer in Grafana! TErstellen des Indexes in Kibana, jetzt sollten wir in unserem geliebten Grafana eine "Datenquelle" erstellen, die auf unsere Elasticsearch und den UniFi-Index abzielt. Dann heißt es, Ihrer Fantasie freien Lauf zu lassen, Erstellen eines Dashboards mit verschiedenen Dashboards, mit unterschiedlichen Daten zur Visualisierung, Grafiken mit Kundenzufriedenheit/Verbindungsqualität, Eins Weltkarte mit ein-/ausgehenden Verbindungen, Einer des Stils Sankey So zeigen Sie Client-IPs/APs an, im Spaltenformat, in Patt um spezifische Daten zu z.B. erfolgreichen Zugriffen einzusehen, Unrichtig, Die Verbindungen...

Wie gewöhnlich, Zu inspirieren oder zu helfen, wenn du es verbesserst, gibst du 😉 es an mich weiter. Damit können wir sehen, was in unserem(s) Ubiquiti-Geräte, an Access Points, an den Schaltern, in Echtzeit, Einfügen einer automatischen Aktualisierung alle 10 Sekunden ist sehr beeindruckend, Es wird uns auch helfen, die Zusammenfassung der letzten 24 Stunden zu analysieren, oder zu wissen, wenn etwas Seltsames passiert... Wie der Nachbar, der versucht, eine Verbindung herzustellen.. Wie gewöhnlich, Vielen Dank an alle und noch viel mehr an diejenigen, die diese Art von Inhalten in sozialen Netzwerken verbreiten 😉 Hehe, Umarmungen!

Empfohlene Beiträge

Verfasser

nheobug@bujarra.com
Autor del blog Bujarra.com Cualquier necesidad que tengas, Zögern Sie nicht, mich zu kontaktieren, Ich werde versuchen, dir zu helfen, wann immer ich kann, Teilen ist Leben ;) . Genießen Sie Dokumente!!!