elasticsearch - Filebeat 添加不需要的空白字段
问题描述
我的目标是使用 Filebeat 从不同服务器收集日志,并使用 ElasticSearch 和 Kibana 聚合/可视化它们。目前,我将 Logstash 从场景中排除。
到目前为止,我已经能够将 Filebeat 配置为实时推送日志,并且我能够通过 Kibana 界面确认日志确实被推送到 ElasticSearch。
问题:
问题在于 Filebeat(或 ElasticSearch)会自动将额外的空字段/属性添加到索引中。
我可以在 Kibana 界面上看到的一些字段:
aws.cloudtrail.user_identity.session_context.creation_date
azure.auditlogs.properties.activity_datetime
azure.enqueued_time
azure.signinlogs.properties.created_at
cef.extensions.agentReceiptTime
cef.extensions.deviceCustomDate1
cef.extensions.deviceCustomDate2
cef.extensions.deviceReceiptTime
cef.extensions.endTime
cef.extensions.fileCreateTime
cef.extensions.fileModificationTime
cef.extensions.flexDate1
...
它们都是空的字段。
当我使用 来检查该索引的映射时GET /[index]/_mapping
,我可以看到大约 3000 个我没有真正添加的字段。我不确定这些字段是如何添加的以及如何删除它们。
再生产:
我使用的 Filebeat 和 ElasticSearch docker 图像:
elasticsearch:7.8.0
elastic/filebeat:7.8.0
在基础镜像之上,我放置了如下简单的基本配置文件:
# filebeat.yml
filebeat.inputs:
- type: log
paths:
- /path_to/my_log_file/metrics.log
output.elasticsearch:
hosts: ["http://192.168.0.1:9200"]
# elasticsearch.yml
cluster.name: "docker-cluster"
network.host: 0.0.0.0
node.name: node-1
discovery.seed_hosts: ["127.0.0.1"]
cluster.initial_master_nodes: ["node-1"]
典型的日志消息如下所示:
2020-07-01 08:40:07,432 - CPUUtilization.Percent:50.0|#Level:Host|#hostname:a78f2ab3da65,timestamp:1593592807
2020-07-01 08:40:07,437 - DiskAvailable.Gigabytes:43.607460021972656|#Level:Host|#hostname:a78f2ab3da65,timestamp:1593592807
谢谢
解决方案
进入Elastic Common Schema (ECS),天赐之物!
当 Filebeat 启动时,它会安装一个索引模板,其中包含通用模式中的所有 ECS 字段,这就是为什么您会在索引映射中看到这么多字段的原因,但这并不是真正的问题。
然后,在 Kibana 界面上,您可以在 Table 视图(Discover 选项卡)上看到所有这些“空”字段。但是,如果您切换到 JSON 视图,您会发现这些字段实际上并不在文档中。Filebeat 不会将它们添加到您的文档中。您在表格视图中看到它们的原因是因为 Kibana 正在请求它们(使用docvalue_fields
)。只需单击 Inspect 并查看 Kibana 发送到 Elasticsearch 的请求。
所以没什么好担心的,真的。
对于您的实际消息,如果您要解析CPUUtilization.Percent:50.0
,您实际上可以将其存储到一个名为的标准 ECS 字段中"system.cpu.total.pct": 50
,您可以在 Kibana 的 Metrics 应用程序中看到这些值随着时间的推移而演变。同样的事情DiskAvailable.Gigabytes:43.607460021972656
推荐阅读
- saml - SAML Web SSO 配置文件中是否需要响应签名?
- php - Laravel Passport - 使用自定义用户提供程序通过外部 API 进行身份验证,同时利用 Passport 的请求授权
- excel - 在 VBA 中设置图表数据范围
- isabelle - Isabelle 中的模式匹配存在目标
- sql - 快速路由错误“Err: TypeError: Cannot read property 'type' of undefined”
- amazon-web-services - Amazon Redshift 回滚如何在后台工作?
- c++ - 使用 recursive_directory_iterator 时抛出运行时库错误 abort()
库 C++ - xcode - Xcode 性能
- neo4j - Neo4j:如何满足第一次看到的发件人+第一次看到多个收件人的附件
- java - 访问包含 postfix 的服务器并使用它从 Spring Boot 应用程序发送邮件