Coletando Ubiquiti UniFi LOGs no Elasticsearch e visualizando-os no Grafana

E continuamos com mais coisas estranhas… hoje o primeiro de coleta de logs para o ambiente Ubiquiti Unifi, dos nossos APs, Comutadores… pela segunda vez analisamos., tratamos os Logs com Logstash e para sobremesa armazenamo-los no Elasticsearch, e a cereja no topo do bolo será visualizá-lo com Grafana. Tudo isto para controlar em tempo real o que acontece na nossa infraestrutura de comunicações, que está tentando acessar o Wisfis…

Bem, o que eu disse, se temos algum Ubiquiti lá fora prestando algum serviço e queremos saber o que está acontecendo lá, quem comunica com quem… Eu estava mais curioso sobre a parte WiFi, Ver tentativas de ligação, Saúde do Cliente… Cada um visualizará o que mais lhe interessa. Então, vamos começar instruindo o console UniFi para armazenar os logs em um syslog, nosso Logstash enviará os logs e deixarei um arquivo de exemplo para filtrar e ser capaz de separar os dados coletados em campos interessantes, esse mesmo arquivo de configuração indicará que as informações já separadas em campos diferentes estão armazenadas em um índice do Elasticsearch. E terminaremos com Kibana ou Grafana visualizando num Dashboard a informação que nos interessa e no formato que nos interessa.

Primeiro, obviamente temos que ter a parte do Elastic Stack instalada, O que foi Armazenamento, Elasticsearch e Kibana; Em seguida, ativamos o syslog remoto a partir do console do controlador UniFi > “Configurações” > “Configurações do sistema” > “Configuração do controlador” > “Registo remoto”, e apenas ativar a parte Syslog é suficiente para nós, sem Netconsole. Indicamos la dirección IP de nuestro Logstash y un puerto aleatorio no usado donde mandará los Logs.

Entrada {
        UDP {
                tipo => "UniFi"
                porta => "1601"
                tags => ["UniFi"]
        }
}

