在 Elasticsearch 中收集 VMware ESXi LOG 并在 Grafana 中可视化它们

那么,今天是时候发表另一篇关于日志收集的文章了, 如何治疗它们,最重要的是如何可视化它们; 在本文档中,我们将了解如何使用 VMware ESXi 虚拟机管理程序日志执行整个过程, 使用 Elastic Stack 治疗他们,最后在 Grafana 中可视化我们感兴趣的内容, 例如错误日志, 登录不正确…

我们所有使用 VMware 基础架构的人都知道,整个基础都由出色的虚拟机管理程序提供支持, 我们心爱的 ESXi 主机. 基于安全性和稳定性的虚拟机管理程序, 他们通常不会带来什么问题, 但是,将他们的日志收集在一个集中的地方以跟踪他们的健康状况并没有什么坏处. 正如我们所知, 我们可以将您的日志存储在 syslog 中, 所以利用这一点, 我们会将日志发送到 Logstash. Logstash 将负责接收和订购日志, 将繁琐的文本字符串分隔到具有有效数据的不同字段中, 最终将此数据发送到 Elasticsearch 并将其存储在索引中. 然后,通过 Kibana 或 Grafana,我们将能够以图形方式可视化该内容, 并查看主机的登录尝试 (通过 SSH, 图形用户界面…), 简单查看访问, 了解失败的事件, 比较不同的虚拟机管理程序, 了解重复错误… 所有这些都一如既往地实时或制作过去 24 小时的历史数据, 周, 月, 年…

首先,我们显然必须安装 Elastic Stack 部分, 什么 Logstash, Elasticsearch琵琶; 然后,它将告诉每个管理程序将日志发送到 Logstash, 前往我们选择的港口. 停下, 我们有很多方法可以做到这一点, 主机到主机, 从 GUI, 命令行界面, 从 vCenter…

如果你的主机很少,则最喜欢, 从 vCenter 转到每个主机, 在 “配置” > 高级系统设置” > 我们寻求 “syslog.global”, 我们编辑 'Syslog.global.logHost” 以 TCP/UDP 格式表示://DIRECCION_IP:PORT 是我们日志的目的地. O mejor aún con 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: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 -已启用:$真.

输入 {
        TCP 协议 {
                类型 => "ESXi的"
                端口 => "1514"
                标签 => ["VMware 公司","ESXi的"]
        }
}

