控制对 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* 生产别名示例
POST /_aliases?pretty
{
  "actions": [
    {
      "add": {
        "index": "traces-apm*", 
        "alias": "production-traces-apm", 
        "filter": {
          "term": {
            "service.environment": {
              "value": "production" 
            }
          }
        }
      }
    }
  ]
}

此示例匹配 APM 跟踪数据流

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

仅匹配 service.environment: production 的文档

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

此示例匹配 APM 日志数据流

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

仅匹配 service.environment: production 的文档

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

此示例匹配 APM 指标数据流

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

仅匹配 service.environment: production 的文档

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

此示例匹配 APM 跟踪数据流

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

仅匹配 service.environment: staging 的文档

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

此示例匹配 APM 日志数据流

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

仅匹配 service.environment: staging 的文档

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

此示例匹配 APM 指标数据流

别名不得匹配默认的 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,权限:read

index:staging-*-apm,权限:read

Kibana 权限

space:production,功能权限:APM 和用户体验:read

space:staging,功能权限:APM 和用户体验:read

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" 
      ]
    }
  ]
}

此数据视图匹配第一步中创建的所有生产别名。

为 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" 
      ]
    }
  ]
}

此数据视图匹配第一步中创建的所有暂存别名。

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

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

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

最后要做的是将用户分配到上面新创建的角色。用户将仅有权访问其被授予权限的空间内的数据。

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

或者,您可以使用 Elasticsearch 创建或更新用户 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" : "[email protected]"
}

分配先前创建的 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" : "[email protected]"
}

分配先前创建的 staging_apm_viewer 角色。

步骤 6:惊叹编辑

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