閱讀408 返回首頁    go 阿裏雲


投遞日誌到ODPS__logshipper_用戶指南_日誌服務-阿裏雲

日誌服務收集的日誌除了可以被實時查詢外,還可以把日誌數據投遞到大數據計算服務MaxCompute(原ODPS),進一步進行個性化BI分析及數據挖掘。通過日誌服務投遞日誌數據到MaxCompute具有如下優勢:

  • 使用非常簡單。用戶隻需要完成2步配置即可以把日誌服務Logstore的日誌數據遷移到MaxCompute中。
  • 避免重複收集工作。由於日誌服務的日誌收集過程已經完成不同機器上的日誌集中化,無需重複在不同機器上收集一遍日誌數據後再導入到MaxCompute。
  • 充分複用日誌服務內的日誌分類管理工作。用戶可讓日誌服務中不同類型的日誌(存在不同Logstore中)、不同Project的日誌自動投遞到不同的MaxCompute表格,方便管理及分析MaxCompute內的日誌數據。

在大部分情況下日誌數據在寫入Logstore後的0.5~1個小時導入到MaxCompute,用戶可以在控製台“投遞任務管理”查看導入狀態。導入成功後用戶即可在MaxCompute內查看到相關日誌數據。

結合日誌服務的實時消費,投遞日誌數據到MaxCompute的數據通道以及日誌索引功能,可以讓用戶按照不同的場景和需求、以不同的方式複用數據,充分發揮日誌數據的價值。

配置流程

舉例日誌服務的一條日誌如下:

  1. 16年01月27日20時50分13秒
  2. 10.170.148.237
  3. ip:10.200.98.220
  4. status:200
  5. thread:414579208
  6. time:27/Jan/2016:20:50:13 +0800
  7. 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
  8. user-agent:aliyun-sdk-java

日誌左側的ip、status、thread、time、url、user-agent等是日誌服務數據的字段名稱,需要在下方配置中應用到。

1.第一步:配置AK&自動開通

首先在日誌服務的控製台“Logstore列表”點擊日誌投遞列“創建ODPS”,即打開了配置AK(注意複製過來不要有空格)來自動開通數加及大數據計算服務MaxCompute(原ODPS)(默認是按量後付費模式,具體參見MaxCompute計量計費說明)的頁麵。配置AK及自動開通如上圖,填寫賬號的阿裏雲AK信息,勾選自動開通項,點擊確定,初始化開通需10~20秒左右,請耐心等待。如果已經開通數加及大數據計算服務MaxCompute(原ODPS),將直接跳過該步驟。

目前暫不支持子用戶來投遞大數據計算服務MaxCompute(原ODPS)。

2.第二步:建表&映射數據

數據模型映射

在日誌服務和大數據計算服務MaxCompute(原ODPS)之間同步數據,涉及兩個服務的數據模型映射問題。你可以參考日誌服務日誌數據結構ODPS表了解兩種數據結構。

將樣例日誌導入MaxCompute,分別定義MaxCompute數據列、分區列與日誌服務字段的映射關係:

MaxCompute列類型 MaxCompute列名(可自定義) MaxCompute列類型(可自定義) 日誌服務字段名(投遞配置裏填寫) 日誌服務字段類型 日誌服務字段語義
數據列 log_source string __source__ 係統保留字段 日誌來源的機器IP
log_time bigint __time__ 係統保留字段 日誌的Unix時間戳(是從1970年1月1日開始所經過的秒數),由用戶日誌的time字段計算得到
log_topic string __topic__ 係統保留字段 日誌主題
time string time 日誌內容字段 解析自日誌
ip string ip 日誌內容字段 解析自日誌
thread string thread 日誌內容字段 解析自日誌
log_extract_others string __extract_others__ 係統保留字段 未在配置中進行映射的其它日誌內字段會通過key-value序列化到json,該json是一層結構,不支持字段內部json嵌套。
分區列 log_partition_time string __partition_time__ 係統保留字段 由日誌的time字段對齊計算而得,分區粒度可配置,在配置項部分詳述。
status string status 日誌內容字段 解析自日誌,該字段取值應該是可以枚舉的,保證分區數目不會超出上限。
  • MaxCompute表至少包含一個數據列、一個分區列。
  • 係統保留字段中建議使用__partition_time__,__source__,__topic__。
  • MaxCompute單表有分區數目6萬的限製,分區數超出後無法再寫入數據,所以日誌服務導入MaxCompute表至多支持3個分區列。請謹慎選擇自定義字段作為分區列,保證其值是可枚舉的。
  • 係統保留字段__extract_others__曆史上曾用名_extract_others_,填寫後者也是兼容的。
  • MaxCompute分區列的值不支持”/“等特殊字符,這些是MaxCompute的保留字段。
  • MaxCompute分區列取值不支持空,所以映射到分區列的字段必須要在日誌裏存在,空分區列的日誌會在投遞中被丟棄。
