このトピックでは、データ変換エンジンの起動エラーの原因とトラブルシューティング方法について説明します。

データ変換タスクの最初のステップは、データ変換エンジンの起動です。 データ変換エンジンによる内部セキュリティ監査でログ変換のドメイン固有言語 (DSL) ルールが失敗すると、このステップでエラーが発生する可能性があります。 データ変換エンジンの起動エラー

エラーの影響

変換エンジンの起動プロセス中に不正な LOG DSL ルールが検出されると、次のエラーメッセージが返されます。
{
  "errorMessage": "ETL config doesn't pass security check, detail: XXXXXX"
}
エラーログは、データ変換診断レポートの例外の詳細、または internal-etl-log Logstore にあります。
  • 変換エンジンの起動フェーズ中にエラーが発生した場合、データ変換タスクは、エンジンの起動が成功するか手動で停止されるまで再試行を続けます。
  • 変換ルールの変更後に再試行が成功した場合、データ変換タスクは、ログの損失や重複したログの生成をすることなく、正常に機能します。

一般的なエラーとトラブルシューティング方法

  • 基本構文が無効な場合。

    コンパイルされた変換ルールが LOG DSL 構文に準拠していません。 たとえば、ルールに対になっていない括弧 (( )) が含まれていたり、カンマ (,) が誤ってコロン (:) として記述されている場合などがあります。

    • エラーログ :
      {
        "errorMessage": "ETL config doesn't pass security check, detail: invalid syntax"
      }
      {
        "errorMessage": "ETL config doesn't pass security check, detail: unexpected EOF while parsing"
      }
      ...
    • トラブルシューティング方法 :
      エラーログの traceback 情報を元に特定の構文エラーを見つけます。 次の図に示すように、 e_set("test", v("status")) が誤って e_set("test": v("status")) と記述されています。 不正なログ構文
  • 許可されていない演算子が使用されている場合。
    LOG DSL のすべての演算は、LOG DSL の関数を使用して完了する必要があります。 数値演算やサイズ比較などの演算は、 op_* 関数を使用して完了させなければなりません。 + - * / > < 演算子はこれらの演算には使用できません。
    • エラーログ :
      {
        "errorMessage": "ETL config doesn't pass security check, detail: invalid type detected: <class `_ast.BinOp`> "
      }
    • トラブルシューティング方法 :

      LOG DSL ルールを確認し、数値演算やサイズ比較などのすべての演算が、無効な演算子ではなく LOG DSL の関数を使用して完了されていることを確認してください。

    • 例 :
      e_set("b", v("a") - 10) # Error
      e_set("b", op_sub(v("a"), 10)) # Correct
      
      e_set("b", v("a") >= v("c")) # Error
      e_set("b", op_ge(v("a"), v("c"))) # Correct
  • 関数でパラメーターの型を渡すときにエラーが発生したか、または呼び出された関数が存在しない場合。
    関数に渡されたパラメーターの型が、関数が受け取ったパラメーターの型と異なる場合、または呼び出された関数が存在しない場合、エラーが発生します。
    • エラーログ :
      {
        "errorMessage": "ETL config doesn't pass security check, detail: invalid call in detected: function_name"
      }
    • トラブルシューティング方法 :
      • 呼び出された関数が存在し、関数名が正しいかどうかを確認します。 関数が存在し、名前が正しい場合は、関数に渡されたパラメーターの型が正しいかどうかを確認してください。
      • エラーログの traceback 情報を元にエラー関数を見つけます。 次の図に示すように、dt_totimestamp 関数にエラーがあります。 関数は LOG DSL に存在するため、正しいパラメーター型が dt_totimestamp 関数に渡されているか確認する必要があります。関数エラー
    • 例 :
      # Error example
      e_set("time1", "2019-06-03 2:41:26")
      e_set("time2", dt_totimestamp(v("time1")))
      
      # Correct example
      e_set("time1", "2019-06-03 2:41:26")
      e_set("time2", dt_totimestamp(dt_parse(v("time1"))))
      
      # Correct example
      e_set("time1", "2019-06-03 2:41:26")
      e_set("time2", dt_parsetimestamp(v("time1")))
      • dt_totimestamp 関数が受け取るパラメーター型は datetime オブジェクトですが、コード内の v("time1") は文字列です。 不正なパラメーター型が関数に渡されると、エラーが発生します。
      • エラーを修正するには、パラメーター型を dt_totimestamp 関数に渡す前に dt_parse 関数を使用して文字列を datetime オブジェクトに変換します。 dt_parsetimestamp 関数を使用して、受け取った文字列を dt_totimestamp 関数に置き換えることもできます。
  • 式関数がグローバルに呼び出される場合。
    LOG DSL 構文は、グローバル演算関数と式関数の 2 種類の関数をサポートしています。 データ変換プロセスでは、グローバル演算関数のみをグローバルに呼び出すことができます。 式関数がグローバルに呼び出されると、エラーが発生します。
    • エラーログ :
      {
        "errorMessage": "ETL config doesn't pass security check, detail:  invalid type detected: <class '_ast.Expr'>"
      }
    • トラブルシューティング方法 :

      データ変換プロセスで式関数がグローバルに呼び出されているかどうかを確認します。

    • 例 :
      # Error example
      op_add(v("a"), v("b"))
      str_lower(v("name"))
      
      # Correct example
      e_set("add", op_add(v("a"), v("b")))
      e_set("lower", str_lower(v("name")))
  • パラメーターに変数値が割り当てられている場合。
    LOG DSL 構文は、変数を使用した値の割り当てをサポートしていません。 変数値は、ステートレスモードでのみ渡すことができます。
    • エラーログ :
      {
        "errorMessage": "ETL config doesn't pass security check, detail: invalid assign detected: variable_name"
      }
    • トラブルシューティング方法 :
      • LOG DSL ルールが変数を値として使用しているかどうかを確認します。
      • エラーログの traceback 情報を元にエラーを特定します。
    • 例 :
      # Error example
      sum_value = op_add(v("a"), v("b"))
      e_set("sum", sum_value)
      
      # Correct example
      e_set("sum", op_add(v("a"), v("b")))