すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:データ変換ルールのエラー

最終更新日:Jun 22, 2026

このトピックでは、データ変換ルールのエラーの原因と解決策について説明します。

ソース Logstore からデータが読み取られた後、データ変換エンジンがログイベントを変換します。加工规则错误

  • この段階で発生するエラーは、通常、ログイベントがデータ変換ルールと一致しない場合に生じるロジックエラーです。

  • 変換ルールに ApsaraDB RDS や他の Logstore などの外部リソースが含まれる場合、リソースの読み込みエラーや更新エラーが発生することもあります。

このトピックでは、ロジックエラーのトラブルシューティングを中心に説明します。リソースの読み込みエラーのトラブルシューティングについては、「リソースの読み込みエラー」をご参照ください。

エラーの影響

エラーログの logging.levelname フィールドは、エラーレベル (WARNING または ERROR) を示します。

  • ERROR レベルのエラーの場合、影響を受けるログイベントは破棄されます。変換の出力にこのイベントは含まれず、処理はリトライなしで次のログイベントに進みます。

  • 正規表現の不一致などの WARNING レベルのエラーの場合、該当イベントの現在の DSL ステップはスキップされ、処理は次のステップに進みます。

トラブルシューティング

  • エラーログの logging.levelname フィールドを確認し、エラーレベルを判断します。

  • エラーログの message フィールドを確認し、どのログイベントがエラーを引き起こしたかを特定します。詳細については、「エラーログの表示」をご参照ください。

  • エラーログの reason フィールドを確認し、そのログイベントのエラーの原因を判断します。

原因に基づいて、変換スクリプトにロジックを追加してこれらの例外を処理してください。e_ife_switch などのプロセス制御関数を使用して、これらのエラーをキャッチして管理できます。以下はエラーログの例です。message フィールドには失敗したログイベントの詳細が含まれ、reason フィールドにはエラーの原因 integer division or modulo by zero が表示されます。

07-26 16:21:48
    __source__:
    __tag__:__job_name__: etl-preview-1564110081-604324
    __tag__:__schedule_type__: DryRun
    __topic__: __etl-log-status__
    etl_context: {
      "project": "ali-licheng-test-uk2",
      "logstore": "source_logstore",
      "shard_id": "2"}
    event_id: transorm_data:process:fail
    extra_info_params: {"src_event": {"__time__": "1563266137", "__topic__": "", "__source__": xxx, "__tag__:__client_ip__": xxx,
    "__tag__:__receive_time__": "1563774221", "body_bytes_sent": "740", "client_ip": "1.2.3.4", "host": "m.abcd.com", "status": "403"}}
    logging: {"process": "34", "levelname": "ERROR", "funcName": "_transform_events_to_logstore", "module": "logclient_operator", "threadName": "MainThread",
    "thread": "139890150307648", "processName": "ForkProcess-1"}
    message: [ali-licheng-test-uk2/source_logstore/2]transform_data: fail to process event: {"__time__": "1563266137", "__topic__": "", "__source__": xxx,
    "__tag__:__client_ip__": xxx, "__tag__:__receive_time__": "1563774221", "body_bytes_sent": "740", "client_ip": "1.2.3.4", "host": "m.abcd.com", "status": "403"},
    detail=integer division or modulo by zero
    reason: integer division or modulo by zero

一般的なエラーシナリオ

ログイベントの異常値

ゼロ除算

# 一部のログイベントでフィールド 'b' の値が 0 のため、ゼロ除算エラーが発生します。
e_set("c", op_div_floor(v("a"), v("b")))
  • エラーログ:

    {
      "reason": "error when calling : floordiv\nDetail: integer division or modulo by zero", 
    }
  • トラブルシューティング:

    失敗したログイベントを確認し、フィールド b の値が 0 であるかどうかを確認してください。その場合、原因はゼロ除算です。

  • 解決策:

    このエラーは、ログイベントのフィールド b の値が 0 の場合にのみ発生します。これを修正するには、フィールド b の値が 0 の場合を処理する e_if ロジックを追加します。

    e_if_else(op_eq(v("b"), "0"), e_set("c", v("a")), e_set("c", op_div_floor(v("a"), v("b")))

無効なタイムスタンプフォーマット

# 一部のログイベントでフィールド 'a' の値が有効なタイムスタンプフォーマットではないため、エラーが発生します。
e_set("b", dt_fromtimestamp(v("a")))
  • エラーログ:

    {
      "reason": "error when calling : int\nDetail: invalid literal for int() with base 10: 'invalid_value'", 
    }
  • トラブルシューティング:

    失敗したログイベントを確認し、フィールド a の値が、有効なタイムスタンプで要求される形式である数値文字列であることを確認してください。

  • 解決策:

    条件付きロジックを追加してください。フィールド a の値が有効なタイムスタンプフォーマットでない場合、ログイベントを target2 にルーティングします。

    e_if_else(str_isdigit(v("a"))), e_set("b", dt_fromtimestamp(v("a"))), e_output("target2"))

データ型変換の欠落

変換ルールの例:

e_set("a", 10)
e_set("b", 10)
e_set("c", op_mul(v("a"), v("b")))
  • エラーログ:

    {
      "reason": "error when calling : mul\nDetail: can't mulltiply sequence by non-int of type' str'", 
    }
  • 原因:

    DSL 処理中、ログイベント内のすべてのフィールドの値は文字列として保存されます。前述のルールの例では、v("a")v("b") は両方とも文字列です。これらを直接 op_mul に渡すとエラーが発生します。

  • トラブルシューティング:

    数値計算の前に、DSL ルールでデータ型変換が欠落していないかチェックしてください。

  • 解決策:

    c_int 関数を使用して文字列を整数に変換し、その結果を op_mul 関数に渡してください。

    e_set("a", 10)
    e_set("b", 10)
    e_set("c", op_mul(c_int(v("a")), c_int(v("b"))))