在 Elasticsearch 中收集 Ubiquiti UniFi LOG 并在 Grafana 中可视化它们

我们继续做更多奇怪的事情… 今天是第一个将日志收集到 Ubiquiti Unifi 环境, 的 AP, 开关… 我们第二次解析。, 我们使用 Logstash 处理日志,并将其存储在 Elasticsearch 中, 锦上添花的是用 Grafana 可视化它. 所有这些都是为了实时控制我们的通信基础设施中发生的事情, 谁正在尝试访问 Wisfis…

嗯,我说的是, 如果我们有一些 Ubiquiti 在那里提供一些服务,并且我们想知道那里发生了什么, 谁与谁通信… 我对 WiFi 部分更好奇, 查看连接尝试, 客户健康… 每个人都会想象他们最感兴趣的东西. 因此,我们首先指示 UniFi 控制台将日志存储在 syslog 中, 我们的 Logstash 将发送日志,我将给您留下一个示例文件进行筛选,并能够将收集的数据分离到有趣的字段中, 相同的配置文件将指示已分隔到不同字段中的信息存储在 Elasticsearch 索引中. 最后,我们将在 Kibana 或 Grafana 中以我们感兴趣的格式可视化我们感兴趣的信息.

首先,我们显然必须安装 Elastic Stack 部分, 什么 Logstash, Elasticsearch琵琶; 然后我们从 UniFi 控制器控制台启用远程 syslog > “设置” > “系统设置” > “控制器配置” > “远程日志记录”, 对我们来说,只需启用 Syslog 部分就足够了, 不带 Netconsole. 我们指示 Logstash 的 IP 地址和未使用的随机端口,它将在其中发送日志.

输入 {
        UDP 协议 {
                类型 => "UniFi 的"
                端口 => "1601"
                标签 => ["UniFi 的"]
        }
}

