Simple Log Service用のPythonベースのドメイン固有言語 (DSL) は、データを効率的に変換するために使用できる200を超える組み込み関数を提供します。 このトピックでは、DSL for Simple Log Serviceの言語モード、機能カテゴリ、および実装について説明します。
言語モード
DSL for Simple Log ServiceはPythonと互換性があります。 標準モードでは、DSLはPythonのサブセットと見なすことができます。 基本的なデータ構造と式を除いて、他の構文ルールは関数を使用して編成されます。 ユーザー定義関数 (UDF) を使用する場合は、 ticket
カテゴリ | Python構文 | 標準モード |
データ構造 | Number、string、およびBoolean | サポートされています。
|
タプル、リスト、セット、および辞書 | サポートされています。
| |
オブジェクト | テーブルやdatetimeオブジェクトなどの組み込みの拡張データ構造のみがサポートされています。 | |
基本構文 | プラス記号 (+) 、減算記号 (-) 、乗算記号 (×) 、除算演算子 (/) などの演算子 | などの比較演算子のみ |
Comments | サポートされています。 | |
変数の割り当て | サポートされていません。 値を変数に渡すには、関数を呼び出す必要があります。 | |
条件評価 | サポートされています。 関数: e_if、e_if_else、およびe_switch。 | |
ループ | 間接的にサポートされます。 ループを実装するには、ネストされた組み込み関数を使用する必要があります。 次のサンプル関数は、配列内の要素をトラバースする方法を示しています。
| |
機能 | Pythonの標準組み込み関数 | サポートされていません。 DSL for Simple Log Serviceが提供する200以上の組み込み機能を使用できます。 |
関数の呼び出し | サポートされています。 パラメーターの解凍を使用する関数呼び出しはサポートされていません。 | |
defやlambdaなどのUDF | サポートされていません。 DSL for Simple Log Serviceが提供する200以上のグローバル処理および式関数を使用できます。 ビジネス要件に基づいてこれらの機能を組み合わせることもできます。 | |
モジュール | Python標準ライブラリのインポートと使用 | サポートされていません。 |
スレッドとプロセスの作成 | サポートされていません。 | |
サードパーティのライブラリのインポート | サポートされていません。 | |
外部ネットワーク接続または外部コマンド呼び出し | サポートされています。 DSL for Simple Log Serviceは、組み込みのリソースコネクタを提供します。 |
関数カテゴリ
DSL for Simple Log Serviceの標準モードでは、すべての操作は関数を呼び出すことによって実行されます。 DSLは、グローバル処理関数と表現関数に分類される200を超える組み込み関数を提供します。
グローバル処理機能
グローバル処理関数は、ログを受信、処理、および返すために使用されます。 グローバル処理関数のみを使用して、変換ルールの各ステップを構築できます。
Expression functions
式関数は通常、特定のパラメータを受け取り、特定の値を返すために使用されます。 表現関数を組み合わせて、より柔軟なロジックを定義するパラメータとしてグローバル処理関数に渡すことができます。
次の表に、グローバル処理関数と式関数を示します。
カテゴリ | ステップを作成 | ログの受信 | リターン結果 | ログの変更 | 関数の組み合わせ |
グローバル処理機能 | サポートされています。 | ログは自動的に受信されます。 | ゼロから複数のログが返されます。 | サポートされています。 ほとんどの場合、ログは変更できます。 | サポートされています。 |
Expression functions | サポートされていません。 | 少数の式関数のみでサポートされます。 ほとんどの式関数はログを直接処理しません。 | 特定のデータ構造が返されます。 | サポートされていません。 | サポートされています。 |
グローバル処理機能
グローバル処理関数は、ログを受信、処理、および返すために使用されます。
各ステップの最初の行には、グローバル処理関数のみを配置できます。
次の構文が使用されます。
Global Processing Function 1(..Parameters....)
Global Processing Function 2(..Parameters....)
Global Processing Function 3(..Parameters....)
Global Processing Function 4(..Parameters....)
グローバル処理機能は、フロー制御機能とイベント処理機能とにさらに分類することができる。 次の表に、関数を示します。
カテゴリ | 説明 | 例 |
フロー制御関数 | 関数は、プロセスの管理、ログの受信、および特定の条件に基づいてログを処理するための他の関数の呼び出しに使用されます。 |
|
イベント処理関数 | 関数はログを変換するために使用されます。 ゼロから複数のログが返されます。 | 例:
|
変換ロジック:
基本的な処理
データ変換機能は、ソースLogstoreからストリーミングデータを読み取り、辞書構造の各ログを特定の関数に送信します。 次に、この機能は、変換ルールで指定された関数を順番に実行してイベントを処理し、変換結果を指定された宛先ログストアに書き込みます。
説明ログのすべてのフィールドと値は文字列として送信されます。 たとえば、生ログ
{"__time__": "1234567" 、"__topic__": "" 、"k1": "test"}
は、e_set("f1", 200)
関数によって処理されます。 この関数は、値が200に設定されているf1
フィールドを生ログに追加します。 次に、生ログは{"__time__": "1234567" 、"__topic__": "" 、"k1": "test" 、"f1": "200"}
に変換されます。 このログでは、f1
フィールドと値200は文字列です。変換ルールで指定されたイベント処理関数が順番に呼び出されます。 各関数はログを受信して処理し、処理されたログを返します。
たとえば、
e_set("type", "test")
関数は、値がtestに設定されているtype
フィールドをログに追加します。 next関数は、処理されたログを受け取り、処理します。条件評価
e_if: e_if関数を呼び出して、条件式をプロセスログに追加できます。 ログが指定された条件を満たさない場合、対応する操作はスキップされます。 e_if関数は
if
ロジックを実装します。たとえば、
e_if(e_match("status", "200"), e_regex("data", "ret: \d +", "result"))
関数は、status
フィールドの値が200かどうかをチェックします。 値が200の場合、関数は指定された正規表現を使用してdata
フィールドからresult
フィールドを抽出します。 そうでなければ、操作は行われない。e_if_else
: この関数は、if_else
関数と同様に機能します。
処理終了
変換ルールのステップはログを返さない場合があります。 これは、関連ログが削除されたことを示します。
たとえば、
e_if(str_islower(v("result")), e_drop())
関数を使用して、ログのresult
フィールドの値が小文字のみで構成される文字列であるかどうかを確認します。 条件がtrueに評価された場合、ログは破棄され、以降の手順はこのログに対して実行されません。 システムは自動的に次のログを処理します。宛先ログストアにログが書き込まれた場合、処理は終了する。 たとえば、
e_output
関数を使用してログを宛先Logstoreに書き込み、ログを削除する場合、このログに対して以降の手順は実行されません。説明e_coutput
関数は出力ログをコピーし、以降の手順はこのログに対して実行されます。
並列処理のためのログ分割
変換ルールのステップは、複数のログを返す場合があります。 これは、関連するログが分割されていることを示します。
たとえば、
e_split(data)
関数は、data
フィールドの値に基づいてログを2つのログに分割します。 ログのdata
フィールドの値が"abc, xyz"
の場合、ログは2つのログに分割されます。 1つのログでは、data
フィールドの値はabcです。 もう一方のログでは、データフィールドの値はxyzです。分割後に生成されたログは、後続の手順で処理されます。
Expression functions
グローバル処理関数に加えて、DSL for Simple Log Serviceは、特定のパラメーターを受け取り、特定の値を返すために使用される200式関数を提供します。 グローバル処理関数で式関数または式関数の組み合わせを呼び出すことができます。 次の構文が使用されます。
Global Processing Function 1(Expression Function 1(...), ...)
Global Processing Function 2(..., Expression Function 2(...), Expression Function 3(...), ...)
式関数は、イベントチェック関数、リソース関数、制御関数、およびその他の式関数に分類できます。 次の表に、関数を示します。
カテゴリ | 説明 | 例 |
イベントチェック関数 | 関数は、ログを受信し、特定の情報を抽出し、ログを変更せずに情報を返すために使用されます。 |
|
リソース関数 | 関数は、オンプレミスまたは外部リソースへのアクセス、特定のパラメータの受信、および特定の値の返却に使用されます。 戻り値のデータ型には、ディクショナリとテーブルがあります。 | res_oss_file、res_rds_mysql、およびres_log_logstore_pull |
制御機能 | 関数は、特定のパラメータを受け取り、式または条件ベースの制御に対して論理演算を実行するために使用されます。 関数は、他の式関数を呼び出して結果を返すためにも使用されます。 |
|
その他の式関数 | 関数は、特定のパラメータまたは他の関数の結果を受け取り、特定の値を返すために使用されます。 | 文字列関数、日付と時刻の関数、および変換関数。 |