正在加载

托管摄入服务事件 API

无服务器

警告

此 API 仅供 APM 代理开发人员使用。绝大多数用户没有理由与此 API 交互。

托管摄入服务公开了以下端点:

托管摄入服务公开了一个 API 端点来查询常规服务器信息。 此轻量级端点可用作服务器启动/关闭运行状况检查。

向服务器信息端点发送 HTTP GET 请求

https://{hostname}:{port}/

此端点始终返回 HTTP 200。

对此端点的请求必须经过身份验证。

托管摄入服务信息请求示例

curl -X POST http://127.0.0.1:8200/ \
  -H "Authorization: ApiKey api_key"

{
  "build_date": "2021-12-18T19:59:06Z",
  "build_sha": "24fe620eeff5a19e2133c940c7e5ce1ceddb1445",
  "publish_ready": true,
  "version": "8.16.1"
}
注意

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

事件摄入 API 是我们所说的 APM 代理用于与托管摄入服务通信的内部协议。 代理通过在 HTTP 请求中发送事件(捕获的信息片段)与服务器通信。 事件可以是

  • 事务
  • Span
  • 错误
  • 指标

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

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

请参阅了解数据类型以了解有关不同类型的事件的更多信息。

托管摄入服务公开了以下端点用于 Elastic APM 代理数据摄入

名称 端点
APM 代理事件摄入 /intake/v2/events

向托管摄入服务 intake/v2/events 端点发送 HTTP POST 请求

https://{hostname}:{port}/intake/v2/events

托管摄入服务支持批量异步处理。 要请求异步处理,可以在对 intake/v2/events 端点的 POST 请求中设置 async 查询参数

https://{hostname}:{port}/intake/v2/events?async=true
注意

由于异步处理会将某些事件处理推迟到后台,并在客户端关闭请求后进行,因此某些错误无法传达回客户端,而是由托管摄入服务记录。 此外,只有当托管摄入服务可以处理传入的请求时,才会安排异步处理请求,无法处理的请求将收到内部错误 503 "队列已满" 错误。

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

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

托管摄入服务可能会向代理返回两种类型的错误

  • 事件相关错误(通常是验证错误)
  • 非事件相关错误

托管摄入服务一个接一个地处理事件。 如果在处理事件时遇到错误,则会将遇到的错误以及导致该错误的文档添加到内部数组中。 托管摄入服务将仅保存 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
}
  1. 一个事件相关错误
  2. 导致错误的文档
  3. 一个立即返回的非事件相关错误
  4. 已接受事件的数量

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

托管摄入服务使用 JSON 模式的集合来验证对摄入 API 的请求。

每次连接到托管摄入服务都以 metadata 节开始。 这提供了关于流中其他对象的一般元数据。

托管摄入服务不会多次从代理发送此元数据信息,而是保留此信息并根据需要将其应用于流中的其他对象。

提示

在 Elasticsearch 中查看文档时,元数据存储在 context 下。

托管摄入服务使用 JSON 模式来验证请求。 元数据的规范在 GitHub 上定义,并包含在下面。

APM 代理自动读取 Kubernetes 数据并将其发送到托管摄入服务。 在大多数情况下,代理能够从容器内部读取此数据。 如果不是这种情况,或者您希望覆盖此数据,您可以为代理设置环境变量以进行读取。 这些环境变量通过 Kubernetes Downward API 设置。 以下是如何将环境变量添加到 Kubernetes Pod 规范中

- name: KUBERNETES_NODE_NAME
   valueFrom:
     fieldRef:
       fieldPath: spec.nodeName
 - name: KUBERNETES_POD_NAME
   valueFrom:
     fieldRef:
       fieldPath: metadata.name
 - name: KUBERNETES_NAMESPACE
   valueFrom:
     fieldRef:
       fieldPath: metadata.namespace
 - name: KUBERNETES_POD_UID
   valueFrom:
     fieldRef:
       fieldPath: metadata.uid

下表将这些环境变量映射到 APM 元数据事件字段

环境变量 元数据字段名称
KUBERNETES_NODE_NAME system.kubernetes.node.name
KUBERNETES_POD_NAME system.kubernetes.pod.name
KUBERNETES_NAMESPACE system.kubernetes.namespace
KUBERNETES_POD_UID system.kubernetes.pod.uid

事务是与在受监控服务中发生的传入请求或类似任务相对应的事件。

托管摄入服务使用 JSON 模式来验证请求。 事务的规范在 GitHub 上定义,并包含在下面。

Span 是由在受监控服务中发生的代理捕获的事件。

托管摄入服务使用 JSON 模式来验证请求。 Span 的规范在 GitHub 上定义,并包含在下面。

由在受监控服务中发生的代理捕获的错误或记录的错误消息。

托管摄入服务使用 JSON 模式来验证请求。错误的规范在 GitHub 上定义,并包含在下面。

指标包含由 APM 代理捕获的应用程序指标数据。

托管摄入服务使用 JSON 模式来验证请求。 指标的规范在 GitHub 上定义,并包含在下面。

Elastic 支持通过 OpenTelemetry 协议 (OTLP) 接收跟踪、指标和日志。 OTLP 是 OpenTelemetry 的默认传输协议,并由托管摄入服务原生支持。

托管摄入服务在同一端口上支持两种 OTLP 通信协议

  • OTLP/HTTP (protobuf)
  • OTLP/gRPC
名称 端点
OTLP 指标摄入 /opentelemetry.proto.collector.metrics.v1.MetricsService/Export
OTLP 跟踪摄入 /opentelemetry.proto.collector.trace.v1.TraceService/Export
OTLP 日志摄入 /opentelemetry.proto.collector.logs.v1.LogsService/Export
名称 端点
OTLP 指标摄入 /v1/metrics
OTLP 跟踪摄入 /v1/traces
OTLP 日志摄入 /v1/logs
提示

请参阅我们的OpenTelemetry 文档以了解如何从 OpenTelemetry 代理 OpenTelemetry 收集器向托管摄入服务发送数据。

© . All rights reserved.