滤波器 {

        如果 [类型] == "UniFi 的" {
                        格罗克 {
                            匹配 => { "消息" => [
                              "^<%{POSINT:syslog_pri}>%{SYSLOG 时间戳:syslog_timestamp} %{词:UniFi_MAC},%{GREEDYDATA:UniFi_Firmware}: %{项目:Proceso_nombre}: \[%{数:Proceso_pid}\] \[%{数据:Proceso_tarea}\] DNS 请求超时; \[STA: %{COMMONMAC 公司:Cliente_MAC}\]\[查询: %{GREEDYDATA:Cliente_consulta}\] \[DNS_SERVER :%{IPV4}\] \[TXN_ID %{数据:Txn_id}\] \[报告 %{数:Cliente_puerto_origen}\]",
                              "^<%{POSINT:syslog_pri}>%{SYSLOG 时间戳:syslog_timestamp} %{词:UniFi_MAC},%{GREEDYDATA:UniFi_Firmware}: %{项目:Proceso_nombre}: \[%{数:Proceso_pid}\] \[%{数据:Proceso_tarea}\] %{GREEDYDATA:消息}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOG 时间戳:syslog_timestamp} %{词:UniFi_MAC},%{GREEDYDATA:UniFi_Firmware}: : %{项目:Proceso_nombre}\[%{数:Proceso_pid}\]: wireless_agg_stats.log_sta_anomalies(\): bssid=%{COMMONMAC 公司:BSSID_MAC} radio=%{词:BSSID_radio} vap=%{词:vap} sta=%{COMMONMAC 公司:Cliente_MAC} satisfaction_now=%{数:Cliente_satisfaccion} anomalies=%{GREEDYDATA:Cliente_anomalia}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOG 时间戳:syslog_timestamp} %{词:UniFi_MAC},%{GREEDYDATA:UniFi_Firmware}: : %{项目:Proceso_nombre}\[%{数:Proceso_pid}\]: \[%{数据:Proceso_tarea}\].stahtd_dump_event\(\): \{\"query_%{数:Consulta_id}\":\"%{主机名:Consulta_FQDN}\",\"mac\":\"%{COMMONMAC 公司:Cliente_MAC}\",\"message_type\":\"%{数据:Mensaje_tipo}\",\"query_server_%{数:Consulta_id}\":\"%{IPV4:IP_servidor}\",\"assoc_status\":\"%{数:Asociacion_estado}\",\"瓦普":\"%{词:vap}\",\"event_type\":\"%{数据:Evento_tipo}\"\}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOG 时间戳:syslog_timestamp} %{词:UniFi_MAC},%{GREEDYDATA:UniFi_Firmware}: : %{项目:Proceso_nombre}\[%{数:Proceso_pid}\]: \[%{数据:Proceso_tarea}\].stahtd_dump_event\(\): \{\"dns_resp_seen\":\"%{词:DNS_resp_seen}\",\"message_type\":\"%{数据:Mensaje_tipo}\",\"mac\":\"%{COMMONMAC 公司:Cliente_MAC}\",\"瓦普":\"%{词:vap}\",\"assoc_status\":\"%{数:Asociacion_estado}\",\"event_type\":\"%{数据:Evento_tipo}\",\"event_id\":\"%{数:Evento_id}\",\"arp_reply_gw_seen\":\"%{词:ARP_resp_seen}\",\"auth_ts\":\"%{数:Auth_ts}\"\}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOG 时间戳:syslog_timestamp} %{词:UniFi_MAC},%{GREEDYDATA:UniFi_Firmware}: : %{项目:Proceso_nombre}\[%{数:Proceso_pid}\]: \[%{数据:Proceso_tarea}\].stahtd_dump_event\(\): \{\"query_server_%{数:Consulta_id}\":\"%{IPV4}\",\"query_%{数:Consulta_id}\":\"%{主机名:Consulta_FQDN}\",\"mac\":\"%{COMMONMAC 公司:Cliente_MAC}\",\"message_type\":\"%{数据:Mensaje_tipo}\",\"assoc_status\":\"%{数:Asociacion_estado}\",\"瓦普":\"%{词:vap}\",\"event_type\":\"%{数据:Evento_tipo}\"\}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOG 时间戳:syslog_timestamp} %{词:UniFi_MAC},%{GREEDYDATA:UniFi_Firmware}: : %{项目:Proceso_nombre}\[%{数:Proceso_pid}\]: \[%{数据:Proceso_tarea}\].stahtd_dump_event\(\): \{\"query_server_%{数:Consulta_id}\":\"%{IPV4}\",\"mac\":\"%{COMMONMAC 公司:Cliente_MAC}\",\"message_type\":\"%{数据:Mensaje_tipo}\",\"瓦普":\"%{词:vap}\",\"%{数据:Evento_tipo}\",\"query_%{数:Consulta_id}\":\"%{主机名:Consulta_FQDN}\",\"assoc_status\":\"%{数:Asociacion_estado}\"\}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOG 时间戳:syslog_timestamp} %{词:UniFi_MAC},%{GREEDYDATA:UniFi_Firmware}: : %{项目:Proceso_nombre}\[%{数:Proceso_pid}\]: \[%{数据:Proceso_tarea}\].stahtd_dump_event\(\): \{\"mac\":\"%{COMMONMAC 公司:Cliente_MAC}\",\"message_type\":\"%{数据:Mensaje_tipo}\",\"assoc_status\":\"%{数:Asociacion_estado}\",\"瓦普":\"%{词:vap}\",\"event_type\":\"%{数据:Evento_tipo}\":\"%{数:Evento_id}\"\}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOG 时间戳:syslog_timestamp} %{词:UniFi_MAC},%{GREEDYDATA:UniFi_Firmware}: : %{项目:Proceso_nombre}\[%{数:Proceso_pid}\]: \[%{数据:Proceso_tarea}\].stahtd_dump_event\(\): \{\"mac\":\"%{COMMONMAC 公司:Cliente_MAC}\",\"message_type\":\"%{数据:Mensaje_tipo}\",\"瓦普":\"%{词:vap}\",\"query_server_%{数:Consulta_id}\":\"%{IPV4}\",\"event_type\":\"%{数据:Evento_tipo}\",\"assoc_status\":\"%{数:Asociacion_estado}\",\"query_%{数:Consulta_id}\":\"%{主机名:Consulta_FQDN}\"\}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOG 时间戳:syslog_timestamp} %{词:UniFi_MAC},%{GREEDYDATA:UniFi_Firmware}: : %{项目:Proceso_nombre}\[%{数:Proceso_pid}\]: \[%{数据:Proceso_tarea}\].stahtd_dump_event\(\): \{\"dns_resp_seen\":\"%{词:DNS_resp_seen}\",\"mac\":\"%{COMMONMAC 公司:Cliente_MAC}\",\"message_type\":\"%{数据:Mensaje_tipo}\",\"assoc_status\":\"%{数:Asociacion_estado}\",\"瓦普":\"%{词:vap}\",\"event_type\":\"%{数据:Evento_tipo}\",\"event_id\":\"%{数:Evento_id}\",\"auth_ts\":\"%{数:Auth_ts}\"\}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOG 时间戳:syslog_timestamp} %{词:UniFi_MAC},%{GREEDYDATA:UniFi_Firmware}: : %{项目:Proceso_nombre}\[%{数:Proceso_pid}\]: \[%{数据:Proceso_tarea}\].stahtd_dump_event\(\): \{\"dns_resp_seen\":\"%{词:DNS_resp_seen}\",\"message_type\":\"%{数据:Mensaje_tipo}\",\"mac\":\"%{COMMONMAC 公司:Cliente_MAC}\",\"ip_assign_type\":\"%{数据:Tipo_asignacion_ip}\",\"瓦普":\"%{词:vap}\",\"assoc_status\":\"%{数:Asociacion_estado}\",\"event_type\":\"%{数据:Evento_tipo}\",\"auth_ts\":\"%{数:Auth_ts}\",\"wpa_auth_delta\":\"%{数:WPA_auth_delta}\",\"assoc_delta\":\"%{数:Assoc_delta}\",\"auth_delta\":\"%{数:Auth_delta}\",\"event_id\":\"%{数:Evento_id}\"\}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOG 时间戳:syslog_timestamp} %{词:UniFi_MAC},%{GREEDYDATA:UniFi_Firmware}: %{项目:Proceso_nombre}: %{词:vap}: STA %{COMMONMAC 公司:Cliente_MAC} %{数据:Proceso_tarea}: %{GREEDYDATA:消息}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOG 时间戳:syslog_timestamp} %{词:UniFi_MAC},%{GREEDYDATA:UniFi_Firmware}: : %{项目:Proceso_nombre}\[%{数:Proceso_pid}\]: wevent.ubnt_custom_event\(\): %{数据:Evento_tipo} %{词:vap}: %{COMMONMAC 公司:Cliente_MAC} / %{IPV4:Cliente_ip}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOG 时间戳:syslog_timestamp} %{词:UniFi_MAC},%{GREEDYDATA:UniFi_Firmware}: : %{项目:Proceso_nombre}\[%{数:Proceso_pid}\]: wevent.ubnt_custom_event\(\): %{数据:Evento_tipo} %{词:vap}: %{COMMONMAC 公司:Cliente_MAC} / %{数:Evento_id}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOG 时间戳:syslog_timestamp} %{词:UniFi_MAC},%{GREEDYDATA:UniFi_Firmware}: : %{项目:Proceso_nombre}\[%{数:Proceso_pid}\]: %{GREEDYDATA:消息}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOG 时间戳:syslog_timestamp} %{词:UniFi_MAC},%{GREEDYDATA:UniFi_Firmware}: %{项目:Proceso_nombre}: %{数据:Proceso_tarea}\[%{数:Proceso_pid}\]: %{GREEDYDATA:任务}: %{GREEDYDATA:消息}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOG 时间戳:syslog_timestamp} %{词:UniFi_MAC},%{GREEDYDATA:UniFi_Firmware}: %{项目:Proceso_nombre}: %{数据:Proceso_tarea} %{COMMONMAC 公司:Cliente_MAC} %{词:vap} \(%{GREEDYDATA:消息}\)",
                              "^<%{POSINT:syslog_pri}>%{SYSLOG 时间戳:syslog_timestamp} %{词:UniFi_MAC},%{GREEDYDATA:UniFi_Firmware}: %{UNIXPATH:Proceso_nombre}\[%{数:Proceso_pid}\]: %{GREEDYDATA:消息}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOG 时间戳:syslog_timestamp} %{词:UniFi_MAC},%{GREEDYDATA:UniFi_Firmware}: %{项目:Proceso_nombre}: \[%{数:Proceso_pid}\] %{GREEDYDATA:消息}",
                              "^<%{POSINT:syslog_pri}>%{SYSLOG 时间戳:syslog_timestamp} %{词:UniFi_MAC},%{GREEDYDATA:UniFi_Firmware}: %{项目:Proceso_nombre}: %{数据:Proceso_tarea}: %{GREEDYDATA:消息}"
                                       ]
                            }
                        }

                        静音 {
                          转换 => {
                            "Cliente_satisfaccion" => "整数"
                          }
                        }
        }
}

