本文介紹采集到日志服務中的日志數據的數據模型。
為方便您理解日志服務中日志數據的數據模型并順利使用,從如下基本概念展開介紹。
地域(Region)
地域為阿里云的服務節點。通過在不同的阿里云地域部署服務,實現您的服務距離您的客戶更近,獲得更低的訪問延時及更好的用戶體驗。目前阿里云在全國各地擁有多個服務地域。
項目(Project)
項目為日志服務中的基本管理單元,用于資源隔離和控制。您可以通過項目來管理某一個應用的所有日志及相關的日志源。
日志庫(Logstore)
日志庫是日志服務中日志數據的收集、存儲和消費單元。每個日志庫隸屬于一個項目,每個項目可以創建多個日志庫。您可以根據實際需求為某一個項目生成多個日志庫,其中常見的做法是為一個應用中的每類日志創建一個獨立的日志庫。例如:您有一個名為big-game的游戲應用,服務器上有三種日志:操作日志(operation_log)、應用程序日志(application_log)以及訪問日志(access_log),您可以首先創建名為big-game的項目,然后在該項目下面為這三種日志創建三個日志庫,分別用于它們的收集、存儲和消費。
日志(Log)
數據域 | 描述 | 要求 |
time | 日志中保留字段,用以表示日志產生的時間,一般由日志中的時間直接生成。 | 整型,Unix標準時間格式。單位為秒,表示從1970-1-1 00:00:00 UTC計算起的秒數。 |
topic | 用戶自定義字段,用以標記一批日志。例如訪問日志可根據不同站點進行標記。 | 包括空字符串在內的任意字符串,長度不超過128字節。默認情況下,該字段為空字符串。 |
source | 日志的來源地,例如產生該日志機器的IP地址。 | 任意不超過128字節的UTF-8編碼字符串。默認該字段為空。 |
content | 用以記錄日志的具體內容。內容部分由一個或多個內容項組成,每一個內容項由Key-Value對組成。 | Key為UTF-8編碼字符串,包含字母、下劃線和數字,且不以數字開頭,其長度不超過128字節,且不可以使用如下關鍵字:
|
tags | 日志的標簽,包括:
| 字典格式,Key和Value均為字符串類型。在控制臺查詢日志時,以__tag__: 為前綴展示。 |
日志主題(Topic)
一個日志庫內的日志可以通過日志主題(Topic)來劃分。您可以在寫入時指定日志主題,并在查詢時指定查詢的日志主題。例如,一個平臺用戶可以使用用戶編號作為日志主題寫入日志。這樣在查詢時可利用日志主題讓不同用戶僅看到自己的日志。如果不需要劃分一個日志庫內的日志,讓所有日志使用相同的日志主題即可。
實際使用場景中,日志的格式多樣。為了幫助理解,以下以一條Nginx原始訪問日志如何映射到日志服務中日志數據模型為例說明。假設用戶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"
數據域 | 內容 | 說明 |
topic | None | 沿用默認值(空字符串)。 |
time | 1330589527 | 日志產生的精確時間(精確到秒),從原始日志中的時間戳轉換而來。 |
source | 10.10.10.1 | 使用服務器IP地址作為日志源。 |
content | Key-Value對 | 日志具體內容。 |
key | value |
ip | 10.1.1.1 |
method | GET |
status | 200 |
length | 5 |
ref_url | - |
browser | Mozilla/5.0 (X11; Linux i686 on x86_64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2 |
Logs
由多條日志產生的集合。
LogGroup
一組日志的集合。
LogGroupList
一組LogGroup集合,用于結果返回。
編碼方式
含義 | 描述 | Content-Type |
Protobuf | Protobuf對數據模型進行編碼 | application/x-protobuf |
Protobuf格式請參見數據編碼方式。
由于Protobuf對Key-Value對不要求唯一性,因此需要避免出現該情況,否則行為為未定義。
對于同一個Message中的字段,在Protobuf編碼時需要按照字段編號的順序,否則數據可能會解析失敗。