故障排除
编辑故障排除编辑
本节介绍您在使用 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 数据 以获取进一步的故障排除步骤。
确保字段可搜索 如果您想确保某个字段可搜索,可以执行以下两项操作
- 将您的附加数据索引为 标签。默认情况下,这些标签是动态的,这意味着它们将被编入索引并变得可搜索和可聚合。
- 为该字段创建自定义映射。
服务地图:客户端和服务器之间没有连接编辑
如果服务地图未显示客户端和服务器之间预期的连接,则可能是因为您尚未配置 distributedTracingOrigins
。
例如,对于跨域请求,此设置是必需的。如果您有一个基本 Web 应用程序,它通过 localhost:4000
上的 API 提供数据,并从 localhost:4001
提供 HTML,则需要设置 distributedTracingOrigins: ['https://127.0.0.1:4000']
以确保将源作为分布式跟踪的一部分进行监控。换句话说,在 APM 代理将分布式跟踪 traceparent
标头添加到每个请求之前,会先查询 distributedTracingOrigins
。