変換ルールに Object Storage Service (OSS) からのリソースの読み込みが含まれる場合、リソースの読み込みまたは更新のエラーが発生することがあります。ここでは、一般的な原因とそのトラブルシューティング方法について説明します。
DPI エンジンがソース Logstore からデータを読み取った後、ログイベントを変換します。変換ルールが OSS、ApsaraDB RDS、または他の Logstore から外部リソースを読み込む場合、リソースの読み込みまたは更新のエラーが発生することがあります。
エラーの影響
変換プロセス中に、変換ルールと競合するログイベントがエラーを引き起こします。 これらのエラーは、警告レベルとエラーレベルに分けられます。 エラーレベルはlogging.levelnameフィールドによって識別されます。
エラーレベルのエラーの場合、関連するログイベントは破棄されます。 変換プロセスは継続し、再試行は行われない。 変換結果にはこれらのログイベントは含まれません。
警告レベルのエラーの場合、データは現在のドメイン固有言語 (DSL) に変換されません。 たとえば、ログイベントが指定された正規表現と一致しない場合、次のステップが実行されます。
解決策
エラーログの
logging.levelnameフィールドをチェックして、エラーレベルを確認します。messageフィールドをチェックして、エラーログイベントを見つけます。 詳細については、「エラーログの表示」をご参照ください。エラーログの
理由フィールドをチェックして、エラーの原因を特定します。
エラーの原因に基づいてこれらのエラーログイベントを変換するロジックを追加します。 e_ifやe_switch関数などのプロセス制御関数を使用して、エラーを特定して解決できます。
OSSからのデータ取得時の一般的なエラー
以下の例では、AK_ID はアクセスキー ID、AK_KEY はアクセスキーシークレットです。
不正なファイルパスまたはファイル形式
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'}} -
トラブルシューティング
エラーの原因となったログイベントをチェックします。エラーメッセージの
statusが 404 で、Messageフィールドがファイルに関連している場合は、まずファイルパスが正しいかどうかをチェックしてください。 -
解決策
file関数のオーケストレーションにおけるres_oss_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'))
エンドポイントエラー
res_oss_file 関数を使用する場合、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を示している場合は、エンドポイントが存在するかどうかを確認してください。 -
解決策
res_oss_file関数のオーケストレーションで、endpointパラメーターの値を正しい値に変更します。
OSSエンドポイントがバケット名と一致しない
アクセスキーには杭州リージョンでの操作権限がありますが、エンドポイントは上海リージョンに設定されています。
-
変換ルールの例
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フィールドにバケットとエンドポイントが記載されている場合は、endpointと AccessKey が同じリージョンにあることを確認します。 -
解決策
res_oss_file関数オーケストレーションでは、encodingパラメーターを正しいデコード形式に設定します。
権限エラー
不正なアクセスキー
res_oss_file 関数を使用すると、アクセスキーが不正です。
-
変換ルールの例
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 情報を修正してください。
バケットの権限エラー
res_oss_file 関数を使用すると、バケットエラーが発生します。
-
変換ルールの例
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'}} -
トラブルシューティング
-
解決策
res_oss_file関数のオーケストレーションでバケット情報を修正します。
バケットが存在しない
指定されたバケットが 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フィールドがバケットに関連している場合は、バケットが存在することを確認します。 -
解決策
res_oss_file関数のオーケストレーションのバケット情報を修正します。
ファイルの定期更新に関するエラーログ
以下のエラーログは、ファイルの定期更新中にバックエンドのログレコードにのみ表示されます。
-
次のログは、リソースを取得する最初の試行が、おそらくネットワークの問題で失敗し、リトライを準備していることを示します。
{ "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 ..." } -
次のログは、リトライが失敗し、再度リトライを準備していることを示します。最大 3 回のリトライが実行されます。
{ "reason":"get_oss_byte get errors,refresh_interval ..." }