本文檔為您介紹資料加工服務進行資料加工後,將加工結果寫入目標Logstore產生錯誤的常見原因和排查處理方法。
工作原理
日誌事件被加工完之後,會被輸出到預先配置好的目標Logstore中。LOG DSL引擎每次讀取一個批次的源日誌(從1條到近萬條不等),資料加工後,並不是加工一條日誌就輸出一條,而是會先將加工好的資料存放在一個緩衝池中,等來源資料批次處理完,再一起輸出。
該環節產生錯誤主要是由於對目標Logstore的訪問異常。可能的異常原因為:
目標Logstore資訊配置錯誤。
目標Logstore資訊發生變化。
網路錯誤。
錯誤影響:
在輸出到目標Logstore產生錯誤時,加工任務會一直重試,直到重試成功或被手動停止。如果重試成功,加工任務會繼續正常工作,不會產生日誌的丟失和冗餘。
如果已經輸出了部分資料後才報錯,例如配置了兩個輸出目標,一個目標成功,另外一個目標失敗。會儲存斷點並一直重試,重試成功後,不會有資料的丟失與冗餘。如果這時停止加工任務再重新啟動時,會從斷點繼續,不會有資料丟失,但可能會有冗餘的資料。
常見錯誤排查
目標Logstore配置了非法的AccessKey。
非法的AccessKey主要分為兩種:非法的AccessKeyId和非法的AccessKeySecret。
錯誤記錄檔:
#非法的AccessKeyId { "errorCode": "Unauthorized", "errorMessage": "AccessKeyId not found: LTAIL3gUus8A****" } #非法的AccessKeySecret { "errorCode": "SignatureNotMatch", "errorMessage": "signature uJfAJbc0ji04gb+cXhh0qWt****= not match" }
排查方法:
檢查任務配置項,查看對應的目標Logstore的AccessKeyID和AccessKeySecret是否存在且正確。
目標Project不存在
錯誤記錄檔:
{ "errorCode": "ProjectNotExist", "errorMessage": "The Project does not exist : your_project_name" }
原因分析:
錯誤記錄檔提示
Project does not exist
有三種可能的原因:任務配置項中的目標Project名稱輸入錯誤。
目標Project名稱輸入正確,但是在加工任務過程中,對應的Project被刪除。
排查方法:
檢查任務配置項中的目標Project名稱是否輸入有誤。
檢查目標Project是否被刪除。
輸出目標不存在。
加工規則範例:
e_coutput("target1")
錯誤記錄檔:
{ "errorMessage": "transform_data: output target target1 is not found in configurations" }
原因分析:
上述LOG DSL規則將日誌事件輸出到
target1
中,而錯誤記錄檔提示target1 is not found in configurations
,說明該加工規則的配置中並沒有定義和target1
關聯的目標Project和Logstore。排查方法:
檢查LOG DSL規則的配置項,確保配置項中定義了加工規則中涉及到的所有儲存目標。
目標Logstore資訊發生變化
原因分析:
使用者配置了正確的目標Logstore資訊,可能也已經進行了部分加工任務。但是在資料加工的過程中,目標Logstore資訊發生了變化,導致原有的配置資訊無法訪問目標Logstore。
錯誤記錄檔:
目標Logstore資訊發生變化有主要是如下兩種情況:
目標Logstore被刪除。
{ "errorMessage": "Logstore [logstore_name] does not exist." }
目標Logstore的AccessKey資訊發生變化。
#非法的AccessKeyId { "errorCode": "Unauthorized", "errorMessage": "AccessKeyId not found: LTAIL3gUus8A****" } #非法的AccessKeySecret { "errorCode": "SignatureNotMatch", "errorMessage": "signature uJfAJbc0ji04gb+cXhh0qWt****= not match" }
排查方法:
檢查目標Logstore是否被刪除。
檢查目標Logstore的AccessKey資訊是否發生改變。
網路錯誤。
錯誤記錄檔:
{ "errorCode": "LogRequestError", "errorMessage": "HTTPConnectionPool(host='your_host', port=80): Max retries exceeded with url: your_url (Caused by NewConnectionError: Failed to establish a new connection: [Errno 11001] getaddrinfo failed'" }
排查方法:
檢查網路連接是否正常。