View a markdown version of this page

使用 HLC 端点发送日志(HLC 日志) - Amazon CloudWatch 日志
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 HLC 端点发送日志(HLC 日志)

HLC 日志端点 (/services/collector/event) 基于 HTTP 日志收集器 (HLC) 格式。

如果您使用的是不记名令牌身份验证,请先完成中的设置步骤,设置不记名令牌身份验证然后再继续。

输入模式

每个事件都是一个带有必填"event"字段的 JSON 对象。可选的元数据字段:"time""host""source""sourcetype"、、"index"

单项赛事:

{"event":"Hello world!","time":1486683865.0}

JSON 事件数组:

[ {"event":"msg1","time":1486683865.0}, {"event":"msg2","time":1486683866.0} ]

连接/批处理事件(没有数组包装器):

{"event":"msg1","time":1486683865.0}{"event":"msg2","time":1486683866.0}

事件字段(必填)

"event"字段是必填字段。它的值可以是任何 JSON 类型:

{"event":"a string message"} {"event":{"message":"structured data","severity":"INFO"}} {"event":42} {"event":true}

不带"event"字段的对象会被静默跳过:

{"message":"this is skipped — no event field"}

时间字段(可选)

"time"字段以纪元秒(不是毫秒)为单位,可选小数表示亚秒精度。

格式 示例 解释为
浮点型 "time":1486683865.500 1486683865500 毫秒
整数 "time":1486683865 1486683865000 毫秒
字符串(浮点数) "time":"1486683865.500" 1486683865500 毫秒
字符串(整数) "time":"1486683865" 1486683865000 毫秒
缺失 (无时间字段) 服务器当前时间
无效 "time":"invalid" 服务器当前时间

Content-Type

application/json被接受。

接受的 JSON 值类型

顶级类型 行为
带的对象 "event" 已接受
没有的物体 "event" Skipped
对象数组 每个元素都单独处理
连接的对象 每个对象都单独处理
基元(字符串、数字、布尔值、空) Skipped

终端节点格式

HLC 端点 URL 遵循以下格式:

https://logs.<region>.amazonaws.com/services/collector/event?logGroup=<name>&logStream=<name>[&entityName=<name>&entityEnvironment=<environment>]

必填参数:

  • <region>— Amazon 区域(例如,us-east-1eu-west-1

  • logGroup— URL 编码的日志组名称

  • logStream— URL 编码的日志流名称

可选参数:

您可以选择通过添加以下查询参数将日志事件与Service实体相关联。由于通过 HLC 端点发送的日志是自定义遥测数据,因此它们不会自动与实体关联。通过提供这些参数, CloudWatch Logs 会创建一个KeyAttributes.Type设置为Service的实体,并将其与您的日志事件相关联。这使中与 Explore 相关的功能可以 CloudWatch 将这些日志与来自同一服务的其他遥测(指标、跟踪和日志)关联起来,从而更轻松地对不同信号类型的应用程序进行故障排除和监控。有关实体和相关遥测的更多信息,请参阅向自定义遥测添加相关信息

  • entityName— 要与日志事件关联的服务实体的名称。此值存储为实体KeyAttributes.Name(例如,my-applicationapi.myservice.com)。

  • entityEnvironment— 托管服务的环境或服务所属的环境。此值存储为实体KeyAttributes.Environment(例如productionec2:default、或eks:my-cluster/default)。

请求格式

使用 HTTP POST 发送带有以下标头和正文的日志:

标题:

  • Authorization: Bearer <your-bearer-token>

  • Content-Type: application/json

正文格式:

请求正文应采用 JSON 格式,并包含一系列事件:

{ "event": [ { "time": 1730141374.001, "event": "Application started successfully", "host": "web-server-1", "source": "application.log", "severity": "info" }, { "time": 1730141374.457, "event": "User login successful", "host": "web-server-1", "source": "auth.log", "user": "john.doe" } ] }

字段描述

  • time— Unix 纪元时间戳(以秒为单位),可选十进制表示亚秒精度(可选)

  • event— 日志消息或事件数据(必填)

  • host— 源主机名或标识符(可选)

  • source— 日志源标识符(可选)

可以根据需要添加其他自定义字段。

示例请求

curl -X POST "https://logs.<region>.amazonaws.com/services/collector/event?logGroup=MyLogGroup&logStream=MyStream" \ -H "Authorization: Bearer ACWL<token>" \ -H "Content-Type: application/json" \ -d '{"event":{"message":"User logged in","user_id":"u-123"},"time":1486683865.0,"host":"web-01","source":"auth-service"}'

最佳实践

对事件进行批处理

为了获得更好的性能和效率:

  • 尽可能在单个请求中批量处理多个事件

  • 建议的批处理大小:每个请求 10—100 个事件

  • 最大请求大小:1 MB

错误处理

在应用程序中实现正确的错误处理。常见的 HTTP 状态码:

  • 200 OK— 已成功提取日志

  • 400 Bad Request— 请求格式或参数无效

  • 401 Unauthorized— 不记名令牌无效或已过期

  • 403 Forbidden— 权限不足

  • 404 Not Found— 日志组或直播不存在

  • 429 Too Many Requests— 超出速率限制

  • 500 Internal Server Error— 服务错误(使用指数退避重试)

限制

  • 最大事件大小:每个事件 256 KB

  • 最大请求大小:1 MB

  • 每个请求的最大事件数:10,000

  • 日志组名称必须遵循 CloudWatch 日志命名约定

  • 如果使用不记名令牌身份验证,则必须在日志组上启用持有者令牌身份验证。