全部產品
Search
文件中心

Simple Log Service:解析Java報錯日誌

更新時間:Jun 30, 2024

在巨量資料、高並發情境下的Java應用中,通過有效方式分析Java報錯日誌並提供營運指導,能有效減輕產品營運維護成本。Log Service支援採集各雲產品的Java報錯日誌,通過資料加工解析Java錯誤記錄檔。

前提條件

已採集各SLS、OSS、SLB、RDS的Java錯誤記錄檔到cloud_product_error_log的Logstore。具體操作,請參見Logtail採集日誌

情境描述

某企業基於阿里雲OSS、SLS等產品開發Java應用A過程中,在華東1(杭州)地區建立了名為cloud_product_erro_log的Logstore,用於儲存調用各雲產品介面發生的Java報錯日誌。該企業需要使用Log Service定期分析調用介面發生的Java報錯日誌,便於制定Java報錯處理措施。

為實現以上需求,您需要解析日誌中的時間、錯誤碼、狀態代碼、產品資訊、錯誤碼資訊、要求方法和出錯行號,儲存到各產品的Logstore中,用於錯誤記錄檔分析。

原始日誌範例如下:

__source__:192.0.2.10
__tag__:__client_ip__:203.0.113.10
__tag__:__receive_time__:1591957901
__topic__:
message: 2021-05-15 16:43:35 ParameterInvalid 400
com.aliyun.openservices.log.exception.LogException:The body is not valid json string.
   at com.aliyun.openservice.log.Client.ErrorCheck(Client.java:2161)
   at com.aliyun.openservice.log.Client.SendData(Client.java:2312)
   at com.aliyun.openservice.log.Client.PullLogsk(Client.java:1397)
   at com.aliyun.openservice.log.Client.SendData(Client.java:2265)
   at com.aliyun.openservice.log.Client.GetCursor(Client.java:1123)
   at com.aliyun.openservice.log.Client.PullLogs(Client.java:2161)
   at com.aliyun.openservice.log.Client.ErrorCheck(Client.java:2426)
   at transformEvent.main(transformEvent.java:2559)

總體流程

通過Logtail採集應用A的報錯日誌到名稱為cloud_product_error_log的Logstore中,然後再經過資料加工後投遞到各自產品的Logstore中,最後對各個產品的錯誤記錄檔做分析。總體流程如下:

  1. 設計資料加工語句:資料加工分析,編寫資料加工語句。

  2. 建立資料加工任務:根據產品不同,將日誌分發至不同產品的錯誤分析Logstore。

  3. 查詢和分析資料:在各產品的錯誤分析Logstore中進行日誌分析。

步驟一:設計資料加工語句

加工流程

為便於錯誤記錄檔分析,需要:

  1. 提取message欄位中的時間、錯誤碼、狀態代碼、產品資訊、錯誤碼資訊、要求方法和出錯行號。

  2. 將錯誤記錄檔儲存到各產品的Logstore。

etl-needs

加工邏輯分析

分析原始日誌欄位中的時間、錯誤碼、狀態代碼、產品資訊、錯誤碼資訊、要求方法和出錯行號,為提取每種欄位設計Regex。etl_logic

文法詳解

  1. 使用regex_match函數匹配出此條日誌中是否有LogException。更多資訊,請參見regex_match

  2. 如果匹配上則按照解析SLS錯誤記錄檔的規則進行處理;如果匹配上OSSException則按照解析OSS錯誤記錄檔的規則進行處理。更多資訊,請參見e_switch

  3. 使用e_regex正則解析函數解析相應的錯誤記錄檔。更多資訊,請參見e_regex

  4. 刪除原欄位message資訊,並投遞到相應產品的Logstore。更多資訊,請參見e_drop_fieldse_output、e_coutput

  5. 更多資訊,請參見Regex-分組

加工文法分析

以使用Regex解析SLS錯誤記錄檔為例,具體如下:文法解析

具體的加工文法為:

e_switch(
    regex_match(v("message"), r"LogException"),
    e_compose(
        e_regex(
            "message",
            "(?P<data_time>\S+\s\S+)\s(?P<error_code>[a-zA-Z]+)\s(?P<status>[0-9]+)\scom\.aliyun\.openservices\.log\.exception\.(?P<product_exception>[a-zA-Z]+)\:(?P<error_message>[a-zA-Z0-9:,\-\s]+)\.(\s+\S+\s\S+){5}\s+\S+\scom\.aliyun\.openservices\.log\.Client\.(?P<method>[a-zA-Z]+)\S+\s+\S+\stransformEvent\.main\(transformEvent\.java\:(?P<error_line>[0-9]+)\)",
        ),
        e_drop_fields("message"),
        e_output("sls-error"),
    ),
    regex_match(v("message"), r"OSSException"),
    e_compose(
        e_regex(
            "message",
            "(?P<data_time>\S+\s\S+)\scom\.aliyun\.oss\.(?P<product_exception>[a-zA-Z]+)\:(?P<error_message>[a-zA-Z0-9,\s]+)\.\n\[ErrorCode\]\:\s(?P<error_code>[a-zA-Z]+)\n\[RequestId\]\:\s(?P<request_id>[a-zA-Z0-9]+)\n\[HostId\]\:\s(?P<host_id>[a-zA-Z-.]+)\n\S+\n\S+(\s\S+){3}\n\s+\S+\s+(.+)(\s+\S+){24}\scom\.aliyun\.oss\.OSSClient\.(?P<method>[a-zA-Z]+)\S+\s+\S+\stransformEvent\.main\(transformEvent\.java:(?P<error_line>[0-9]+)\)",
        ),
        e_drop_fields("message"),
        e_output("oss-error"),
    ),
)

