閱讀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_日誌服務-阿裏雲