投遞配置

配置好AK後進入到投遞配置頁麵,在該頁麵需要配置投遞大數據計算服務MaxCompute(原ODPS)的相關內容:投遞配置

選項含義:

參數 語義
投遞名稱 自定義一個投遞的名稱,方便後續管理
MaxCompute Project MaxCompute項目名稱,該項默認為新創建的Project,如果已經是MaxCompute老客戶,可以下拉選擇已創建其他Project
MaxCompute Table MaxCompute表名稱,請輸入自定義的新建的MaxCompute表名稱或者選擇已有的MaxCompute表
MaxCompute 普通列 按序,左邊填寫與MaxCompute表數據列相映射的日誌服務字段名稱,右邊填寫或選擇MaxCompute表的普通字段名稱及字段類型
MaxCompute 分區列 按序,左邊填寫與MaxCompute表分區列相映射的日誌服務字段名稱,右邊填寫或選擇MaxCompute表的普通字段名稱及字段類型
分區時間格式 __partition_time__輸出的日期格式,參考Java SimpleDateFormat
導入MaxCompute間隔 MaxCompute數據投遞間隔,默認1800,單位:秒
  • 該步會默認為客戶創建好新的MaxCompute Project和Table,其中如果已經是MaxCompute老客戶,可以下拉選擇其他已創建Project。
  • 日誌服務投遞MaxCompute功能按照字段與列的順序進行映射,修改MaxCompute表列名不影響數據導入,如更改MaxCompute表schema,請重新配置字段與列映射關係。
  • 日誌服務數據的一個字段最多允許映射到一個MaxCompute表的列(數據列或分區列),不支持字段冗餘。
  • __partition_time__ 格式

將日誌時間作為分區字段,通過日期來篩選數據是MaxCompute常見的過濾數據方法。

日誌服務根據日誌time字段和分區時間格式計算出日期作為分區列,且為滿足MaxCompute單表分區數目的限製,日期分區列的值會按照導入MaxCompute間隔對齊。

舉例來說,日誌提取的time字段是”27/Jan/2016:20:50:13 +0800”,日誌服務據此計算出保留字段__time__為1453899013(Unix時間戳),不同配置下的時間分區列取值如下:

導入MaxCompute間隔 分區時間格式 __partition_time__
1800 yyyy_MM_dd_HH_mm_00 2016_01_27_20_30_00
1800 yyyy-MM-dd HH:mm 2016-01-27 20:30
1800 yyyyMMdd 20160127
3600 yyyyMMddHHmm 201601272000
3600 yyyy_MM_dd_HH 2016_01_27_20
  1. 請勿使用精確到秒的日期格式:1. 很容易導致單表的分區數目超過限製(6萬);2. 單次投遞任務的數據分區數目必須在512以內。
  2. 以上分區時間格式是測試通過的樣例,你也可以參考Java SimpleDateFormat自己定義日期格式,但是該格式不得包含斜線字符”/“(這是MaxCompute的保留字段)。
編輯投遞配置

在Logstore列表投遞項,單擊“修改”即可針對之前的配置信息進行編輯。其中如果想新增列,可以在大數據計算服務MaxCompute(原ODPS)修改投遞的數據表列信息,則點擊“修改”後會加載最新的數據表信息。

投遞任務管理

