存储日志数据的Elasticsearch索引是否有命名/组织约定?

20
我正在设置Elasticsearch和Kibana作为我们办公室的集中日志平台。我们有许多自定义实用程序和插件,我想跟踪它们的使用情况以及用户是否遇到任何错误。此外,我还想追踪服务器和定期作业。如果我有许多不同的日志数据源都发送到同一个elasticsearch群集,那么如何将其组织成索引和文档类型的惯例或最佳实践是什么?Logstash使用的默认索引值是"logstash-%{+YYYY.MM.dd}",因此似乎最好在索引名称后缀中加上当前日期,因为这样可以轻松清除旧数据。但是,Kibana允许添加多个“索引模式”,可以在UI中选择。然而,我阅读的所有教程都只提到创建单个模式,如"logstash-*"。在实践中如何使用多个索引模式?我只需为我的所有数据源命名即可吗?例如:
BackupUtility-%{+YYYY.MM.dd}
UserTracker-%{+YYYY.MM.dd}
ApacheServer-%{+YYYY.MM.dd}

我正在使用nLog来编写一些工具,它有一个elastic search target。nLog和其他类似的日志框架惯例是在源代码中为每个类拥有一个“logger”。这些logger是否应该转换成elastic search中的索引?
MyCompany.CustomTool.FooClass-%{+YYYY.MM.dd}
MyCompany.CustomTool.BarClass-%{+YYYY.MM.dd}
MyCompany.OtherTool.BazClass-%{+YYYY.MM.dd}

这对于elasticsearch索引名称来说可能过于细分,最好只使用一个带日期的索引来为应用程序提供服务吗?
CustomTool-%{+YYYY.MM.dd}

你最后用了哪种索引?我尝试使用 app-name-yyy.mm.dd,但这使得 Elastic 和在 Kibana 上搜索变得非常缓慢。请参见 https://discuss.elastic.co/t/using-elstic-kibana-is-very-slow/85244 你使用每日/每月索引吗? - dina
因此,似乎最好在索引名称后缀中加上当前日期,这样可以轻松清除旧数据。在索引名称中使用date math可能会使查询更快,您同意吗?不过,你的问题也很好.... - Nate Anderson
3个回答

6
在我的工作环境中,我们正在解决一个类似的问题。我们有各种系统日志、来自Prometheus的指标警报和来自客户端和服务器应用程序的应用程序日志。此外,我们还有一些客户端和服务器应用程序之间共享的变量,这让我们能够将两者相关联(例如,我们知道服务器日志与在客户端上进行了某个操作的请求匹配)。我们正在尝试以下方案,以帮助Kibana为我们回答问题:
logs-system-{date}
logs-iis-{date}
logs-prometheus-{date}
logs-app-{applicationName}-{date}

说明:

  • {applicationName} 是我们编写的某个应用程序的唯一名称(可以是客户端或服务器端)
  • {date} 是索引所使用的基于日期的方案

这样,我们就可以设置 Kibana 对 logs-app-* 进行搜索,并快速搜索任何应用程序中的日志。虽然这对我们来说还很新,但我们已经开始后悔没有采用这种方案了。它使跨应用程序搜索相关日志变得比应该更加困难。


3

在我的公司,我们已经对这个话题进行了很多工作。我们达成以下约定:

  • 客户 -- 产品 --- 应用程序 ---- 日期

无论如何,有必要审查数据的组织方式以及组织内部查询数据的方式。

顺祝商祺

Dario Rodriguez


0

我不知道是否有这样的约定,但对于我的环境,我们通常会创建两种不同类型的索引logstash-*logstash-shortlived-*,具体取决于严重程度。在我的情况下,我创建了索引模式logstash-*,因为它将满足两种类型的索引。

由于这些索引将存储在Elasticsearch中,并且Kibana将读取它们,我想它应该为您提供创建不同模式的索引的选项。 在本地机器上尝试一下吧。如果您想要更细粒度的控制,为什么不尝试logstash-XYZ,否则您始终可以使用自定义名称创建索引。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接