閱讀212 返回首頁    go 阿裏雲 go 技術社區[雲棲]


用戶手冊__訂閱日誌服務數據_鏈接計算_表格存儲-阿裏雲

LogHub Shipper for TableStore(以下簡稱傳送服務)將用戶在日誌服務中的數據經簡單清洗、轉換後寫入用戶在表格存儲中的表。

它由表格存儲官方提供,以 Docker 鏡像的方式發布於阿裏雲容器 Hub,並經由容器服務運行於用戶的雲服務器上。

服務簡介

在日誌服務中,日誌數據以 json 形式進行存儲,並以日誌組為寫入與讀取的基本單位,這種情況下無法根據特定條件(比如某個 App 近 12 個小時的日誌數據)對日誌做快速的查詢和分析。

日誌數據傳送服務是將日誌服務中的日誌數據經過結構化轉換後實時寫入表格存儲中的數據表,以提供準確的、高性能的實時在線服務。

數據示例

假設在日誌服務中有如下格式的日誌數據:

  1. {"__time__":1453809242,"__topic__":"","__source__":"10.170.148.237","ip":"10.200.98.220","time":"26/Jan/2016:19:54:02 +0800","url":"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=U0UjpekFQOVJW45A&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=pD12XYLmGxKQ%2Bmkd6x7hAgQ7b1c%3D HTTP/1.1","status":"200","user-agent":"aliyun-sdk-java"}

將其寫入到表格存儲中主鍵為”ip”、”time”的數據表中,其格式如下:

ip time source status user-agent url
10.200.98.220 26/Jan/2016:19:54:02 +0800 10.170.148.237 200 aliyun-sdk-java POST /PutData…

在表格存儲中,很容易對某個 ip 根據時間對曆史數據進行精確檢索。

日誌數據傳送服務中提供靈活的數據映射規則,用戶可以配置日誌數據中的字段與數據表中的屬性列的對應關係以及簡單的數據轉換。

基礎概念

相關產品

由傳送服務的定位可以看出,它的功能連接兩個產品,它的部署依托另外兩個產品。所以理解傳送服務需先理解這些產品。

數據表

目標表存儲經清洗、轉換後的用戶日誌數據。

數據表需要注意以下幾點:

  • 用戶需要自行創建目標表,傳送服務不會主動建表。

  • 在日誌服務和表格存儲皆可用的條件下,從一條日誌進入日誌服務到它被寫入表格存儲的延遲在百毫秒級。

  • 傳送服務在表格存儲不可用的情況下會主動等待一段時間(不超過 500 ms)重試。

  • 傳送服務會定期記錄持久化斷點。

  • 若傳送服務本身不可用,比如升級,恢複服務後會從最近一個斷點繼續消費日誌。

  • 一般建議同一個日誌庫的不同日誌對應目標表的不同行。在重試的情況下,這樣做可以是目標表最終一致。

  • 傳送服務使用表格存儲的 UpdateRow 操作寫入數據,所以多個傳送服務可以共用同一個目標表。這種情況下,一般建議這些傳送服務寫入的屬性列不要重疊。

狀態表

傳送服務依賴用戶在表格存儲中創建的狀態表反饋一些信息給用戶。

狀態表需要注意以下幾點:

  • 多個傳送服務可以共用同一個狀態表。

  • 在沒有出錯的情況下,每個傳送服務容器每隔五分鍾在狀態表添加一條記錄。

  • 在出錯的情況下(非表格存儲不可用),傳送服務容器立即在狀態表添加一條記錄。

  • 建議狀態表設置天級別 TTL,隻保留最近的數據。

狀態表有四列主鍵:

  • project_logstore:Str 類型。用戶的日誌服務的項目和日誌庫,以字符’|’分隔。

  • shard:Int 類型。用戶日誌服務的 shard 號。

  • target_table:Str 類型。用戶在表格存儲的目標表表名。

  • timestamp:Int 類型。狀態表這條記錄添加的時間點。UNIX 時間,單位毫秒。

除此以外,還有以下若幹屬性列來記錄本周期的數據導入情況。對於狀態表上任意具體的一行來說,每個屬性列都有可能不存在。

  • shipper_id:Str 類型。傳送服務容器的 id,目前實現成其容器的主機名。

  • error_code:Str 類型。表格存儲定義的錯誤碼,若無錯誤則該屬性列不存在。

  • error_message:Str 類型。表格存儲返回的具體出錯信息,若無錯誤則該屬性列不存在。

  • failed_sample:Str 類型。出錯的日誌,組織成 json string。

  • __time__:Int 類型。該傳送服務容器最近一次更新狀態表以來成功寫入表格存儲的日誌的__time__字段的最大值。

  • row_count:Int 類型。該傳送服務容器最近一次更新狀態表以來成功寫入表格存儲的日誌條數。

  • cu_count:Int 類型。該傳送服務容器最近一次更新狀態表以來消耗的寫服務能力單元

  • skip_count:Int 類型。該傳送服務容器最近一次更新狀態表以來清洗掉的日誌條數。

  • skip_sample:Str 類型。該傳送服務容器最近一次更新狀態表被丟棄掉的日誌之一,組織成 json string。容器本身的日誌會記錄每一條丟棄掉的日誌,以及其被丟棄的理由。

