正在加载

控制对 APM 数据的访问

Elastic Stack

从 8.2.0 版本开始,Applications UI 具有 Kibana 空间感知能力。 这允许您按团队、用例、服务环境或您选择的任何其他过滤器来分离您的数据以及对该数据的访问。

要利用此功能,您的 APM 数据需要写入不同的数据流。 一种实现方法是使用不同的命名空间。 例如,您可以将生产数据发送到具有 production 命名空间的 APM 集成,同时将暂存数据发送到具有 staging 命名空间的不同 APM 集成。

但不需要多个 APM 集成实例。 利用此功能的最简单方法是创建过滤别名。 有关更多信息,请参见下面的指南。

本指南将解释如何分离您的暂存和生产数据。 这有助于在排查生产问题时消除干扰,或者为某些数据创建更精细的访问控制。

本指南假定您

  • 正在将暂存和生产 APM 数据都发送到 Elasticsearch 集群。
  • 已在 APM 代理配置中配置了 environment 变量。 此变量在 APM 文档中设置 service.environment 字段。 您应该具有 service.environment: productionservice.environment: staging 的文档。 如果此字段为空,请参见 服务环境过滤器,以了解如何设置此值。

Applications UI 使用索引模式来查询您的 APM 数据。 索引模式可以匹配数据流、索引和/或别名。 默认值为

索引设置 默认索引模式
错误 logs-apm*
Span/事务 traces-apm*
指标 metrics-apm*
注意

默认索引设置还会查询 apm-* 数据视图。 此数据视图匹配 APM 早期版本(v8.0 之前)中传送的 APM 数据。

我们可以创建过滤别名供 Applications UI 查询,而不是查询默认 APM 数据视图。 过滤别名是一组数据流的辅助名称,它具有用户定义的过滤器,用于限制别名可以访问的文档。

要分离 stagingproduction APM 数据,我们需要创建六个过滤别名——每个服务环境三个别名

索引设置 production 环境 staging 环境
错误 production-logs-apm staging-logs-apm
Span/事务 production-traces-apm staging-traces-apm
指标 production-metrics-apm staging-metrics-apm

production-<event>-apm 别名将包含一个过滤器,该过滤器仅提供对 service.environmentproduction 的文档的访问权限。 类似地,staging-<event>-apm 别名将包含一个过滤器,该过滤器仅提供对 service.environmentstaging 的文档的访问权限。

要创建这六个过滤别名,请使用 Elasticsearch Aliases API。 在 Kibana 中,打开 Dev Tools 并运行以下 POST 请求。

接下来,您需要为每个服务环境创建一个 Kibana 空间。 要打开 Spaces,请在主菜单中找到 Stack Management,或使用 全局搜索字段。 要创建新空间,请单击 Create a space。 在本指南中,我们创建了两个 Kibana 空间,一个名为 production,一个名为 staging

有关创建空间的更多信息,请参见 Kibana 空间

现在,我们可以更改每个空间中 Applications UI 查询的默认数据视图。

打开 Applications UI 并导航到 SettingsIndices。 使用下表更新每个空间的设置。 每列中的值与我们在第一步中创建的过滤别名的名称匹配。

索引设置 production 空间 staging 空间
错误索引 production-logs-apm staging-logs-apm
Span 索引 production-traces-apm staging-traces-apm
事务索引 production-traces-apm staging-traces-apm
指标索引 production-metrics-apm staging-metrics-apm

要打开 Roles,请在主菜单中找到 Stack Management,或使用 全局搜索字段。 单击 Create role

您需要创建两个角色:一个用于 staging 用户(我们将其称为 staging_apm_viewer),一个用于 production 用户(我们将其称为 production_apm_viewer)。

使用下表,为每个角色分配以下权限

权限 production_apm_viewer staging_apm_viewer
索引权限 index: production-*-apm, privilege: read index: staging-*-apm, privilege: read
Kibana 权限 space: production, feature privileges: APM and User Experience: read space: staging, feature privileges: APM and User Experience: read
APM role config example

或者,您可以使用 Elasticsearch Create or update roles API

最后要做的是将用户分配给上面新创建的角色。 用户将只能访问他们被授予权限的空间内的数据。

有关如何使用 Kibana UI 创建用户并为其分配角色的信息,请参见 保护对 Kibana 的访问

或者,您可以使用 Elasticsearch Create or update users API

此示例创建一个新用户并为其分配在上一步中创建的 production_apm_viewer 角色。 该用户将只能访问 service.environmentproduction 的生产空间和数据。 请记住更改 passwordfull_nameemail 字段。

 POST /_security/user/production-apm-user {
  "password" : "l0ng-r4nd0m-p@ssw0rd",
  "roles" : [ "production_apm_viewer" ],
  "full_name" : "Jane Production Smith",
  "email" : "janesmith@example.com"
}
  1. 分配先前创建的 production_apm_viewer 角色。

此示例创建一个新用户并为其分配在上一步中创建的 staging_apm_viewer 角色。 该用户将只能访问 service.environmentstaging 的暂存空间和数据。 请记住更改 passwordfull_nameemail 字段。

 POST /_security/user/staging-apm-user {
  "password" : "l0ng-r4nd0m-p@ssw0rd",
  "roles" : [ "staging_apm_viewer" ],
  "full_name" : "John Staging Doe",
  "email" : "johndoe@example.com"
}
  1. 分配先前创建的 staging_apm_viewer 角色。

完成! 返回到 Applications UI,惊叹于您特定空间的数据吧。

© . All rights reserved.