控制对 APM 数据的访问
编辑控制对 APM 数据的访问
编辑从 8.2.0 版本开始,Applications UI 能够 感知 Kibana 空间。这允许您根据团队、用例、服务环境或您选择的任何其他筛选条件来分离数据及其访问权限。
要利用此功能,您的 APM 数据需要写入不同的数据流。一种实现方法是使用不同的命名空间。例如,您可以将生产数据发送到命名空间为 production
的 APM 集成,同时将暂存数据发送到命名空间为 staging
的另一个 APM 集成。
不过,不需要多个 APM 集成实例。利用此功能的最简单方法是创建筛选别名。有关更多信息,请参阅以下指南。
本指南将说明如何分离暂存和生产数据。这有助于在排查生产问题时消除噪声,或为特定数据创建更细粒度的访问控制。
本指南假设您
- 将暂存和生产 APM 数据都发送到 Elasticsearch 集群。
- 已在 APM 代理配置中配置了
environment
变量。此变量在 APM 文档中设置service.environment
字段。您应该拥有service.environment: production
和service.environment: staging
的文档。如果此字段为空,请参阅 服务环境筛选器,了解如何设置此值。
Applications UI 使用索引模式查询您的 APM 数据。索引模式可以匹配数据流、索引和/或别名。默认值为
索引设置 | 默认索引模式 |
---|---|
错误 |
|
跨度/事务 |
|
指标 |
|
默认索引设置还会查询 apm-*
数据视图。此数据视图匹配在早期版本的 APM(v8.0 之前)中发送的 APM 数据。
我们可以为 Applications UI 创建筛选别名来进行查询,而不是查询默认的 APM 数据视图。筛选别名是数据流组的另一个名称,它具有用户定义的筛选器来限制别名可以访问的文档。
要分离 staging
和 production
APM 数据,我们需要创建六个筛选别名,每个服务环境三个别名
索引设置 | production 环境 |
staging 环境 |
---|---|---|
错误 |
|
|
跨度/事务 |
|
|
指标 |
|
|
production-<event>-apm
别名将包含一个筛选器,该筛选器仅提供对 service.environment
为 production
的文档的访问权限。类似地,staging-<event>-apm
别名将包含一个筛选器,该筛选器仅提供对 service.environment
为 staging
的文档的访问权限。
要创建这六个筛选别名,请使用 Elasticsearch 的 别名 API。在 Kibana 中,打开 开发工具 并运行以下 POST 请求。
traces-apm*
production 别名示例
logs-apm*
production 别名示例
metrics-apm*
production 别名示例
traces-apm*
staging 别名示例
logs-apm*
staging 别名示例
metrics-apm*
staging 别名示例
接下来,您需要为每个服务环境创建一个 Kibana 空间。要打开 空间,请在主菜单中找到 堆栈管理 或使用 全局搜索字段。要创建新的空间,请点击 创建空间。在本指南中,我们创建了两个 Kibana 空间,一个名为 production
,另一个名为 staging
。
有关创建空间的更多信息,请参阅 Kibana 空间。
现在,我们可以更改 Applications UI 在每个空间中查询的默认数据视图。
打开 Applications UI 并导航到 设置 → 索引。使用下表更新每个空间的设置。每列中的值与我们在步骤一中创建的筛选别名的名称相匹配。
索引设置 | production 空间 |
staging 空间 |
---|---|---|
错误索引 |
|
|
跨度索引 |
|
|
事务索引 |
|
|
指标索引 |
|
|
要打开 角色,请在主菜单中找到 堆栈管理 或使用 全局搜索字段。点击 创建角色。
您需要创建两个角色:一个用于 staging
用户(我们将此角色称为 staging_apm_viewer
),另一个用于 production
用户(我们将此角色称为 production_apm_viewer
)。
使用下表,为每个角色分配以下权限
权限 | production_apm_viewer |
staging_apm_viewer |
---|---|---|
索引权限 |
index: |
index: |
Kibana 权限 |
space: |
space: |
或者,您可以使用 Elasticsearch 的 创建或更新角色 API
创建 production_apm_viewer
角色
此请求创建 production_apm_viewer
角色
创建 staging_apm_viewer
角色
最后要做的是将用户分配给上面新创建的角色。用户只能访问他们被授予权限的空间中的数据。
有关如何使用 Kibana UI 创建用户并为其分配角色的信息,请参阅 保护对 Kibana 的访问权限。
或者,您可以使用 Elasticsearch 的 创建或更新用户 API。
此示例创建一个新用户并为其分配在上一步中创建的 production_apm_viewer
角色。此用户只能访问 production 空间以及 service.environment
为 production
的数据。请务必更改 password
、full_name
和 email
字段。
POST /_security/user/production-apm-user { "password" : "l0ng-r4nd0m-p@ssw0rd", "roles" : [ "production_apm_viewer" ], "full_name" : "Jane Production Smith", "email" : "[email protected]" }
此示例创建一个新用户并为其分配在上一步中创建的 staging_apm_viewer
角色。此用户只能访问 staging 空间以及 service.environment
为 staging
的数据。请务必更改 password
、full_name
和 email
字段。
POST /_security/user/staging-apm-user { "password" : "l0ng-r4nd0m-p@ssw0rd", "roles" : [ "staging_apm_viewer" ], "full_name" : "John Staging Doe", "email" : "[email protected]" }
就是这样!返回 Applications UI 并惊叹于您特定于空间的数据。