故障排除编辑

本节介绍您在使用 APM 应用时可能会遇到的一些常见问题。如需为此页面添加内容,请考虑打开一个 拉取请求,其中包含您建议的更改。

如果您的问题可能与 APM 生态系统的其他组件相关,请不要忘记查看我们的其他故障排除指南或讨论论坛

APM 应用常见问题故障排除编辑

找不到 APM 数据编辑

本节可以帮助解决以下任何问题

  • APM 应用中未显示数据
  • 升级后,APM 应用中未显示数据
  • 您看到类似“找不到服务”的消息
  • 您看到类似“默认情况下,文本字段上的 Fielddata 被禁用...”的错误

这些问题很可能是由缺少索引模板或摄取管道引起的。默认情况下,Fleet 会在安装 APM 集成时设置这些和其他 APM 资源。请尝试通过导航到以下位置重新安装 APM 集成:集成 > Elastic APM > 在 Fleet 中管理 > 设置 > 重新安装 Elastic APM

由于无法追溯地将资源应用于索引,因此在重新安装 APM 集成后,您必须等待索引滚动或强制滚动。要强制滚动,请使用 滚动 API 来定位相关的 APM 数据流

唯一事务名称过多编辑

事务名称在每个 APM 代理中定义;当 APM 代理支持某个框架时,它会包含用于命名该框架创建的事务的逻辑。但是,在某些情况下,例如使用 APM 代理的 API 创建自定义事务时,用户需要定义事务命名模式。如果事务命名不正确,则每个唯一 URL 可能会与一个唯一的事务组相关联,从而导致每个服务的唯一事务组数量激增,并导致 APM 应用中的数据不准确。

要解决唯一事务名称过多的问题,您需要更改使用 APM 代理 API 命名事务的方式。为此,请确保您根据可能更改的参数进行命名。例如,用户 ID、产品 ID、订单号、查询参数等应删除,并且应在您的唯一 URL 之间找到共性。

让我们看一个来自 RUM 代理文档的例子。以下是您可能在 Elastic.co 上找到的一些 URL

// Blog Posts
https://elastic.ac.cn/blog/reflections-on-three-years-in-the-elastic-public-sector
https://elastic.ac.cn/blog/say-heya-to-the-elastic-search-awards
https://elastic.ac.cn/blog/and-the-winner-of-the-elasticon-2018-training-subscription-drawing-is

// Documentation
https://elastic.ac.cn/guide/en/elastic-stack/current/index.html
https://elastic.ac.cn/guide/en/apm/get-started/current/index.html
https://elastic.ac.cn/guide/en/infrastructure/guide/current/index.html

像大多数 URL 一样,这些 URL 也包含唯一名称。如果我们根据每个唯一 URL 命名事务,我们最终会遇到上面描述的问题,即不同事务名称的数量非常多。相反,我们应该删除唯一信息,并根据共同信息对事务进行分组。在这种情况下,这意味着将所有博客事务命名为 /blog,将所有文档事务命名为 /guide

如果您觉得按照此命名约定操作会丢失有价值的信息,请不要担心!您始终可以使用 标签(已编入索引)或 自定义上下文(未编入索引)向事务添加其他元数据。

在确保正确命名事务后,您可能仍然会在 APM 应用中看到与达到事务组限制相关的错误

已达到事务组的数量。已达到当前 APM 服务器处理唯一事务组的容量。此列表中至少缺少 X 个事务。请减少服务中的事务组数量或增加分配给 APM 服务器的内存。

如果代理创建的事务组过多,您将看到此警告。这可能表示您的应用程序中存在需要修复的错误检测。或者,您可以增加 APM 服务器的内存。

事务组的数量超过了允许显示的最大值 (1,000)。已达到 Kibana 中显示的最大事务组数量。请尝试使用查询栏缩小结果范围。

如果您的结果包含超过 1000 个唯一事务组,您将看到此警告。或者,您可以使用查询栏来减少结果中的唯一事务组数量。

更多信息

虽然任何 APM 代理都可能发生这种情况,但它通常发生在 RUM 代理中。有关如何在 RUM 代理中正确设置 transaction.name 的更多信息,请参阅 自定义初始页面加载事务名称

RUM 代理还可以在观察事务事件时设置 transaction.name。有关更多信息,请参阅 apm.observe()

如果您的问题出现在其他 APM 代理中,则上述技巧仍然适用。请参阅相关的 代理 API 文档,以调整您命名事务的方式。

未知路由编辑

只有在正确命名了服务中的事务时,事务概述 才会显示有用的信息。如果您在 APM 应用中看到“GET unknown route”或“unknown route”,则可能表明某些功能无法正常工作。

Elastic APM 代理内置了对流行框架的开箱即用支持。这意味着,除其他外,APM 代理将尝试自动命名 HTTP 请求。例如,Node.js 代理使用处理请求的路由,而 Java 代理使用 Servlet 名称。

“未知路由”表示 APM 代理无法确定请求的名称,这可能是因为不支持您使用的技术、代理安装不正确,或者因为代理无法理解请求中发生的情况。

要解决此问题,您需要前往相关的 APM 代理文档。具体来说,请查看代理支持的技术页面。您还可以使用代理的公共 API 手动设置事务的名称。

字段不可搜索编辑

在 Elasticsearch 中,索引模板用于定义设置和映射,这些设置和映射决定了应如何分析字段。APM 的推荐索引模板由 Fleet 在安装 Elastic APM 集成时安装。默认情况下,这些模板会启用和禁用某些字段的索引。

例如,一些 APM 代理将 Cookie 值存储在 http.request.cookies 中。由于 http.request 已禁用动态索引,并且 http.request.cookies 未在自定义映射中声明,因此 http.request.cookies 中的值未编入索引,因此不可搜索。

确保存在 APM 数据视图 作为第一步,您应确保存在正确的数据视图。在 Kibana 中,转到 堆栈管理 > 数据视图。您应该会看到 APM 数据视图,默认值为 traces-apm*,apm-*,logs-apm*,apm-*,metrics-apm*,apm-*。如果看不到,则表示数据视图不存在。要解决此问题,请导航到 Kibana 中的 APM 应用,然后选择 添加数据。在 APM 教程中,单击 加载 Kibana 对象 以创建 APM 数据视图。

如果创建 APM 数据视图不能解决问题,请参阅 找不到 APM 数据 以获取进一步的故障排除步骤。

确保字段可搜索 如果您想确保某个字段可搜索,可以执行以下两项操作

  1. 将您的附加数据索引为 标签。默认情况下,这些标签是动态的,这意味着它们将被编入索引并变得可搜索和可聚合。
  2. 为该字段创建自定义映射。

服务地图:客户端和服务器之间没有连接编辑

如果服务地图未显示客户端和服务器之间预期的连接,则可能是因为您尚未配置 distributedTracingOrigins

例如,对于跨域请求,此设置是必需的。如果您有一个基本 Web 应用程序,它通过 localhost:4000 上的 API 提供数据,并从 localhost:4001 提供 HTML,则需要设置 distributedTracingOrigins: ['https://127.0.0.1:4000'] 以确保将源作为分布式跟踪的一部分进行监控。换句话说,在 APM 代理将分布式跟踪 traceparent 标头添加到每个请求之前,会先查询 distributedTracingOrigins