您可以在Log Service控制台即時查詢所採集到的日誌,並將日誌投遞到MaxCompute,進行進一步的BI分析及資料採礦。本文介紹通過Log Service投遞日誌到MaxCompute的操作步驟。
前提條件
已開通MaxCompute,並建立表。更多資訊,請參見建立表。
使用限制
只有阿里雲帳號能夠建立投遞任務,不支援RAM使用者操作。
不同Logstore中的資料請勿投遞到同一張MaxCompute表中,有小機率導致MaxCompute表中的分區資料被覆蓋。
投遞不支援日誌時間(對應保留欄位__time__)距離目前時間14天以前的資料,在投遞過程中自動丟棄超過14天的資料。
通過Log Service投遞日誌到MaxCompute,暫不支援DECIMAL、DATETIME、DATE、TIMESTAMP資料類型。更多資訊,請參見2.0資料類型版本。
支援的地區如下所示,其他地區請使用DataWorks進行資料同步。更多資訊,請參見Log Service通過Data Integration投遞資料。
Log ServiceProject所在地區
MaxCompute所在地區
華北1(青島)
華東2(上海)
華北2(北京)
華北2(北京)、華東2(上海)
華北3(張家口)
華東2(上海)
華北5(呼和浩特)
華東2(上海)
華東1(杭州)
華東2(上海)
華東2(上海)
華東2(上海)
華南1(深圳)
華南1(深圳)、華東2(上海)
中國(香港)
華東2(上海)
步驟一:建立投遞任務
在Project列表地區,單擊目標Project。
在
頁簽中,單擊目標Logstore左側的>,選擇 。單擊開啟投遞。
在投遞提示對話方塊中,單擊直接投遞。
在MaxCompute投遞功能頁面,配置投遞規則,然後單擊確定。
重要參數配置如下所示。
參數
說明
選擇要投遞的地區
Log ServiceProject所在地區不同,所支援的MaxCompute地區不同。更多資訊,請參見使用限制。
投遞名稱
投遞任務的名稱。
專案名
MaxCompute專案名稱。
MaxCompute表名
MaxCompute表名稱。
MaxCompute普通列
左邊輸入框中填寫與MaxCompute表列相映射的日誌欄位名稱,右邊為MaxCompute表的列名稱。更多資訊,請參見資料模型映射。
重要Log Service投遞日誌到MaxCompute按照日誌欄位與MaxCompute表列的順序進行映射,修改MaxCompute表列名不影響資料投遞。如果更改MaxCompute表schema,請重新設定日誌欄位與MaxCompute表列映射關係。
左邊輸入框的日誌欄位,不支援雙引號(“”)、單引號('')和含有空格的字串。
- 如果您的日誌中存在同名欄位(例如都為request_time),則Log Service會將其中一個欄位名顯示為request_time_0,底層儲存的欄位名仍為request_time。因此您在投遞時,只能使用原始欄位名request_time。
存在同名欄位時,系統只隨機投遞其中一個欄位的值。請盡量避免日誌中使用同名欄位。
MaxCompute分區列
左邊輸入框中填寫與MaxCompute表分區列相映射的日誌欄位名稱,右邊為MaxCompute表分區列名稱。更多資訊,請參見資料模型映射。
說明最大配置3個分區列,請謹慎選擇自訂欄位作為分區列,保證一次投遞任務中產生的分區數目小於512個,否則會導致投遞任務寫資料到MaxCompute表失敗,整批資料無法投遞。
時間分區格式
時間分區格式,配置樣本和參數詳細請參見參考樣本和Java SimpleDateFormat。
說明僅當分區欄位配置為__partition_time__時,時間分區格式才生效。
請勿使用精確到秒的日期格式,易導致單表的分區數目超過限制(60000個)。
單次投遞任務的資料分區數目必須在512以內。
匯入時間間隔
投遞任務的時間長度,預設值為1800,單位為秒。
當投遞任務的時間長度達到此處設定的大小時,會自動建立一個新的投遞任務。
開啟投遞後,一般情況下日誌資料會在寫入Logstore後的1個小時匯入到MaxCompute,匯入成功後即可在MaxCompute內查看到相關日誌資料。更多資訊,請參見日誌投遞MaxCompute後,如何檢查資料完整性。
步驟二:查看MaxCompute資料
投遞到MaxCompute成功後,您可以查看MaxCompute資料,資料範例如下所示。您可以使用已經與MaxCompute綁定的巨量資料開發工具Data IDE來消費資料,進行可視化的BI分析及資料採礦。
| log_source | log_time | log_topic | time | ip | thread | log_extract_others | log_partition_time | status |
+------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+
| 10.10.*.* | 1453899013 | | 27/Jan/2016:20:50:13 +0800 | 10.10.*.* | 414579208 | {"url":"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1","user-agent":"aliyun-sdk-java"} | 2016_01_27_20_50 | 200 |
+------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+
授予Log Service帳號投遞許可權
在數加平台刪除表後再重建,會導致預設授權失效,您需手動為Log Service投遞資料操作重新授權。
登入DataWorks控制台。
在頁面左上方,選擇地區。
在左側導覽列中,單擊工作空間列表。
在工作空間列表頁面,將滑鼠移至上方至目標工作空間對應的快速進入,然後單擊資料開發。
建立商務程序。
在資料開發頁面,選擇
。在建立商務程序對話方塊中,配置業務名稱,然後單擊建立。
建立節點。
在資料開發頁面,選擇
。在建立節點對話方塊中,配置名稱和路徑,然後單擊提交。
其中,路徑需配置為您在步驟5中所建立的商務程序。
在已建立的節點編輯框中,執行如下命令,完成授權。
命令
含義
ADD USER aliyun$shennong_open@aliyun.com;
在MaxCompute專案空間中添加使用者。
其中shennong_open@aliyun.com為Log Service帳號(固定值,請勿修改)。
GRANT Read, List ON PROJECT {ODPS_PROJECT_NAME} TO USER aliyun$shennong_open@aliyun.com;
授予使用者讀和查詢MaxCompute專案空間的許可權。
其中{ODPS_PROJECT_NAME}為MaxCompute專案空間名稱,請使用實際值替換。
GRANT Describe, Alter, Update ON TABLE {ODPS_TABLE_NAME} TO USER aliyun$shennong_open@aliyun.com;
授予使用者Describe、Alter和Update許可權。
其中{ODPS_TABLE_NAME}為MaxCompute表名稱,請使用實際值替換。
SHOW GRANTS FOR aliyun$shennong_open@aliyun.com;
確認授權是否成功。
如果返回如下資訊表示授權成功。
A projects/{ODPS_PROJECT_NAME}: List | Read A projects/{{ODPS_PROJECT_NAME}/tables/{ODPS_TABLE_NAME}: Describe | Alter | Update
相關操作
建立投遞任務後,您可以在MaxCompute(原ODPS)投遞管理頁面,執行修改投遞配置、關閉投遞任務、查看投遞任務狀態及錯誤資訊、重試投遞任務等操作。
修改投遞配置
單擊投遞配置,修改投遞配置,參數詳情請參見本文中的步驟一:建立投遞任務。其中如果想新增列,可以在MaxCompute修改投遞的資料表列資訊。
關閉投遞任務
單擊關閉投遞,即可關閉投遞任務。
查看投遞任務狀態及錯誤資訊
Log Service支援查看過去兩天內的所有日誌投遞任務及其投遞狀態。
任務狀態
狀態
說明
成功
投遞任務正常運行。
進行中
投遞任務進行中,請稍後查看是否投遞成功。
失敗
因外部原因而無法重試的錯誤導致投遞任務失敗,請根據錯誤資訊進行排查並重試。例如MaxCompute表結構不符合Log Service規範、無許可權等。
Log Service支援重試最近2天內所有失敗的任務。
錯誤資訊
如果投遞任務出現錯誤,控制台上會顯示相應的錯誤資訊。
錯誤資訊
建議方案
MaxCompute專案空間不存在
在MaxCompute控制台中確認您配置的MaxCompute專案是否存在,如果不存在則需要建立。Log Service不會主動重試該錯誤,請在解決問題後手動重試。
MaxCompute表不存在
在MaxCompute控制台中確認您配置的MaxCompute表是否存在,如果不存在則需要建立。Log Service不會主動重試該錯誤,請在解決問題後手動重試。
MaxCompute專案空間或表沒有向Log Service授權
在MaxCompute控制台中確認授權給Log Service帳號的許可權是否存在,如果不存在則需要重新授權。更多資訊,請參見授予Log Service帳號投遞許可權。Log Service不會主動重試該錯誤,請在解決問題後手動重試。
MaxCompute錯誤
顯示投遞任務收到MaxCompute錯誤,請參見MaxCompute相關文檔或聯絡MaxCompute團隊解決。Log Service自動重試最近兩天內的失敗任務。
Log Service匯入欄位配置無法匹配MaxCompute表的列
重新設定MaxCompute表的列與Log Service中日誌欄位的映射。Log Service不會主動重試該錯誤,請在解決問題後手動重試。
重試任務
針對內部錯誤,Log Service支援按照策略自動重試。其他情況下,請您手動重試。自動重試的最小間隔是30分鐘。當任務失敗後,等待30分鐘再做重試。Log Service支援重試最近2天內所有失敗的任務。
如果您需要立即重試失敗任務,請單擊重試全部失敗任務或通過API、SDK指定任務進行重試。
參考資訊
__partition_time__
將日誌時間作為分區欄位,通過時間篩選資料是MaxCompute常見的過濾資料的方法。
格式
__partition_time__是根據Log Service中__time__欄位的值計算得到的,結合分區時間格式,向下取整。為避免觸發MaxCompute單表分區數目的限制,日期分區列的值會根據投遞間隔對齊。
例如:Log Service的日誌時間為27/Jan/2016 20:50:13 +0800,Log Service據此計算出保留欄位__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
使用方法
使用__partition_time__ 篩選資料,可以避免全表掃描。例如查詢2016年1月26日一天內日誌資料,查詢語句如下所示。
select * from {ODPS_TABLE_NAME} where log_partition_time >= "2015_01_26" and log_partition_time < "2016_01_27";
__extract_others__
__extract_others__是一個JSON字串。例如要擷取該欄位的user-agent內容,查詢語句如下所示。
select get_json_object(sls_extract_others, "$.user-agent") from {ODPS_TABLE_NAME} limit 10;
說明get_json_object是MaxCompute提供的標準UDF,請聯絡MaxCompute團隊開通使用該標準UDF的許可權。更多資訊,請參見MaxCompute提供的標準UDF。
樣本供參考,請以MaxCompute產品的建議為最終標準。
資料模型映射
將Log Service中的日誌投遞到MaxCompute時,涉及兩個服務之間的資料模型映射問題,相關注意事項與樣本如下所示。
MaxCompute表至少包含一個資料列和一個分區列。
Log Service保留欄位建議使用__partition_time__、__source__、__topic__。
一個MaxCompute表的分區數最大值為60000個,當分區數超出最大值後無法再寫入資料。
投遞任務是批量執行的,請謹慎設定分區列及其類型,保證一個投遞任務內處理的資料分區數小於512個,否則該批資料都無法寫入MaxCompute。
系統保留欄位__extract_others__有曾用名_extract_others_,可相容使用。
MaxCompute分區列的值不支援配置為MaxCompute的保留字和關鍵字。更多資訊,請參見保留字與關鍵字。
MaxCompute分區列取值不支援配置為空白,所以映射到分區列的欄位必須為保留欄位或日誌欄位,且可以通過cast運算子將string類型欄位值轉換為對應分區列類型,空分區列的日誌會在投遞中被丟棄。
Log Service中一個日誌欄位只能映射到一個MaxCompute表的列(資料列或分區列),不支援欄位冗餘,同一個欄位名第二次使用時其投遞的值為null,如果null出現在分區列會導致資料無法被投遞。
MaxCompute資料列、分區列與Log Service欄位的映射關係樣本如下所示,其中Log Service保留欄位詳情請參見保留欄位。
MaxCompute 列類型
列名(MaxCompute)
資料類型(MaxCompute)
日誌欄位名稱(Log Service)
欄位類型(Log Service)
欄位說明
資料列
log_source
string
__source__
保留欄位
日誌來源。
log_time
bigint
__time__
保留欄位
日誌的Unix時間戳記(從1970年1月1日開始所經過的秒數),對應資料模型中的Time域。
log_topic
string
__topic__
保留欄位
日誌主題。
time
string
time
日誌內容欄位
解析自日誌,對應資料模型中的key-value。在很多時候Logtail採集的資料的__time__與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
日誌內容欄位
解析自日誌,該欄位取值支援枚舉,保證分區數目不超過上限。