filtro {

        se [tipo] == "UniFi" {
                        Grok {
                            correspondência => { "Mensagem" => [
                              "^<%{DERRUBE:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{PALAVRA:UniFi_MAC},%{DADOS GANANCIOSOS:UniFi_Firmware}: %{PROG:Proceso_nombre}: \[%{NÚMERO:Proceso_pid}\] \[%{DATA:Proceso_tarea}\] Tempo limite de solicitação DNS expirado; \[STA: %{COMMONMAC:Cliente_MAC}\]\[CONSULTA: %{DADOS GANANCIOSOS:Cliente_consulta}\] \[DNS_SERVER :%{IPV4}\] \[TXN_ID %{DATA:Txn_id}\] \[SRCPORT %{NÚMERO:Cliente_puerto_origen}\]",
                              "^<%{DERRUBE:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{PALAVRA:UniFi_MAC},%{DADOS GANANCIOSOS:UniFi_Firmware}: %{PROG:Proceso_nombre}: \[%{NÚMERO:Proceso_pid}\] \[%{DATA:Proceso_tarea}\] %{DADOS GANANCIOSOS:Mensagem}",
                              "^<%{DERRUBE:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{PALAVRA:UniFi_MAC},%{DADOS GANANCIOSOS:UniFi_Firmware}: : %{PROG:Proceso_nombre}\[%{NÚMERO:Proceso_pid}\]: wireless_agg_stats.log_sta_anomalias(\): bssid=%{COMMONMAC:BSSID_MAC} radio=%{PALAVRA:BSSID_radio} vap=%{PALAVRA:vap} sta=%{COMMONMAC:Cliente_MAC} satisfaction_now=%{NÚMERO:Cliente_satisfaccion} anomalies=%{DADOS GANANCIOSOS:Cliente_anomalia}",
                              "^<%{DERRUBE:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{PALAVRA:UniFi_MAC},%{DADOS GANANCIOSOS:UniFi_Firmware}: : %{PROG:Proceso_nombre}\[%{NÚMERO:Proceso_pid}\]: \[%{DATA:Proceso_tarea}\].stahtd_dump_event\(\): \{\"query_%{NÚMERO:Consulta_id}\":\"%{NOME DO HOST:Consulta_FQDN}\",\"mac\":\"%{COMMONMAC:Cliente_MAC}\",\"message_type\":\"%{DATA:Mensaje_tipo}\",\"query_server_%{NÚMERO:Consulta_id}\":\"%{IPV4:IP_servidor}\",\"assoc_status\":\"%{NÚMERO:Asociacion_estado}\",\"vap\":\"%{PALAVRA:vap}\",\"event_type\":\"%{DATA:Evento_tipo}\"\}",
                              "^<%{DERRUBE:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{PALAVRA:UniFi_MAC},%{DADOS GANANCIOSOS:UniFi_Firmware}: : %{PROG:Proceso_nombre}\[%{NÚMERO:Proceso_pid}\]: \[%{DATA:Proceso_tarea}\].stahtd_dump_event\(\): \{\"dns_resp_seen\":\"%{PALAVRA:DNS_resp_seen}\",\"message_type\":\"%{DATA:Mensaje_tipo}\",\"mac\":\"%{COMMONMAC:Cliente_MAC}\",\"vap\":\"%{PALAVRA:vap}\",\"assoc_status\":\"%{NÚMERO:Asociacion_estado}\",\"event_type\":\"%{DATA:Evento_tipo}\",\"event_id\":\"%{NÚMERO:Evento_id}\",\"arp_reply_gw_seen\":\"%{PALAVRA:ARP_resp_seen}\",\"auth_ts\":\"%{NÚMERO:Auth_ts}\"\}",
                              "^<%{DERRUBE:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{PALAVRA:UniFi_MAC},%{DADOS GANANCIOSOS:UniFi_Firmware}: : %{PROG:Proceso_nombre}\[%{NÚMERO:Proceso_pid}\]: \[%{DATA:Proceso_tarea}\].stahtd_dump_event\(\): \{\"query_server_%{NÚMERO:Consulta_id}\":\"%{IPV4}\",\"query_%{NÚMERO:Consulta_id}\":\"%{NOME DO HOST:Consulta_FQDN}\",\"mac\":\"%{COMMONMAC:Cliente_MAC}\",\"message_type\":\"%{DATA:Mensaje_tipo}\",\"assoc_status\":\"%{NÚMERO:Asociacion_estado}\",\"vap\":\"%{PALAVRA:vap}\",\"event_type\":\"%{DATA:Evento_tipo}\"\}",
                              "^<%{DERRUBE:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{PALAVRA:UniFi_MAC},%{DADOS GANANCIOSOS:UniFi_Firmware}: : %{PROG:Proceso_nombre}\[%{NÚMERO:Proceso_pid}\]: \[%{DATA:Proceso_tarea}\].stahtd_dump_event\(\): \{\"query_server_%{NÚMERO:Consulta_id}\":\"%{IPV4}\",\"mac\":\"%{COMMONMAC:Cliente_MAC}\",\"message_type\":\"%{DATA:Mensaje_tipo}\",\"vap\":\"%{PALAVRA:vap}\",\"%{DATA:Evento_tipo}\",\"query_%{NÚMERO:Consulta_id}\":\"%{NOME DO HOST:Consulta_FQDN}\",\"assoc_status\":\"%{NÚMERO:Asociacion_estado}\"\}",
                              "^<%{DERRUBE:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{PALAVRA:UniFi_MAC},%{DADOS GANANCIOSOS:UniFi_Firmware}: : %{PROG:Proceso_nombre}\[%{NÚMERO:Proceso_pid}\]: \[%{DATA:Proceso_tarea}\].stahtd_dump_event\(\): \{\"mac\":\"%{COMMONMAC:Cliente_MAC}\",\"message_type\":\"%{DATA:Mensaje_tipo}\",\"assoc_status\":\"%{NÚMERO:Asociacion_estado}\",\"vap\":\"%{PALAVRA:vap}\",\"event_type\":\"%{DATA:Evento_tipo}\":\"%{NÚMERO:Evento_id}\"\}",
                              "^<%{DERRUBE:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{PALAVRA:UniFi_MAC},%{DADOS GANANCIOSOS:UniFi_Firmware}: : %{PROG:Proceso_nombre}\[%{NÚMERO:Proceso_pid}\]: \[%{DATA:Proceso_tarea}\].stahtd_dump_event\(\): \{\"mac\":\"%{COMMONMAC:Cliente_MAC}\",\"message_type\":\"%{DATA:Mensaje_tipo}\",\"vap\":\"%{PALAVRA:vap}\",\"query_server_%{NÚMERO:Consulta_id}\":\"%{IPV4}\",\"event_type\":\"%{DATA:Evento_tipo}\",\"assoc_status\":\"%{NÚMERO:Asociacion_estado}\",\"query_%{NÚMERO:Consulta_id}\":\"%{NOME DO HOST:Consulta_FQDN}\"\}",
                              "^<%{DERRUBE:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{PALAVRA:UniFi_MAC},%{DADOS GANANCIOSOS:UniFi_Firmware}: : %{PROG:Proceso_nombre}\[%{NÚMERO:Proceso_pid}\]: \[%{DATA:Proceso_tarea}\].stahtd_dump_event\(\): \{\"dns_resp_seen\":\"%{PALAVRA:DNS_resp_seen}\",\"mac\":\"%{COMMONMAC:Cliente_MAC}\",\"message_type\":\"%{DATA:Mensaje_tipo}\",\"assoc_status\":\"%{NÚMERO:Asociacion_estado}\",\"vap\":\"%{PALAVRA:vap}\",\"event_type\":\"%{DATA:Evento_tipo}\",\"event_id\":\"%{NÚMERO:Evento_id}\",\"auth_ts\":\"%{NÚMERO:Auth_ts}\"\}",
                              "^<%{DERRUBE:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{PALAVRA:UniFi_MAC},%{DADOS GANANCIOSOS:UniFi_Firmware}: : %{PROG:Proceso_nombre}\[%{NÚMERO:Proceso_pid}\]: \[%{DATA:Proceso_tarea}\].stahtd_dump_event\(\): \{\"dns_resp_seen\":\"%{PALAVRA:DNS_resp_seen}\",\"message_type\":\"%{DATA:Mensaje_tipo}\",\"mac\":\"%{COMMONMAC:Cliente_MAC}\",\"ip_assign_type\":\"%{DATA:Tipo_asignacion_ip}\",\"vap\":\"%{PALAVRA:vap}\",\"assoc_status\":\"%{NÚMERO:Asociacion_estado}\",\"event_type\":\"%{DATA:Evento_tipo}\",\"auth_ts\":\"%{NÚMERO:Auth_ts}\",\"wpa_auth_delta\":\"%{NÚMERO:WPA_auth_delta}\",\"assoc_delta\":\"%{NÚMERO:Assoc_delta}\",\"auth_delta\":\"%{NÚMERO:Auth_delta}\",\"event_id\":\"%{NÚMERO:Evento_id}\"\}",
                              "^<%{DERRUBE:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{PALAVRA:UniFi_MAC},%{DADOS GANANCIOSOS:UniFi_Firmware}: %{PROG:Proceso_nombre}: %{PALAVRA:vap}: STA %{COMMONMAC:Cliente_MAC} %{DATA:Proceso_tarea}: %{DADOS GANANCIOSOS:Mensagem}",
                              "^<%{DERRUBE:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{PALAVRA:UniFi_MAC},%{DADOS GANANCIOSOS:UniFi_Firmware}: : %{PROG:Proceso_nombre}\[%{NÚMERO:Proceso_pid}\]: wevent.ubnt_custom_event\(\): %{DATA:Evento_tipo} %{PALAVRA:vap}: %{COMMONMAC:Cliente_MAC} / %{IPV4:Cliente_ip}",
                              "^<%{DERRUBE:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{PALAVRA:UniFi_MAC},%{DADOS GANANCIOSOS:UniFi_Firmware}: : %{PROG:Proceso_nombre}\[%{NÚMERO:Proceso_pid}\]: wevent.ubnt_custom_event\(\): %{DATA:Evento_tipo} %{PALAVRA:vap}: %{COMMONMAC:Cliente_MAC} / %{NÚMERO:Evento_id}",
                              "^<%{DERRUBE:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{PALAVRA:UniFi_MAC},%{DADOS GANANCIOSOS:UniFi_Firmware}: : %{PROG:Proceso_nombre}\[%{NÚMERO:Proceso_pid}\]: %{DADOS GANANCIOSOS:Mensagem}",
                              "^<%{DERRUBE:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{PALAVRA:UniFi_MAC},%{DADOS GANANCIOSOS:UniFi_Firmware}: %{PROG:Proceso_nombre}: %{DATA:Proceso_tarea}\[%{NÚMERO:Proceso_pid}\]: %{DADOS GANANCIOSOS:Tarefa}: %{DADOS GANANCIOSOS:Mensagem}",
                              "^<%{DERRUBE:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{PALAVRA:UniFi_MAC},%{DADOS GANANCIOSOS:UniFi_Firmware}: %{PROG:Proceso_nombre}: %{DATA:Proceso_tarea} %{COMMONMAC:Cliente_MAC} %{PALAVRA:vap} \(%{DADOS GANANCIOSOS:Mensagem}\)",
                              "^<%{DERRUBE:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{PALAVRA:UniFi_MAC},%{DADOS GANANCIOSOS:UniFi_Firmware}: %{UNIXPATH:Proceso_nombre}\[%{NÚMERO:Proceso_pid}\]: %{DADOS GANANCIOSOS:Mensagem}",
                              "^<%{DERRUBE:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{PALAVRA:UniFi_MAC},%{DADOS GANANCIOSOS:UniFi_Firmware}: %{PROG:Proceso_nombre}: \[%{NÚMERO:Proceso_pid}\] %{DADOS GANANCIOSOS:Mensagem}",
                              "^<%{DERRUBE:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{PALAVRA:UniFi_MAC},%{DADOS GANANCIOSOS:UniFi_Firmware}: %{PROG:Proceso_nombre}: %{DATA:Proceso_tarea}: %{DADOS GANANCIOSOS:Mensagem}"
                                       ]
                            }
                        }

                        mutate {
                          convert => {
                            "Cliente_satisfaccion" => "Inteiro"
                          }
                        }
        }
}

