全部產品
Search
文件中心

Simple Log Service:從OSS擷取資料出錯

更新時間:Jun 30, 2024

如果加工規則中涉及OSS資源的載入,則有可能會產生資源的載入或重新整理錯誤。本文檔主要介紹從OSS擷取資料出錯的原因以及排查處理方法。

在成功讀取源Logstore資料後,加工引擎開始對源Logstore的日誌事件進行加工。如果加工規則中涉及OSS、RDS、Logstore等外聯資源的載入,則也有可能會產生資源的載入或重新整理錯誤。

錯誤影響

在日誌事件加工階段,與加工規則衝突的日誌事件會引發報錯,錯誤分成WARNING和ERROR層級(通過加工日誌的logging.levelname體現)。

  • 對於ERROR層級的錯誤, 該日誌事件會丟棄。加工後的輸出結果中將不包含這些日誌事件,並繼續加工其他的日誌事件,不會重試。

  • 對於WARNING層級的錯誤(例如某些事件與正則規則不匹配),會跳過當前DSL的這一步,進行下一步。

錯誤排查方法

  • 查看錯誤記錄檔的logging.levelname欄位,確定日誌的錯誤層級。

  • 查看錯誤記錄檔的message欄位,定位是哪些日誌事件報錯。具體請參見錯誤記錄檔查看方式

  • 查看錯誤記錄檔的reason欄位,確定這些日誌事件的報錯原因。

根據報錯原因,為這些異常日誌事件增添邏輯,可使用e_ife_switch等流程式控制制函數,捕獲並處理這些錯誤。加工規則異常日誌

OSS擷取資料常見出錯範例

說明

下文中AK_ID和AK_KEY為AccessKeyId和AccessKeySecret的簡稱。

檔案路徑錯誤或者檔案格式錯誤

OSS中不存在data這個目錄或者檔案格式寫錯,從而引發的404錯誤記錄檔。

  • 加工規則範例

    # 假設正確目錄是test
    e_set("oss_file",res_oss_file(endpoint, ak_id=res_local("AK_ID"),ak_key=res_local("AK_KEY"), bucket, 'data/test.txt', format='text', change_detect_interval=20))
    # 此格式在test中不存在
    e_set("oss_file",res_oss_file(endpoint, ak_id=res_local("AK_ID"),ak_key=res_local("AK_KEY"), bucket, 'test/test.dat', format='text', change_detect_interval=20))
  • 錯誤記錄檔

    message:  Exception: {'status': 404, 'x-oss-request-id': '5D49****878', 'details': {'Code': 'NoSuchKey', 'Message': 'The specified key does not exist.', 'RequestId': '5D4***8878', 'HostId': 'lo***g.oss-cn-hangzhou.aliyuncs.com', 'Key': 'oss/test.txt'}}
  • 排查方法

    檢查報錯的日誌事件,如果報錯資訊中status404,並且Messages是關於檔案的,首先要檢查自己的檔案目錄是否寫錯。

  • 解決方案

    res_oss_file函數加工編排中的file參數改成正確的檔案目錄即可。

    # 假如正確的目錄是test
    e_set("oss_file",res_oss_file(endpoint, ak_id=res_local("AK_ID"),ak_key=res_local("AK_KEY"), bucket, 'test/test.txt', format='text', change_detect_interval=20))

檔案解碼錯誤

對從OSS上拉取的檔案,解碼的時候執行錯誤或者使用了不存在的解碼方式。

  • 加工規則範例

    e_set("oss_file",res_oss_file(endpoint, ak_id=res_local("AK_ID"),ak_key=res_local("AK_KEY"), bucket, 'test/test.txt', format='text', change_detect_interval=20, encoding='unicode'))
  • 錯誤記錄檔

    {
      "reason": "LookupError: unknown encoding: unicode"
    }
  • 排查方法

    檢查報錯的日誌事件,如果報錯資訊是unknown encoding: unicode,檢查檔案解碼參數encoding是否寫錯。

  • 解決方案

    res_oss_file函數加工編排中的encoding參數改成正確的解碼格式即可。

    # 假如正確的解碼格式是utf8
    e_set("oss_file",res_oss_file(endpoint, ak_id=res_local("AK_ID"),ak_key=res_local("AK_KEY"), bucket, 'test/test.txt', format='text', change_detect_interval=20,encoding='utf8'))

Endpoint出錯

使用res_oss_file函數的時候Endpoint填寫錯誤。

