全部產品
Search
文件中心

Simple Log Service:資料模型

更新時間:Jun 30, 2024

本文介紹採集到Log Service中的日誌資料的資料模型。

為方便您理解Log Service中日誌資料的資料模型並順利使用,從如下基本概念展開介紹。

地區(Region)

地區為阿里雲的服務節點。通過在不同的阿里雲地區部署服務,實現您的服務距離您的客戶更近,獲得更低的訪問延時及更好的使用者體驗。目前阿里雲在全國各地擁有多個服務地區。

專案(Project)

專案為Log Service中的基本嵌入式管理單元,用於資源隔離和控制。您可以通過專案來管理某一個應用的所有日誌及相關的日誌源。

日誌庫(Logstore)

日誌庫是Log Service中日誌資料的收集、儲存和消費單元。每個日誌庫隸屬於一個專案,每個專案可以建立多個日誌庫。您可以根據實際需求為某一個專案產生多個日誌庫,其中常見的做法是為一個應用中的每類日誌建立一個獨立的日誌庫。例如:您有一個名為big-game的遊戲應用,伺服器上有三種日誌:動作記錄(operation_log)、應用程式記錄檔(application_log)以及訪問日誌(access_log),您可以首先建立名為big-game的專案,然後在該專案下面為這三種日誌建立三個日誌庫,分別用於它們的收集、儲存和消費。

日誌(Log)

日誌為Log Service中處理的最小資料單元。Log Service採用半結構資料模式定義一條日誌,具體資料模型如下:
資料域描述要求
time日誌中保留欄位,用以表示日誌產生的時間,一般由日誌中的時間直接產生。整型,Unix標準時間格式。單位為秒,表示從1970-1-1 00:00:00 UTC計算起的秒數。
topic使用者自訂欄位,用以標記一批日誌。例如訪問日誌可根據不同網站進行標記。包括Null 字元串在內的任一字元串,長度不超過128位元組。預設情況下,該欄位為空白字串。
source日誌的來源地,例如產生該日誌機器的IP地址。任意不超過128位元組的UTF-8編碼字串。預設該欄位為空白。
content用以記錄日誌的具體內容。內容部分由一個或多個內容項組成,每一個內容項由Key-Value對組成。Key為UTF-8編碼字串,包含字母、底線和數字,且不以數字開頭,其長度不超過128位元組,且不可以使用如下關鍵字:
  • __time__
  • __source__
  • __topic__
  • __partition_time__
  • __extract_others__
  • __extract_others__
Value為不超過1024*1024位元組的任意UTF-8編碼字串。
tags日誌的標籤,包括:
  • 使用者自訂標籤:您通過PutLogs寫入資料時添加的標籤。
  • 服務端為您添加的標籤,包括__client_ip____receive_time__
字典格式,Key和Value均為字串類型。在控制台查詢日誌時,以__tag__:為首碼展示。

日誌主題(Topic)

一個日誌庫內的日誌可以通過日誌主題(Topic)來劃分。您可以在寫入時指定日誌主題,並在查詢時指定查詢的日誌主題。例如,一個平台使用者可以使用使用者編號作為日誌主題寫入日誌。這樣在查詢時可利用日誌主題讓不同使用者僅看到自己的日誌。如果不需要劃分一個日誌庫內的日誌,讓所有日誌使用相同的日誌主題即可。

說明 Null 字元串是一個有效日誌主題(Topic),且無論是寫入還是查詢日誌時,預設的日誌主題都是Null 字元串。所以,如果不需要使用日誌主題,最簡單的方式就是在寫入和查詢日誌時都使用預設日誌主題,即Null 字元串。

實際使用情境中,日誌的格式多樣。為了協助理解,以下以一條Nginx原始訪問日誌如何映射到Log Service中日誌資料模型為例說明。假設使用者Nginx伺服器的IP地址為10.10.10.1,如下為其一條原始日誌:

10.1.1.1 - - [01/Mar/2012:16:12:07 +0800] "GET /Send?AccessKeyId=82251054** HTTP/1.1" 200 5 "-" "Mozilla/5.0 (X11; Linux i686 on x86_64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2"
將該條原始日誌映射到Log Service中日誌資料模型,具體如下。
資料域內容說明
topicNone沿用預設值(Null 字元串)。
time1330589527日誌產生的精確時間(精確到秒),從原始日誌中的時間戳記轉換而來。
source10.10.10.1使用伺服器IP地址作為日誌源。
contentKey-Value對日誌具體內容。
您可以自己決定如何提取日誌原始內容並組合成Key-Value對,如下表所示:
keyvalue
ip10.1.1.1
methodGET
status200
length5
ref_url-
browserMozilla/5.0 (X11; Linux i686 on x86_64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2

Logs

由多條日誌產生的集合。

LogGroup

一組日誌的集合。

LogGroupList

一組LogGroup集合,用於結果返回。

編碼方式

系統目前支援以下內容編碼方式(將來可擴充),Restful API層通過Content-Type表示。
含義描述Content-Type
ProtobufProtobuf對資料模型進行編碼application/x-protobuf

Protobuf格式請參見資料編碼方式

說明

由於Protobuf對Key-Value對不要求唯一性,因此需要避免出現該情況,否則行為為未定義。

對於同一個Message中的欄位,在Protobuf編碼時需要按照欄位編號的順序,否則資料可能會解析失敗。