滤波器 {

        如果 [类型] == "ESXi的" {
                        格罗克 {
                            匹配 => { "消息" => [
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} 托管: %{词:Log_nivel} %{项目:Log_proceso}\[%{INT 系列:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:蒂图洛} opID=%{GREEDYDATA:Op_id} 用户 = %{GREEDYDATA:用户}\] %{GREEDYDATA:Evento_tipo} %{GREEDYDATA:Evento_codigo} : %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} 托管: %{词:Log_nivel} %{项目:Log_proceso}\[%{INT 系列:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:蒂图洛} opID=%{GREEDYDATA:Op_id} 用户 = %{GREEDYDATA:用户}\] %{GREEDYDATA:Evento_codigo}: %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} 托管: %{词:Log_nivel} %{项目:Log_proceso}\[%{INT 系列:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:蒂图洛} opID=%{GREEDYDATA:Op_id} 用户 = %{GREEDYDATA:用户}\] \(%{GREEDYDATA:Evento_codigo}\)",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} 托管: %{词:Log_nivel} %{项目:Log_proceso}\[%{INT 系列:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:蒂图洛} opID=%{GREEDYDATA:Op_id}\] \[%{GREEDYDATA:Evento_codigo}\]: %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} 托管: %{词:Log_nivel} %{项目:Log_proceso}\[%{INT 系列:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:蒂图洛} opID=%{GREEDYDATA:Op_id}\] %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} 托管: %{词:Log_nivel} %{项目:Log_proceso}\[%{INT 系列:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:蒂图洛}\] %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} 托管: %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} Vpxa: %{词:Log_nivel} %{项目:Log_proceso}\[%{INT 系列:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:蒂图洛} opID=%{GREEDYDATA:Op_id}\] %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} Vpxa: %{词:Log_nivel} %{项目:Log_proceso}\[%{INT 系列:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:蒂图洛}\] %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} Vpxa: %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} Rhttp代理: %{词:Log_nivel} %{项目:Log_proceso}\[%{INT 系列:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:蒂图洛}\] %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} Rhttp代理: %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} api转发器: %{词:Log_nivel} %{项目:Log_proceso}\[%{INT 系列:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:蒂图洛}\] %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} VSANMGMTSVC: %{词:Log_nivel} %{项目:Log_proceso}\[%{INT 系列:Evento_id}\] \[opID=%{GREEDYDATA:蒂图洛}\] %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} vSAN系统: %{词:Log_nivel} %{项目:Log_proceso}\[%{INT 系列:Evento_id}\] \[%{GREEDYDATA:蒂图洛}\] %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} vSAN系统: %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} vmkernel: %{词:CPU_core}:%{INT 系列:Evento_id}\)%{GREEDYDATA:蒂图洛}: %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} vmkernel: %{词:CPU_core}:%{INT 系列:Evento_id} opID=%{项目:Op_id}\)%{GREEDYDATA:蒂图洛}: %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} vmkernel: %{词:CPU_core}:%{INT 系列:Evento_id}\)%{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} vmk警告: %{词:CPU_core}:%{INT 系列:Evento_id}\)%{GREEDYDATA:蒂图洛}: %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} FDM (英语): %{词:Log_nivel} %{项目:Log_proceso}\[%{INT 系列:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:蒂图洛} opID=%{项目:Op_id}\] %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} FDM (英语): %{词:Log_nivel} %{项目:Log_proceso}\[%{INT 系列:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:蒂图洛}\] %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} hostd 探测: %{词:Log_nivel} %{项目:Log_proceso}\[%{INT 系列:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:蒂图洛}\] %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} %{项目:Log_proceso}\[%{INT 系列:Evento_id}\]: 用户 %{词:用户} PID %{INT 系列:PID} %{词:Tipo_proceso} %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} %{项目:Log_proceso}\[%{INT 系列:Evento_id}\]: %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} ESX令牌: %{词:Log_nivel} %{项目:Log_proceso}\[%{INT 系列:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:蒂图洛} opID=%{数据:Op_id}\] %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} KMXA: %{词:Log_nivel} %{项目:Log_proceso}\[%{INT 系列:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:蒂图洛} opID=%{数据:Op_id}\] %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} KMXA: %{词:Log_nivel} %{项目:Log_proceso}\[%{INT 系列:Evento_id}\] \[Originator@6876 sub=%{GREEDYDATA:蒂图洛}\] %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} 视频:  \[%{词:Log_nivel}\] %{词:Log_id}: \[%{GREEDYDATA:蒂图洛}\] %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} configStoreBackup: %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} ConfigStore[%{INT 系列:Evento_id}\]: %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} 心跳: %{词:Uptime_estado} %{词:Uptime_tiempo}, %{GREEDYDATA:MVs_encendidas}; %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} ISCSID: %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} 聪明: \[%{词:Log_nivel}\] %{GREEDYDATA:蒂图洛}: %{GREEDYDATA:消息}",
                               "<%{POSINT:syslog_pri}>%{TIMESTAMP_ISO8601:飞驰} %{主机名:Host_ESXi} %{项目:Log_proceso}\[%{INT 系列:Evento_id}\]: %{GREEDYDATA:消息}"
                                       ]
                            }
                        }
        }
}


输出 {

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

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

        }
}

现在点击 Logstash, 所以一旦连接到它, 我们通过配置文件创建 , 例如: “/etc/logstash/conf.d/vmware-esxi.conf”. 这就是我们将指示侦听端口的地方, 如果我们选择 TCP 或 UDP,并且还会选择过滤器. 就像我总是要求大师不要向我扔石头一样, 但这些 Grok 对解析 VMware ESXi 日志有效 7.0, 答案是肯定的, 可改进且非常好 😉, 将日志分成块后,我们会告诉您,我们要将其存储在 Elasticsearch 中, 然后我们放置一个索引. 记住不要像我一样,也要添加凭据, 这是: 用户名 & 密码.

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

最后, 在 Kibana 中创建索引后, 现在在 Grafana 中,我们应该创建一个指向我们的 Elasticsearch 和新创建的 VMware ESXi 索引的“数据源”. 然后让你的想象力自由驰骋, 制作具有不同 Dashboard 的 Dashboard, 使用不同的数据进行可视化, 样式面板 桑基 查看源/目标 IP 和正在发送的流量, 列格式, 在 僵局 查看特定数据,例如登录尝试, 正确, 不對, 备份错误日志并尝试修复它们, 比较不同主机之间的 “正常”’ 某些信息日志的频率, 警告, 错误….

照常, 所有这些都是为了在您需要时激发您的灵感, 采纳想法并加以改进, 因此,您将能够实时查看 ESXi 上发生的情况, 每 个 10 seconds 非常令人印象深刻, 它还将帮助我们分析最后一天的总结, 或者知道什么时候发生奇怪的事情......照常, 感谢大家,并衷心感谢您在社交网络上移动此类内容!!! 😉

推荐文章

作者

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