在啟動“投遞功能”後,日誌服務後台會定期啟動離線投遞任務。用戶可以在控製台上看到這些投遞任務的狀態和錯誤信息。具體請參考日誌投遞任務管理

如果投遞任務出現錯誤,控製台上會顯示相應的錯誤信息:

錯誤信息 建議方案
MaxCompute項目空間不存在 在MaxCompute控製台中確認配置的MaxCompute項目是否存在,如果不存在則需要重新創建或配置。
MaxCompute表不存在 在MaxCompute控製台中確認配置的MaxCompute表是否存在,如果不存在則需要重新創建或配置。
MaxCompute項目空間或表沒有向日誌服務授權 在MaxCompute控製台中確認授權給日誌服務賬號的權限是否還存在,如果不存在則需要重新添加上相應權限。
MaxCompute錯誤 顯示投遞任務收到的MaxCompute錯誤,請參考MaxCompute相關文檔或聯係MaxCompute團隊解決。日誌服務會自動重試最近兩天時間的失敗任務。
日誌服務導入字段配置無法匹配MaxCompute表的列 重新配置MaxCompute表格的列與日誌服務數據字段的映射配置。

當投遞任務發生錯誤時,請查看錯誤信息,問題解決後可以通過管理控製台中“日誌投遞任務管理”或SDK來重試失敗任務。

MaxCompute中消費日誌

MaxCompute用戶表中示例數據如下:

  1. | log_source | log_time | log_topic | time | ip | thread | log_extract_others | log_partition_time | status |
  2. +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+
  3. | 10.170.148.237 | 1453899013 | | 27/Jan/2016:20:50:13 +0800 | 10.200.98.220 | 414579208 | {"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","user-agent":"aliyun-sdk-java"} | 2016_01_27_20_50 | 200 |
  4. +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+

同時,我們強烈推薦客戶直接使用已經與MaxCompute綁定的大數據開發Data IDE來進行可視化的BI分析及數據挖掘,這將提高數據加工的效率。

__partition_time__ 使用方法

使用MaxCompute的字符串比較篩選數據,可以避免全表掃描。比如查詢2016年1月26日一天內日誌數據:

  1. select * from {ODPS_TABLE_NAME} where log_partition_time >= "2015_01_26" and log_partition_time < "2016_01_27";

__extract_others__ 使用方法

log_extract_others為一個json字符串,如果想獲取該字段的user-agent內容,可以進行如下查詢:

  1. select get_json_object(sls_extract_others, "$.user-agent") from {ODPS_TABLE_NAME} limit 10;
  1. get_json_object是MaxCompute提供的標準UDF。請聯係MaxCompute團隊開通使用該標準UDF的權限。
  2. 示例供參考,請以MaxCompute產品建議為最終標準。

其它

授予ODPS數據投遞權限

如果在數加平台執行表刪除重建動作,會導致默認授權失效。請手動重新為日誌服務投遞數據授權。

在ODPS項目空間下添加用戶:

  1. ADD USER aliyun$shennong_open@aliyun.com;

shennong_open@aliyun.com 是日誌服務係統賬號(請不要用自己的賬號),授權目的是為了能將數據寫入到ODPS

ODPS項目空間Read/List權限授予:

  1. GRANT Read, List ON PROJECT {ODPS_PROJECT_NAME} TO USER aliyun$shennong_open@aliyun.com;

ODPS項目空間的表Describe/Alter/Update權限授予:

  1. GRANT Describe, Alter, Update ON TABLE {ODPS_TABLE_NAME} TO USER aliyun$shennong_open@aliyun.com;

確認ODPS授權是否成功:

  1. SHOW GRANTS FOR aliyun$shennong_open@aliyun.com;
  2. A projects/{ODPS_PROJECT_NAME}: List | Read
  3. A projects/{ODPS_PROJECT_NAME}/tables/{ODPS_TABLE_NAME}: Describe | Alter | Update

可以參考ODPS用戶授權管理指南了解更多細節。

最後更新:2016-11-24 11:23:47

  上一篇:go 投遞日誌到OSS__logshipper_用戶指南_日誌服務-阿裏雲
  下一篇:go 索引設置__logsearch_用戶指南_日誌服務-阿裏雲