Elastic APM 事件接收 API编辑

大多数用户不需要直接与事件接收 API 交互。

事件接收 API 是我们对 APM 代理用于与 APM 服务器通信的内部协议的称呼。代理通过在 HTTP 请求中发送事件(捕获的信息片段)来与服务器通信。事件可以是

  • 事务
  • 跨度
  • 错误
  • 指标

每个事件在 HTTP 请求正文中作为单独的一行发送。这被称为 换行符分隔的 JSON (NDJSON)

使用 NDJSON,代理可以打开 HTTP POST 请求并使用分块编码将事件流式传输到 APM 服务器,一旦它们在代理中被记录下来。这使得代理可以轻松地将每个事件序列化为以换行符分隔的 JSON 流。APM 服务器也将 HTTP 正文视为压缩流,因此独立读取和处理每个事件。

请参阅 APM 数据模型 以详细了解不同类型的事件。

端点编辑

APM 服务器为 Elastic APM 代理数据接收公开以下端点

名称 端点

APM 代理事件接收

/intake/v2/events

RUM 事件接收 (v2)

/intake/v2/rum/events

RUM 事件接收 (v3)

/intake/v3/rum/events

请求编辑

向 APM 服务器 intake/v2/events 端点发送 HTTP POST 请求

http(s)://{hostname}:{port}/intake/v2/events

8.5.0 版本开始,APM 服务器支持异步处理批处理。要请求异步处理,可以在 POST 请求中将 async 查询参数设置为 intake/v2/events 端点

http(s)://{hostname}:{port}/intake/v2/events?async=true

由于异步处理将一些事件处理推迟到后台,并在客户端关闭请求后进行,因此一些错误无法传回客户端,而是由 APM 服务器记录。此外,只有当 APM 服务器能够处理传入请求时,才会调度异步处理请求,无法处理的请求将收到内部错误 503“队列已满”错误。

对于 RUM,请向 APM 服务器 intake/v3/rum/events 端点发送 HTTP POST 请求

http(s)://{hostname}:{port}/intake/v3/rum/events

响应编辑

成功后,服务器将响应 202 Accepted 状态代码,并且没有正文。

请记住,事件可以独立于彼此成功或失败。只有所有事件都成功,服务器才会响应 202。

错误编辑

APM 服务器可能会向代理返回两种类型的错误

  • 与事件相关的错误(通常是验证错误)
  • 与事件无关的错误

APM 服务器逐个处理事件。如果在处理事件时遇到错误,则遇到的错误以及导致错误的文档将添加到内部数组中。APM 服务器只会保存 5 个与事件相关的错误。如果遇到超过 5 个与事件相关的错误,则不会将其他错误返回给代理。处理完所有事件后,将发送错误响应。

一些与特定事件无关的错误可能会立即终止请求。例如:IP 速率限制已达到、错误的元数据等。如果在任何时候遇到其中一个错误,它将被添加到内部数组中并立即返回。

示例错误响应可能如下所示

{
  "errors": [
    {
      "message": "<json-schema-err>", 
      "document": "<ndjson-obj>" 
    },{
      "message": "<json-schema-err>",
      "document": "<ndjson-obj>"
    },{
      "message": "<json-decoding-err>",
      "document": "<ndjson-obj>"
    },{
      "message": "too many requests" 
    },
  ],
  "accepted": 2320 
}

与事件相关的错误

导致错误的文档

立即返回的与事件无关的错误

已接受事件的数量

如果您正在开发代理,这些错误对于调试很有用。

事件 API 架构编辑

APM 服务器使用一组 JSON 架构来验证对接收 API 的请求