閱讀162 返回首頁    go windows


核心概念__基礎概念_用戶指南_日誌服務-阿裏雲

半世紀前說起日誌,想到的是船長、操作員手裏厚厚的筆記。如今計算機誕生使得日誌產生與消費無處不在:服務器、路由器、傳感器、GPS、訂單、及各種IoT設備通過不同角度描述著我們生活的世界。借助於計算力量,通過收集、處理、使用日誌,我們不斷更新對整個世界以及體係的認知。

日誌是什麼?

從船長日誌中我們可以發現,日誌除了帶一個記錄的時間戳外,可以包含幾乎任意的內容,例如:一段記錄文字、一張圖片、天氣狀況、船行方向等。幾個世紀過去了,“船長日誌”的方式已經擴展到一筆訂單、一項付款記錄、一次用戶訪問、一次數據庫操作等多樣的領域。

日誌這種廣泛使用模式之所以經久不衰,在於:“日誌是一種簡單的不能再簡單的存儲抽象”。它是一個隻能增加的,完全按照時間排序的一係列記錄。日誌(時間序列數據)看起來如下:

我們可以給日誌末尾添加記錄,並且可以從左到右讀取日誌記錄。每一條記錄都指定了一個唯一的有一定順序的日誌記錄編號。

  日誌順序由“時間”來確定,從圖上可以看到日誌從右到左的時間順序,新產生的事件被記錄,過去的事件漸漸遠去,但它記錄了什麼時間發生了什麼事情,這無論對於計算機、人類、還是整個世界而言,是認知與推理的基礎。   

核心概念

為方便理解整個日誌服務服務並順利使用,這裏首先介紹其中的幾個基本概念。

地域(Region)

地域為阿裏雲的服務節點。用戶通過在不同的阿裏雲Region部署服務,讓自己的服務距離客戶更近,獲得更低的訪問延時及更好的用戶體驗。目前阿裏雲在全國各地擁有多個Region。

項目(Project)

項目為日誌服務中的基本管理單元,用於資源隔離和控製。用戶可以通過項目來管理某一個應用的所有日誌及相關的日誌源。

日誌庫(Logstore)

日誌庫為日誌服務中日誌數據的收集、存儲和查詢單元。每個日誌庫隸屬於一個項目,且每個項目可以創建多個日誌庫。用戶可以根據實際需求為某一個項目生成多個日誌庫,其中常見的做法是為一個應用中的每類日誌創建一個獨立的日誌庫。例如,假如用戶有一個“big-game”遊戲應用,服務器上有三種日誌:操作日誌(operation_log),應用程序日誌(application_log)以及訪問日誌(access_log),用戶可以首先創建名為“big-game”的項目,然後在該項目下麵為這三種日誌創建三個日誌庫,分別用於它們的收集、存儲和查詢。

分區(Shard)

分區(shard)是每個日誌庫下讀寫基本單元,用戶可以指定每個日誌庫下分區數目。每個分區能承載一定量的服務能力:

  • 寫入:5MB/S,2000次/S
  • 讀取:10MB/S,100次/S

shard有兩種狀態:

  • readwrite:shard處於可讀可寫狀態
  • readonly:shard隻能讀,不能寫

每個shard都是有一個range,取值範圍[00000000000000000000000000000000,ffffffffffffffffffffffffffffffff),可用MD5方式來表示,用於支持指定hash key的模式寫入,以及shard split和merge操作

  • inclusiveBeginKey:shard起始的range key(包含)
  • exclusiveEndKey:shard的結束range key(不包含)

在向Shard讀寫數據過程中,讀必須指定對應shard,而寫的過程中可以使用負載均衡模式或者指定hash key的模式。負載模式下,每個數據包,隨機寫入某一個當前可用的shard中,在指定hash key模式下,數據寫入shard range包含這個key的shard。

Project/Logstore/Shard 關係:shard

日誌(Log)

日誌為日誌服務中處理的最小數據單元。日誌服務采用半結構數據模式定義一條日誌,具體數據模型如下:

  • 主題(Topic):用戶自定義字段,用以標記一批日誌(例如:訪問日誌根據不同的站點進行標記)。默認該字段為空字符串(空字符串也為一個有效的主題)。
  • 時間(Time):日誌中保留字段,用以表示日誌產生的時間(精度為秒,從1970-1-1 00:00:00 UTC計算起的秒數),一般由日誌中的時間直接生成。
  • 內容(Content):用以記錄日誌的具體內容。內容部分由一個或多個內容項組成,每一個內容項由Key、Value對組成。
  • 來源(Source):日誌的來源地,例如產生該日誌機器的IP地址。默認該字段為空。

與此同時,日誌服務對日誌各字段的取值有不同要求,具體如下表描述:

數據域 要求
time 整型,Unix標準時間格式,最小單位為秒
topic 任意不超過128字節的字符串
source 任意不超過128字節的字符串
content 一個或多個Key-Value對。其中Key為僅包含字母、下劃線、數字,不以數字開頭,不超過128字節的UTF-8編碼字符串。Value為不超過1024*1024字節的任意字符串

上表content中的key不可以使用如下關鍵字:__time____source____topic__, __partition_time___extract_others_, __extract_others__

日誌組(LogGroup)

一組日誌的集合,寫入與讀取的基本單位。日誌組限製為:最大4096行日誌,或10MB空間。

loggroup

日誌主題(Topic)

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

注意:空字符串是一個有效的日誌主題(Topic),且無論是寫入還是查詢日誌時,默認的日誌主題都是空字符串。所以,如果不需要使用日誌主題,最簡單的方式就是在寫入和查詢日誌時都使用默認日誌主題,即空字符串。

下圖描述了日誌庫、日誌主題和日誌之間的關係:

實際使用場景中,日誌的格式多樣。為了幫助理解,以下以一條nginx原始訪問日誌如何映射到日誌服務日誌數據模型為例說明。假設用戶nginx服務器的IP地址為10.249.201.117,下麵為其上的一條原始日誌:

  1. 10.1.168.193 - - [01/Mar/2012:16:12:07 +0800] "GET /Send?AccessKeyId=8225105404 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 “” 沿用默認值(空字符串)
time 1330589527 日誌產生的精確時間(精確到秒),從原始日誌中的時間戳轉換而來。
source “10.249.201.117” 使用服務器IP地址作為日誌源
content Key-Value對 日誌具體內容

用戶可以自己決定如何提取日誌原始內容並組合成Key-Value對,例如下表:

key value
ip “10.1.168.193”
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”

最後更新:2016-11-23 17:25:44

  上一篇:go 彈性Web托管如何創建數據庫賬號和分配權限__產品相關問題_使用問題_彈性 Web 托管-阿裏雲
  下一篇:go 項目(Project)__基礎概念_用戶指南_日誌服務-阿裏雲