输出 {

        如果 ([类型]=="UniFi 的"){

                ElasticSearch 服务 {
                   索引 => "unifi-%{+YYYY.MM.dd}"
                   主机=> "DIRECCION_IP_ELASTICSEARCH:9200"
                }

        }
}

继续, necesitamos crear un fichero en Logstash para ingestar, 转换和发送数据. Primero escucharemos en el puerto TCP indicado en UniFi que vimos en el paso anterior; 第二, 处理它收到的日志,并将它们分成不同的字段,最终存储在我们的 Elasticsearch 中. Así que creamos por ejemplo el fichero de configuración ‘/etc/logstash/conf.d/unifi.conf’, Seguiremos con los filtros, yo hice mis grok como pude, pido perdón a los sabios del tema, 但对于收集版本 6.2.x 的 Ubiquiti UniFi 的日志是完全有效的. 最后, 在输出中,我们将输出 Elasticsearch, 记得输入用户名 & 密码,我的是实验室,我喜欢最糟糕的做法… 真的原谅真正的大师们,我的朋友, 我仍然在第一筛选条件中.

创建配置文件后, 请记得重启 Logstash 服务以重新加载新配置. 事后一如既往, 我们将转到 Kibana,一旦数据进入,我们就可以转到 “Management” > “堆栈管理” > “Kibana” > “索引模式” > “Create index pattern” 创建索引模式, 正如我所说, 照常 (在这种情况下,不带引号) 'unifi-*' 的,我们将数据正确地存储在 Elasticsearch 中. 现在,我们可以从“Discover”连接到我们的 Ubiquiti UniFi 索引,以可视化它正在收集数据.

