Elastic APM 事件接收 API
编辑Elastic APM 事件接收 API编辑
大多数用户不需要直接与事件接收 API 交互。
事件接收 API 是我们对 APM 代理用于与 APM 服务器通信的内部协议的称呼。代理通过在 HTTP 请求中发送事件(捕获的信息片段)来与服务器通信。事件可以是
- 事务
- 跨度
- 错误
- 指标
每个事件在 HTTP 请求正文中作为单独的一行发送。这被称为 换行符分隔的 JSON (NDJSON)。
使用 NDJSON,代理可以打开 HTTP POST 请求并使用分块编码将事件流式传输到 APM 服务器,一旦它们在代理中被记录下来。这使得代理可以轻松地将每个事件序列化为以换行符分隔的 JSON 流。APM 服务器也将 HTTP 正文视为压缩流,因此独立读取和处理每个事件。
请参阅 APM 数据模型 以详细了解不同类型的事件。
端点编辑
APM 服务器为 Elastic APM 代理数据接收公开以下端点
名称 | 端点 |
---|---|
APM 代理事件接收 |
|
RUM 事件接收 (v2) |
|
RUM 事件接收 (v3) |
|
请求编辑
向 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 的请求