Endpoint不存在

  • 加工規則範例

    e_set("oss_file",res_oss_file("https://oss-cn-asd.aliyuncs.com", ak_id=res_local("AK_ID"),ak_key=res_local("AK_KEY"), 'your bucket', 'test/test.txt', format='text', change_detect_interval=20))
  • 錯誤記錄檔

    message:  get_oss_bytes get errors:{'status': -2, 'x-oss-request-id': '', 'details': "RequestError: HTTPSConnectionPool(host='log-etl-staging.oss-cn-asd.aliyuncs.com', port=443)
  • 排查方法

    檢查報錯的日誌事件,如果報錯資訊是-2,並且Message資訊是關於RequestError的,檢查endpoint是否存在。

  • 解決方案

    res_oss_file函數加工編排中的endpoint參數值修改正確即可。

OSS Endpoint與bucket名字不匹配

授權的AccessKey擁有在杭州region的操作許可權,而Endpoint寫成了上海。

  • 加工規則範例

    e_set("oss_file",res_oss_file("https://oss-cn-shanghai.aliyuncs.com", ak_id=res_local("AK_ID"),ak_key=res_local("AK_KEY"), 'your bucket', 'test/test.txt', format='text', change_detect_interval=20))
  • 錯誤記錄檔

    message:  get_oss_bytes get errors:{'status': 403, 'x-oss-request-id': '5D7219353A90A2852B234D14', 'details': {'Code': 'AccessDenied', 'Message': 'The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.', 'RequestId': '5D7**14', 'HostId': 'log-**.oss-cn-shanghai.aliyuncs.com', 'Bucket': 'log-**', 'Endpoint': 'oss-cn-hangzhou.aliyuncs.com'}}
  • 排查方法

    檢查報錯的日誌事件,如果報錯資訊是403,並且Message資訊是關於bucket和endpoint的,檢查endpoint是否與AccessKey不屬於同一region。

  • 解決方案

    res_oss_file函數加工編排中的encoding參數改成正確的解碼格式即可。

許可權錯誤

AccessKey出錯

使用res_oss_file函數的時候AccessKey填寫錯誤。

  • 加工規則範例

    e_set("oss_file",res_oss_file(endpoint, ak_id=res_local("AK_ID"),ak_key=res_local("AK_KEY"), 'your bucket', 'test/test.txt', format='text', change_detect_interval=20))
  • 錯誤記錄檔

    message: Exception: {'status': 403, 'x-oss-request-id': '5D***BEB6', 'details': {'Code': 'InvalidAccessKeyId', 'Message': 'The OSS Access Key Id you provided does not exist in our records.', 'RequestId': '5D4***BEB6', 'HostId': 'lo***g.oss-cn-hangzhou.aliyuncs.com', 'OSSAccessKeyId': 'LT***Ai'}}
  • 排查方法

    檢查報錯的日誌事件,如果報錯資訊是403,並且Message資訊是關於AccessKey的,檢查AccessKey是否寫錯。

  • 解決方案

    res_oss_file函數加工編排中的AccessKey資訊修改正確即可。

Bucket許可權錯誤

使用res_oss_file函數的時候bucket出錯。

  • 加工規則範例

    e_set("oss_file",res_oss_file(endpoint='http://oss-cn-hangzhou.aliyuncs.com',ak_id=os.getenv("SLS_ACCESS_KEY_ID"),
                         ak_key=os.getenv("SLS_ACCESS_KEY_SECRET"),
                         bucket='log', file='test.txt',
                         change_detect_interval=30, encoding='utf8'))
  • 錯誤記錄檔

    message: Exception: {'status': 403, 'x-oss-request-id': '5D674CE8BE0EBC45166026C5', 'details': {'Code': 'AccessDenied', 'Message': 'You have no right to access this object because of bucket acl.', 'RequestId': '5D4***BEB6', 'HostId': 'log.oss-cn-hangzhou.aliyuncs.com'}}
  • 排查方法

    檢查報錯的日誌事件,如果報錯資訊是403,並且Message資訊是關於bucket的,檢查bucket是否有許可權操作。

  • 解決方案

    res_oss_file函數加工編排中的bucket資訊修改正確即可。

Bucket不存在

使用res_oss_file函數的時候bucket出錯。樣本中bucket在OSS上是不存在的。

  • 加工規則範例

    e_set("oss_file",res_oss_file(endpoint='http://oss-cn-hangzhou.aliyuncs.com',ak_id=os.getenv("SLS_ACCESS_KEY_ID"),
                         ak_key=os.getenv("SLS_ACCESS_KEY_SECRET"),
                         bucket='twiss', file='test.txt',
                         change_detect_interval=30, encoding='utf8'))
  • 錯誤記錄檔

    message: Exception: {'status': 404, 'x-oss-request-id': '5D75F6E9BB4097C678A381EF', 'details': {'Code': 'NoSuchBucket', 'Message': 'The specified bucket does not exist.', 'RequestId': '5D75F6E9BB4097C678A381EF', 'HostId': 'twiss.oss-cn-hangzhou.aliyuncs.com', 'BucketName': 'twiss'}}
  • 排查方法

    檢查報錯的日誌事件,如果報錯資訊是403,並且Message資訊是關於bucket的,檢查bucket是否存在。

  • 解決方案

    res_oss_file函數加工編排中的bucket資訊修改正確即可。

定時更新檔案出錯日誌說明

此類日誌只會在後台日誌記錄中出現,以下介紹三種定時更新中出錯說明。

  • 如下日誌表示第一次可能因為網路問題擷取資源失敗,準備重試。

    {
      "reason":"Failed to pull data from oss for the first time and it is preparing to re-pull ..."
    }
  • 如下日誌表示後台每隔一段時間進行更新,新資源函數擷取資料失敗,準備重試。

    {
      "reason":"get_oss_byte get errors,begin retry ..."
    }
  • 如下日誌表示重試失敗,準備再次重試,最多重試三次。

    {
      "reason":"get_oss_byte get errors,refresh_interval ..."
    }