我们最终一如既往地来到了 Grafana! T在 Kibana 中创建索引, 现在,在我们心爱的 Grafana 中,我们应该创建一个针对我们的 Elasticsearch 和 UniFi 索引的“数据源”. 然后让你的想象力自由驰骋, 制作具有不同 Dashboard 的 Dashboard, 使用不同的数据进行可视化, 具有客户满意度/连接质量的图形, 一 世界地图 使用传入/传出连接, 风格之一 桑基 查看客户端 IP/AP, 列格式, 在 僵局 查看有关成功访问等的特定数据, 不對, 连接...

照常, 尝试激励或帮助, 如果你改进它,你😉就把它交给我有了这个,我们可以看到我们的(s) Ubiquiti 设备, 在接入点, 在 Switch 上, 实时, 每 个 10 seconds 非常令人印象深刻, 它还将帮助我们分析过去 24 小时的摘要, 或者知道什么时候发生奇怪的事情......就像邻居试图连接一样。. 照常, 感谢大家,更感谢那些在社交网络上移动此类内容的人 😉 呵呵,拥抱!

推荐文章

作者

nheobug@bujarra.com
Autor del blog Bujarra.com Cualquier necesidad que tengas, 请随时与我联系, 我会尽我所能帮助你, 分享就是生活 ;) . 享受文档!!!