步驟二:建立資料加工任務

  1. 進入資料加工頁面。

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

    2. 日誌儲存 > 日誌庫頁簽中,單擊目標Logstore。

    3. 在查詢和分析頁面,單擊資料加工

  2. 在頁面右上方,選擇資料的時間範圍。

    請確保在原始日誌頁簽中有Log。

  3. 在編輯框中,輸入資料加工語句。

    e_switch(
        regex_match(v("message"), r"LogException"),
        e_compose(
            e_regex(
                "message",
                "(?P<data_time>\S+\s\S+)\s(?P<error_code>[a-zA-Z]+)\s(?P<status>[0-9]+)\scom\.aliyun\.openservices\.log\.exception\.(?P<product_exception>[a-zA-Z]+)\:(?P<error_message>[a-zA-Z0-9:,\-\s]+)\.(\s+\S+\s\S+){5}\s+\S+\scom\.aliyun\.openservices\.log\.Client\.(?P<method>[a-zA-Z]+)\S+\s+\S+\stransformEvent\.main\(transformEvent\.java\:(?P<error_line>[0-9]+)\)",
            ),
            e_drop_fields("message"),
            e_output("sls-error"),
        ),
        regex_match(v("message"), r"OSSException"),
        e_compose(
            e_regex(
                "message",
                "(?P<data_time>\S+\s\S+)\scom\.aliyun\.oss\.(?P<product_exception>[a-zA-Z]+)\:(?P<error_message>[a-zA-Z0-9,\s]+)\.\n\[ErrorCode\]\:\s(?P<error_code>[a-zA-Z]+)\n\[RequestId\]\:\s(?P<request_id>[a-zA-Z0-9]+)\n\[HostId\]\:\s(?P<host_id>[a-zA-Z-.]+)\n\S+\n\S+(\s\S+){3}\n\s+\S+\s+(.+)(\s+\S+){24}\scom\.aliyun\.oss\.OSSClient\.(?P<method>[a-zA-Z]+)\S+\s+\S+\stransformEvent\.main\(transformEvent\.java:(?P<error_line>[0-9]+)\)",
            ),
            e_drop_fields("message"),
            e_output("oss-error"),
        ),
    )
  4. 單擊預覽資料

    預覽

  5. 建立資料加工任務。

    1. 單擊儲存資料加工

    2. 建立資料加工任務面板,配置如下資訊,然後單擊確定

      參數

      說明

      任務名稱

      資料加工任務的名稱。例如test。

      授權方式

      選擇預設角色讀取源Logstore資料。

      儲存目標

      目標名稱

      儲存目標的名稱。例如sls-error和oss-error。

      目標Region

      選擇目標Project所在地區。例如華東1(杭州)。

      目標Project

      用於儲存資料加工結果的目標Project名稱。

      目標庫

      用於儲存資料加工結果的目標Logstore名稱。例如sls-error和oss-error。

      授權方式

      選擇擇預設角色將資料加工結果寫入目標日誌庫。

      加工範圍

      時間範圍

      時間範圍選擇所有

    建立資料加工任務後,Log Service預設為每個加工任務建立一個儀錶盤,您可以在儀錶盤中查看資料加工任務運行指標。診斷

    通過異常詳情圖表,可以查到具體哪一條日誌沒有解析出來,然後再調整Regex。

    • 如果解析Log失敗,上報WARNING層級日誌。該類報錯不會影響到整個加工任務繼續執行。

    • 如果上報ERROR層級日誌,則會影響到整個加工任務的繼續執行。需要逐步尋找定位問題,並修改Regex,直到加工任務能夠成功解析各個不同類型的錯誤記錄檔。

步驟三:分析錯誤記錄檔資料

基於加工後的錯誤記錄檔,可以進行錯誤記錄檔資料分析。本文只對Log Service的Java錯誤記錄檔做分析。

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

    image

  2. 在控制台左側,單擊日誌儲存,在日誌庫列表中單擊目標Logstore。

    image

  3. 在搜尋方塊中輸入查詢和分析語句。

    • 統計每個調用方法出現錯誤的數量。

      * | SELECT COUNT(method) as m_ct, method GROUP BY method
    • 統計PutLogs中哪一類的錯誤資訊佔比最大。

      * | SELECT error_message,COUNT(error_message) as ct_msg, method WHERE method LIKE 'PutLogs' GROUP BY error_message,method
    • 統計各個錯誤碼出現的錯誤次數。

      * | SELECT error_code,COUNT(error_code) as count_code GROUP BY error_code
    • 設定報錯時間軸,即時查看調用介面錯誤資訊。

      * | SELECT date_format(data_time, '%Y-%m-%d %H:%m:%s') as date_time,status,product_exception,error_line, error_message,method ORDER BY date_time desc
  4. 單擊15分鐘(相對),設定查詢分析的時間範圍。

    您可以設定相對時間、整點時間和自訂時間。

    說明

    查詢結果有1 min以內的誤差。

  5. 單擊查詢/分析,查看查詢分析結果。