配置

傳送服務在創建的時候需要為容器提供一些環境變量:

  • access_key_id, access_key_secret:傳送服務所用的阿裏雲賬號的 Access Key ID 和 Access Key Secret。

  • loghub:傳送服務所需日誌服務的配置,一個json object。包括:

    • endpoint

    • logstore

    • consumer_group

  • tablestore:傳送服務所需的表格存儲配置,一個json object。包括:

    • endpoint

    • instance:實例名

    • target_table:數據表表名。必須為該實例下已有的表。

    • status_table:狀態表表名。必須為該實例下已有的表。

  • exclusive_columns:屬性列黑名單,一個 json array,其中元素為 json string。

    如果有該項設置,則其中字段不會被作為屬性列寫入目標表。例如,若目標表主鍵 A,exclusive_columns 設為 [“B”, “C”],某條日誌含有 A、B、D三個字段,則目標表會出現一行,主鍵為 A,屬性列為 D;C 不在日誌中而不被寫入;B 雖在日誌中但被 exclusive_columns 排除,也不被寫入。

  • transform:簡單變換,一個 json object,其中的 key 為寫入目標表的列名(可以是主鍵列),而 value 為傳送服務定義的簡單變換表達式:

    • 日誌字段直接是一個表達式。

    • 無符號整數是一個表達式。

    • 被一對雙引號包圍起來的字符串是一個表達式。字符串中可以使用 " 以及 \\ 轉義。

    • ( func arg... )也是一個表達式,括號前後可以有 0 個或多個空白(包括空格和 tab)。func 和其參數之間以及各參數之間有至少一個空白,每個參數都必須是表達式。目前支持如下函數:

      • ->int 將字符串轉換成整數。有兩個參數,第一個參數為進製,支持 2-36 進製;第二個參數為待轉換的字符串,字母(大小寫無關)代表高於十進製下的 10-26。

      • ->bool 將字符串轉換成 Bool 型。有一個參數,為待轉換的字符串,”true”對應 true,”false”對應 false,其餘字符串皆出錯。

      • crc32 計算字符串的 crc32,輸出為 Int 型。有一個參數,為待計算的字符串。

若日誌缺失或轉換的過程出錯則視為 key 對應的列缺失。若出錯,容器的日誌將會記錄詳細的錯誤信息。

傳送服務的清洗規則隻有一條:若主鍵列缺失,則該條日誌被清洗。

改變配置

操作步驟如下:

  1. 登錄容器服務控製台

  2. 單擊服務,進入服務頁麵。

  3. 找到傳送服務,單擊其右側操作欄下的變更配置,進入修改頁麵。

  4. 單擊確定

升級鏡像

操作步驟如下:

  1. 登錄容器服務控製台

  2. 單擊應用,進入應用頁麵。

  3. 找到傳送服務,單擊其右側操作欄下的重新部署

  4. 單擊確定

擴容

以下是兩種有效的擴容方式。如果用戶需要頻繁擴容、縮容,可以考慮使用彈性伸縮以及資源編排

  • 增加節點:通過容器服務控製台的“集群”頁,找到傳送服務所在的集群,點擊“更多操作”,再點擊“集群擴容”可以增加按量付費的雲服務器,或“添加已有實例”將已有的的雲服務器加入集群。

  • 增加傳送服務的容器:增加集群節點本身並不會增加傳送服務的容器,增加傳送服務容器需在改變傳送服務的配置,其操作步驟如下:

    1. 登錄容器服務控製台

    2. 單擊服務,進入服務頁麵。

    3. 找到傳送服務,單擊其右側操作欄下的變更配置,進入修改頁麵。

    4. 修改容器數量,然後單擊確定

縮容

擴容的逆過程。

注意:被摘除的節點並不會自動釋放。

最後更新:2016-11-23 16:04:16

  上一篇:go 使用指南__訂閱日誌服務數據_鏈接計算_表格存儲-阿裏雲
  下一篇:go 操作匯總__API 概覽_API 參考_表格存儲-阿裏雲