控制对 APM 数据的访问
编辑

从 8.2.0 版本开始,Applications UI 能够 感知 Kibana 空间。这允许您根据团队、用例、服务环境或您选择的任何其他筛选条件来分离数据及其访问权限。

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

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

指南:分离暂存和生产数据编辑

本指南将说明如何分离暂存和生产数据。这有助于在排查生产问题时消除噪声,或为特定数据创建更细粒度的访问控制。

本指南假设您

  • 将暂存和生产 APM 数据都发送到 Elasticsearch 集群。
  • 已在 APM 代理配置中配置了 environment 变量。此变量在 APM 文档中设置 service.environment 字段。您应该拥有 service.environment: productionservice.environment: staging 的文档。如果此字段为空,请参阅 服务环境筛选器,了解如何设置此值。
步骤 1:创建筛选别名编辑

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

索引设置 默认索引模式

错误

logs-apm*

跨度/事务

traces-apm*

指标

metrics-apm*

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

我们可以为 Applications UI 创建筛选别名来进行查询,而不是查询默认的 APM 数据视图。筛选别名是数据流组的另一个名称,它具有用户定义的筛选器来限制别名可以访问的文档。

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

索引设置 production 环境 staging 环境

错误

production-logs-apm

staging-logs-apm

跨度/事务

production-traces-apm

staging-traces-apm

指标

production-metrics-apm

staging-metrics-apm

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

要创建这六个筛选别名,请使用 Elasticsearch 的 别名 API。在 Kibana 中,打开 开发工具 并运行以下 POST 请求。

traces-apm* production 别名示例
POST /_aliases?pretty
{
  "actions": [
    {
      "add": {
        "index": "traces-apm*", 
        "alias": "production-traces-apm", 
        "filter": {
          "term": {
            "service.environment": {
              "value": "production" 
            }
          }
        }
      }
    }
  ]
}

此示例匹配 APM traces 数据流

别名不得匹配默认的 APM 索引 (traces-apm*,apm-*)

仅匹配 service.environment: production 的文档

logs-apm* production 别名示例
POST /_aliases?pretty
{
  "actions": [
    {
      "add": {
        "index": "logs-apm*", 
        "alias": "production-logs-apm", 
        "filter": {
          "term": {
            "service.environment": {
              "value": "production" 
            }
          }
        }
      }
    }
  ]
}

此示例匹配 APM logs 数据流

别名不得匹配默认的 APM 索引 (logs-apm*,apm-*)

仅匹配 service.environment: production 的文档

metrics-apm* production 别名示例
POST /_aliases?pretty
{
  "actions": [
    {
      "add": {
        "index": "metrics-apm*", 
        "alias": "production-metrics-apm", 
        "filter": {
          "term": {
            "service.environment": {
              "value": "production" 
            }
          }
        }
      }
    }
  ]
}

此示例匹配 APM metrics 数据流

别名不得匹配默认的 APM 索引 (metrics-apm*,apm-*)

仅匹配 service.environment: production 的文档

traces-apm* staging 别名示例
POST /_aliases?pretty
{
  "actions": [
    {
      "add": {
        "index": "traces-apm*", 
        "alias": "staging-traces-apm", 
        "filter": {
          "term": {
            "service.environment": {
              "value": "staging" 
            }
          }
        }
      }
    }
  ]
}

此示例匹配 APM traces 数据流

别名不得匹配默认的 APM 索引 (traces-apm*,apm-*)

仅匹配 service.environment: staging 的文档

logs-apm* staging 别名示例
POST /_aliases?pretty
{
  "actions": [
    {
      "add": {
        "index": "logs-apm*", 
        "alias": "staging-logs-apm", 
        "filter": {
          "term": {
            "service.environment": {
              "value": "staging" 
            }
          }
        }
      }
    }
  ]
}

此示例匹配 APM logs 数据流

别名不得匹配默认的 APM 索引 (logs-apm*,apm-*)

仅匹配 service.environment: staging 的文档

metrics-apm* staging 别名示例
POST /_aliases?pretty
{
  "actions": [
    {
      "add": {
        "index": "metrics-apm*", 
        "alias": "staging-metrics-apm", 
        "filter": {
          "term": {
            "service.environment": {
              "value": "staging" 
            }
          }
        }
      }
    }
  ]
}

此示例匹配 APM metrics 数据流

别名不得匹配默认的 APM 索引 (metrics-apm*,apm-*)

仅匹配 service.environment: staging 的文档

步骤 2:创建 Kibana 空间编辑

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

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

步骤 3:更新每个空间中的 APM 索引设置编辑

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

打开 Applications UI 并导航到 设置索引。使用下表更新每个空间的设置。每列中的值与我们在步骤一中创建的筛选别名的名称相匹配。

索引设置 production 空间 staging 空间

错误索引

production-logs-apm

staging-logs-apm

跨度索引

production-traces-apm

staging-traces-apm

事务索引

production-traces-apm

staging-traces-apm

指标索引

production-metrics-apm

staging-metrics-apm

步骤 4:创建 Kibana 访问角色编辑

要打开 角色,请在主菜单中找到 堆栈管理 或使用 全局搜索字段。点击 创建角色

您需要创建两个角色:一个用于 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 和用户体验:读取

space: staging, feature privileges: APM 和用户体验:读取

APM role config example

或者,您可以使用 Elasticsearch 的 创建或更新角色 API

创建 production_apm_viewer 角色

此请求创建 production_apm_viewer 角色

POST /_security/role/production_apm_viewer
{
  "cluster": [ ],
  "indices": [
    {
      "names": ["production-*-apm"], 
      "privileges": ["read"]
    }
  ],
  "applications": [
    {
      "application" : "kibana-.kibana",
      "privileges" : [
        "feature_apm.read" 
      ],
      "resources" : [
        "space:production" 
      ]
    }
  ]
}

此数据视图匹配步骤一中创建的所有 production 别名。

为 Applications 和 User Experience UI 分配 read 权限。

提供对名为 production 的空间的访问权限。

创建 staging_apm_viewer 角色

此请求创建 staging_apm_viewer 角色

POST /_security/role/staging_apm_viewer
{
  "cluster": [ ],
  "indices": [
    {
      "names": ["staging-*-apm"], 
      "privileges": ["read"]
    }
  ],
  "applications": [
    {
      "application" : "kibana-.kibana",
      "privileges" : [
        "feature_apm.read" 
      ],
      "resources" : [
        "space:staging" 
      ]
    }
  ]
}

此数据视图匹配步骤一中创建的所有 staging 别名。

为 Applications 和 User Experience UI 分配 read 权限。

提供对名为 staging 的空间的访问权限。

步骤 5:将用户分配给角色编辑

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

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

或者,您可以使用 Elasticsearch 的 创建或更新用户 API

此示例创建一个新用户并为其分配在上一步中创建的 production_apm_viewer 角色。此用户只能访问 production 空间以及 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" : "[email protected]"
}

分配先前创建的 production_apm_viewer 角色。

此示例创建一个新用户并为其分配在上一步中创建的 staging_apm_viewer 角色。此用户只能访问 staging 空间以及 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" : "[email protected]"
}

分配先前创建的 staging_apm_viewer 角色。

步骤 6:惊叹编辑

就是这样!返回 Applications UI 并惊叹于您特定于空间的数据。