saída {

        se ([tipo]=="UniFi"){

                ElasticSearch {
                   índice => "unifi-%{+AAAAA. MM.dd}"
                   hosts=> "DIRECCION_IP_ELASTICSEARCH:9200"
                }

        }
}

Continuar, precisamos criar um arquivo no Logstash para ingerir, Transformar e enviar dados. Primeiro vamos ouvir na porta TCP indicada em UniFi que vimos na etapa anterior; segundo, processar os logs que recebe e separá-los em campos diferentes para serem finalmente armazenados em nosso Elasticsearch. Então, vamos criar, por exemplo, o arquivo de configuração '/etc/logstash/conf.d/unifi.conf', Vamos continuar com os filtros, Eu fiz meu grok o melhor que pude, Peço desculpa aos sábios sobre o assunto, mas totalmente válido para coletar os logs do Ubiquiti UniFi com a versão 6.2.x. No final, na saída, produziremos nosso Elasticsearch, Lembre-se de inserir o nome de usuário & senha que o meu é um LAB e eu amo as piores práticas… E realmente perdoe os verdadeiros gurus meus gemidos, Ainda estou em 1º dos filtros.

Depois que o arquivo de configuração for criado, lembre-se de reiniciar o serviço Logstash para recarregar a nova configuração. Depois, como sempre, iremos para o Kibana e, assim que os dados chegarem, podemos ir para "Gerenciamento" > "Gerenciamento de pilha" > "Kibana" > "Padrões de índice" > "Criar padrão de índice" para criar o padrão de índice, Como eu disse, como de costume (neste caso e sem as aspas) 'unifi-*' e teremos os dados já armazenados no Elasticsearch corretamente. Agora podemos nos conectar de "Discover" ao nosso índice Ubiquiti UniFi para visualizar que ele está coletando dados.

