全部產品
Search
文件中心

Simple Log Service:投遞日誌到MaxCompute(舊版)

更新時間:Jun 30, 2024

您可以在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(上海)

步驟一:建立投遞任務

  1. 登入Log Service控制台

  2. 在Project列表地區,單擊目標Project。

    image

  3. 日誌儲存 > 日誌庫頁簽中,單擊目標Logstore左側的>,選擇資料處理 > 匯出 > MaxCompute(原ODPS)

  4. 單擊開啟投遞

  5. 投遞提示對話方塊中,單擊直接投遞

  6. 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投遞資料操作重新授權。

  1. 登入DataWorks控制台

  2. 在頁面左上方,選擇地區。

  3. 在左側導覽列中,單擊工作空間列表

  4. 工作空間列表頁面,將滑鼠移至上方至目標工作空間對應的快速進入然後單擊資料開發

  5. 建立商務程序。

    1. 資料開發頁面,選擇建立 > 建立商務程序

    2. 建立商務程序對話方塊中,配置業務名稱,然後單擊建立

  6. 建立節點。

    1. 資料開發頁面,選擇建立 > 建立節點 > ODPS SQL

    2. 建立節點對話方塊中,配置名稱路徑,然後單擊提交

      其中,路徑需配置為您在步驟5中所建立的商務程序。

  7. 在已建立的節點編輯框中,執行如下命令,完成授權。

    授權

    命令

    含義

    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

    日誌內容欄位

    解析自日誌,該欄位取值支援枚舉,保證分區數目不超過上限。