开发者社区 问答 正文

日志服务的PostLogStoreLogs怎么用?


向指定的 logStore 写入日志数据。目前仅支持写入 PB 格式 LogGroup 日志数据。写入时有两种模式:

  • 负载均衡模式(LoadBalance): 自动根据 logstore 下所有可写的 shard 进行负载均衡写入。该方法对写入可用性较高(SLA: 99.95%),适合写入与消费数据与 shard 无关的场景,例如不保序。
  • 根据 Key 路由 shard 模式(KeyHash):写入时需要传递一个 Key,服务端自动根据 Key 选择当前符合该 Key 区间的 shard 写入。例如,可以将某个生产者(例如 instance)根据名称 Hash 到固定 shard 上,这样就能保证写入与消费在该 shard 上是严格有序的(在 Merge/Split 过程中能够严格保证对于 Key 在一个时间点只会出现在一个 shard 上,参见 shard 数据模型)。


请求语法


[backcolor=transparent]负载均衡写入模式
[backcolor=transparent]


请求参数

名称类型必选描述
logstorename字符串需要写入日志的 logstore 名称。


请求头


根据 Key 路由 shard 模式下需要增加 x-log-hashkey 请求头(参见上述示例)。关于 API 的公共请求头,请参考 公共请求头

响应头


无特有响应头。关于 API 的公共响应头,请参考 公共响应头

响应元素


成功后无任何响应元素。

细节描述

  • PutLogs 接口每次可以写入的日志数据量上限为 3MB 或者 4096 条。只要日志数据量超过这两条上限中的任意一条则整个请求失败,且无任何日志数据成功写入。
  • 服务端会对每次 PutLogs 写入的日志数据做格式检查(具体日志格式要求请参考 核心概念,只要日志数据中有任何一条日志不符合规范,则整个请求失败,且无任何日志数据成功写入。
  • 服务端会对每次 PutLogs 写入的日志数据时间戳做检查。目前只接受日志数据时间戳在服务端当前处理时间前后 [-7x24小时, +15分钟] 小时范围内的日志。如果日志数据内有任何一条日志的时间戳不在该时间范围内,则整个请求失败,且无任何日志数据成功写入。


错误码


除了返回 API 的 通用错误码,还可能返回如下特有错误码:
HTTP 状态码(Status Code)错误码(Error Code)错误消息(Error Message)描述(Description)
400PostBodyInvalidProtobuffer content cannot be parsed.Protobuffer 内容不能够解析。
400InvalidTimestampInvalid timestamps are in logs.日志内容中有无效的日志时间戳。
400InvalidEncodingNon-UTF8 charactors are in logs.日志内容中有非 UTF8 字符。
400InvalidKeyInvalid keys are in logs.日志内容中有无效的 key。
400PostBodyTooLargeLogs must be less than 3M and 4096 lines.日志内容包含的日志必须小于 3MB 和 4096 条。
400PostBodyUncompressErrorBody is uncompressed fail.日志内容解压失败。
499PostBodyInvalidThe post data time is out of range日志中时间范围不在 [-7*24Hour, +15Min] 有效范围内。
404LogStoreNotExistlogstore {Name} not exist.日志库(logstore)不存在。

上表错误消息中 {name} 表示该部分会被具体的 LogstoreName 来替换。


示例


[backcolor=transparent]

请求示例:



展开
收起
轩墨 2017-10-23 14:18:55 3017 分享 版权
0 条回答
写回答
取消 提交回答