E acabamos como sempre em Grafana! TCriação do índice no Kibana, agora em nosso amado Grafana devemos criar uma "Fonte de Dados" que tenha como alvo nosso Elasticsearch e o índice UniFi. Então é deixar sua imaginação correr solta, faça um Dashboard com diferentes Dashboards, com dados diferentes para visualizar, Gráficos com satisfação do cliente/qualidade de conexão, um Mapa do Mundo com ligações de entrada/saída, Um de Estilo Sankey para visualizar IPs/APs de clientes, em formato de coluna, em impasse para visualizar dados específicos sobre, por exemplo, acessos bem-sucedidos, Incorreto, as ligações...

Como de costume, tentando inspirar ou ajudar, se você melhorá-lo você 😉 passa para mim Com isso podemos ver o que acontece em nosso(s) Dispositivos Ubiquiti, nos Pontos de Acesso, nos interruptores, em tempo real, Colocando uma atualização automática a cada 10 segundos é muito impressionante, Também nos ajudará a analisar o resumo das últimas 24 horas, ou saber quando algo estranho acontece... como o vizinho tentando se conectar.. Como de costume, Obrigado a todos e muito mais a quem movimenta este tipo de conteúdos nas redes sociais 😉 Hehe, abraços!

Postagens recomendadas

Autor

nheobug@bujarra.com
Autor del blog Bujarra.com Cualquier necesidad que tengas, Não hesite em contactar-me, Vou tentar ajudá-lo sempre que puder, Compartilhar é viver ;) . Desfrute de documentos!!!