阅读727 返回首页    go 阿里云


PostLogStoreLogs__日志库相关接口_API-Reference_日志服务-阿里云

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数据模型)。

请求语法

负载均衡写入模式

  1. POST /logstores/<logstorename>/shards/lb HTTP/1.1
  2. Authorization: <AuthorizationString>
  3. Content-Type: application/x-protobuf
  4. Content-Length: <Content Length>
  5. Content-MD5: <Content MD5>
  6. Date: <GMT Date>
  7. Host: <Project Endpoint>
  8. x-log-apiversion: 0.6.0
  9. x-log-bodyrawsize: <BodyRawSize>
  10. x-log-compresstype: lz4
  11. x-log-signaturemethod: hmac-sha1
  12. <PB格式日志压缩数据>

根据Key路由Shard模式

在header中增加x-log-hashkey,用来判断落在哪个shard的range中。该参数可选参数,不填情况下自动切换负载均衡写模式。

  1. POST /logstores/<logstorename>/shards/lb HTTP/1.1
  2. Authorization: <AuthorizationString>
  3. Content-Type: application/x-protobuf
  4. Content-Length: <Content Length>
  5. Content-MD5: <Content MD5>
  6. Date: <GMT Date>
  7. Host: <Project Endpoint>
  8. x-log-apiversion: 0.6.0
  9. x-log-bodyrawsize: <BodyRawSize>
  10. x-log-compresstype: lz4
  11. x-log-hashkey : 14d2f850ad6ea48e46e4547edbbb27e0
  12. x-log-signaturemethod: hmac-sha1
  13. <PB格式日志压缩数据>

请求参数

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

请求头

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

响应头

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

响应元素

成功后无任何响应元素。

细节描述

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

错误码

除了返回API的通用错误码,还可能返回如下特有错误码:

HTTP状态码(Status Code) 错误码(Error Code) 错误消息(Error Message) 描述(Description)
400 PostBodyInvalid Protobuffer content cannot be parsed. Protobuffer内容不能够解析。
400 InvalidTimestamp Invalid timestamps are in logs. 日志内容中有无效的日志时间戳。
400 InvalidEncoding Non-UTF8 charactors are in logs. 日志内容中有非UTF8字符。
400 InvalidKey Invalid keys are in logs. 日志内容中有无效的”key”。
400 PostBodyTooLarge Logs must be less than 3M and 4096 lines. 日志内容包含的日志必须小于3MB和4096条。
400 PostBodyUncompressError Body is uncompressed fail. 日志内容解压失败。
499 PostBodyInvalid The post data time is out of range 日志中时间范围不再[-7*24Hour, +15Min] 有效范围内。
404 LogStoreNotExist logstore {Name} not exist. 日志库(Logstore)不存在。

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

示例

请求示例:
  1. POST /logstores/sls-test-logstore
  2. {
  3. "Content-Length": 118,
  4. "Content-Type":"application/x-protobuf",
  5. "x-log-bodyrawsize":1356,
  6. "Host": "ali-test-project.cn-hangzhou-devcommon-intranet.sls.aliyuncs.com",
  7. "Content-MD5":"6554BD042149C844761C2C094A8FECCE",
  8. "Date":"Thu, 12 Nov 2015 06:54:26 GMT",
  9. "x-log-apiversion": "0.6.0",
  10. "x-log-compresstype":"lz4"
  11. "x-log-signaturemethod": "hmac-sha1",
  12. "Authorization":"LOG 94to3z418yupi6ikawqqd370:zLyKtgyGpwyv7ntXZs2dY2wWIg4="
  13. }
  14. <PB格式日志使用Lz4压缩后的二进制数据>
响应示例:
  1. Header
  2. {
  3. "date": "Thu, 12 Nov 2015 06:53:03 GMT",
  4. "connection": "close",
  5. "x-log-requestid": "5644160399248C060600D216",
  6. "content-length": "0",
  7. "server": "nginx/1.6.1"
  8. }

最后更新:2016-12-12 16:39:39

  上一篇:go PullLogs__日志库相关接口_API-Reference_日志服务-阿里云
  下一篇:go GetShipperStatus__日志库相关接口_API-Reference_日志服务-阿里云