Simple Log Service (SLS) DSL は Python をベースとしており、データ変換タスクを簡素化するために 200 以上の組み込み関数を提供しています。このトピックでは、DSL の言語モード、関数カテゴリ、実行原則について説明します。
言語モード
SLS DSL は Python と互換性があります。標準モードでは、SLS DSL は Python のサブセットです。基本的なデータ構造と式を除き、その他すべての構文規則は関数を使用して実装されます。
カテゴリ | Python の構文 | 標準モード |
データ構造 | 数値、文字列、ブール値 | サポートされています。
|
タプル、リスト、セット、辞書 | サポートされています。
| |
オブジェクト | テーブルや datetime オブジェクトなどの組み込み拡張データ構造のみがサポートされています。 | |
基本構文 | プラス記号 (+)、減算記号 (-)、乗算記号 (×)、除算演算子 (/) などの演算子 |
|
コメント | サポートされています。 | |
変数割り当て | サポートされていません。関数呼び出しを通じて渡す必要があります。 | |
条件分岐 | サポートされています。関数: e_if、e_if_else、および e_switch。 | |
ループ | 間接的にサポートされています。ループを実装するには、ネストされた組み込み関数を使用する必要があります。配列内の要素を走査する方法を示す関数の例は次のとおりです。 | |
関数 | Python の標準組み込み関数 | サポートされていません。代わりに、SLS DSL が提供する 200 以上の組み込み関数を使用できます。 |
関数呼び出し | サポートされています。パラメーターのアンパックを使用する関数呼び出しはサポートされていません。 | |
def や lambda などのユーザー定義関数 | サポートされていません。ただし、任意の組み合わせで呼び出すことができる 200 以上のグローバル処理関数と式関数が提供されています。 | |
モジュール | Python 標準ライブラリのインポートと使用 | サポートされていません。 |
スレッドとプロセスの作成 | サポートされていません。 | |
サードパーティライブラリのインポート | サポートされていません。 | |
外部ネットワーク接続または外部コマンド呼び出し | 組み込みのリソースコネクタが利用可能です。 |
関数カテゴリ
標準モードでは、SLS DSL は関数を呼び出すことによってすべての操作を実行します。DSL は 200 以上の組み込み関数を提供しており、これらはグローバル処理関数と式関数に分類されます。
グローバル処理関数
グローバル処理関数は、ログを受信、処理、返すために使用されます。変換ルールの各ステップを構成できるのは、グローバル処理関数のみです。
式関数
式関数は特定のパラメーターを受け取ります。これらを組み合わせて呼び出し、グローバル処理関数のパラメーターとして渡すことで、より柔軟なロジックを定義できます。
次の表は、2 つの関数タイプの機能を比較したものです。
関数タイプ | 全体的なステップ | 受信 | 返却 | ログの変更 | 組み合わせ呼び出し |
グローバル処理関数 | サポート | ログは自動的に受信されます | 0 個または複数のログ | ほとんどの場合サポートされます | サポート |
式関数 | サポートされていません | 一部の関数のみがログの直接処理をサポートします。 | 特定のデータ構造 | サポートされていません | サポート |
グローバル処理関数
ログを受け取り、返す関数です。
各ステップの最初の行に配置できるのは、グローバル処理関数のみです。
SLS DSL の変換ルールは、次の構文を使用します:
GlobalFunction1(..parameters....)
GlobalFunction2(..parameters....)
GlobalFunction3(..parameters....)
GlobalFunction4(..parameters....)グローバル処理関数は 2 つのカテゴリに分類されます:
機能分類 | 説明 | 例 |
フロー制御関数 | これらの関数はプロセスフローを管理し、ログを受信し、条件に応じて他の関数を呼び出してログを処理します。 |
|
イベント処理関数 | これらの関数はログを変換し、0個または複数のログを返します。 | 関数の例は次のとおりです:
|
変換ロジック:
基本的な処理
データ変換機能は、送信元 Logstore からストリーミング方式でデータを読み取ります。各ログを辞書として変換ルールに渡します。次に、システムはルールで定義された関数に従って、ログデータを順次処理します。最後に、システムは変換結果を送信先 Logstore に出力します。
説明ログのすべてのフィールドと値は文字列として送信されます。たとえば、生ログ
{"__time__": "1234567", "__topic__": "", "k1": "test"}は、e_set("f1", 200)関数によって処理されます。この関数は、f1というフィールドに値 200 を追加します。処理後、ログは{"__time__": "1234567", "__topic__": "", "k1": "test", "f1": "200"}になります。このログでは、f1フィールドと値 200 の両方が文字列です。変換ルールで指定されたイベント処理関数は、順番に呼び出されます。各関数はログを受信し、処理してから、処理されたログを返します。
たとえば、
e_set("type", "test")関数は、ログに、値が test となるtypeフィールドを追加します。次の関数は、変更されたログを受信して処理します。条件評価
e_if: e_if 関数を使用すると、ログを処理するための条件式を追加できます。 ログが指定された条件を満たさない場合、対応する操作はスキップされます。 e_if 関数は、
ifロジックを実装します。たとえば、
e_if(e_match("status", "200"), e_regex("data", "ret: \d+", "result"))関数は、statusフィールドの値が 200 であるかどうかをチェックします。条件が真の場合、関数は指定された正規表現を使用してdataフィールドからresultフィールドを抽出します。それ以外の場合、操作は実行されません。e_if_else:この関数はif_else操作と同様に動作します。
処理の終了
変換ルールのステップでログが返されない場合があります。これは、ログが削除されたことを示します。
たとえば、
e_if(str_islower(v("result")), e_drop())関数は、resultフィールドの値が小文字の文字列であるかどうかをチェックします。条件が真の場合、ログは破棄され、このログに対して後続のステップは実行されません。システムは自動的に次のログを処理します。送信先 Logstore へのログの書き込みにより、処理が終了します。たとえば、
e_output関数がログを送信先 Logstore に書き込んで削除すると、このログに対して後続のステップは実行されません。説明e_coutput関数は出力ログをコピーし、後続のステップを引き続き処理します。
並列分割:
変換ルールのステップで複数のログが返される場合があります。これは、ログが分割されたことを示します。
たとえば、
e_split(data)関数は、dataフィールドの値に基づいてログを 2 つのログに分割します。dataフィールドの値が"abc, xyz"の場合、ログは 2 つのログに分割されます。一方のログでは、dataフィールドの値は abc です。もう一方のログでは、値は xyz です。分割後に生成されたログは、後続のステップで処理されます。
詳細については、「グローバル処理関数」をご参照ください。
式関数
グローバル処理関数に加えて、SLS DSL は特定のパラメーターを受け取り、特定の値を返す 200 以上の式関数を提供しています。グローバル処理関数内で式関数または式関数の組み合わせを呼び出します。構文は次のとおりです:
Global Processing Function 1(Expression Function 1(...), ...)
Global Processing Function 2(..., Expression Function 2(...), Expression Function 3(...), ...)式関数は 4 つのカテゴリに分類されます:
機能分類 | 説明 | 例 |
イベントチェック関数 | これらの関数はログを受信し、特定の情報を抽出または取得し、ログを変更せずにその情報を返します。 |
|
リソース関数 | これらの関数はオンプレミスリソースまたは外部リソースに接続し、特定のパラメーター設定を使用して、辞書やテーブルなどのデータを返します。 | OSS、RDS、および Logstore リソース関数。 |
制御関数 | これらの関数は式に対して論理演算を実行します。特定のパラメーターを使用し、条件制御を適用し、他の式関数を呼び出して結果を返します。 |
|
その他の式関数 | これらの関数は固定値または他の関数呼び出しの結果を受け取り、特定の値を返します。 | 文字列、日付と時刻、および型変換の関数。 |
詳細については、「式関数」をご参照ください。