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 などのユーザー定義関数 | サポートされていません。SLS DSL は 200 以上のグローバル処理関数と式関数を提供します。必要に応じてこれらの関数を組み合わせることができます。 | |
モジュール | Python 標準ライブラリのインポートと使用 | サポートされていません。 |
スレッドとプロセスの作成 | サポートされていません。 | |
サードパーティライブラリのインポート | サポートされていません。 | |
外部リンク接続または外部コマンド呼び出し | サポートされています。SLS DSL は組み込みのリソースコネクタを提供します。 |
関数のカテゴリ
標準モードでは、SLS DSL はすべての操作を関数の呼び出しによって実行します。DSL は 200 以上のビルトイン関数を提供しており、これらはグローバル処理関数と式関数に分類されます。
グローバル処理関数
グローバル処理関数は、ログの受信、処理、および返却に使用されます。変換ルールの各ステップを構成するには、グローバル処理関数のみを使用できます。
式関数
式関数は、通常、特定のパラメーターを受け取り、特定の値を返すために使用されます。式関数を組み合わせてグローバル処理関数にパラメーターとして渡すことで、より柔軟なロジックを定義できます。
次の表は、2 つの関数タイプの機能を比較したものです。
関数タイプ | 全体的なステップ | 受信 | 返却 | ログの変更 | 関数の組み合わせ |
グローバル処理関数 | サポート | ログは自動的に受信されます | 0 個以上のログ | ほとんどの場合でサポート | サポート |
式関数 | 非サポート | 一部の式関数でのみサポートされています。ほとんどの式関数はログを直接処理しません。 | 特定のデータ構造 | 非サポート | サポート |
グローバル処理関数
ログを受け入れて返却する関数です。
各ステップの最初の行には、グローバル処理関数のみを配置できます。
SLS DSL の変換ルールは、次の構文を使用します:
Global Processing Function 1(..Parameters....)
Global Processing Function 2(..Parameters....)
Global Processing Function 3(..Parameters....)
Global Processing Function 4(..Parameters....)グローバル処理関数は、次の 2 つのカテゴリに分類されます:
カテゴリ | 説明 | 例 |
フロー制御関数 | これらの関数は、プロセスのフローを管理し、ログを受信し、条件に応じて他の関数を呼び出してログを処理します。 |
|
イベント処理関数 | これらの関数はログを変換し、0 個以上のログを返します。 | 例:
|
変換ロジック:
基本処理
データ変換機能は、ソース Logstore からストリーミングデータを読み取り、各ログを辞書として変換ルールに送信します。その後、システムはルールで指定された関数を順次実行してログを処理し、結果を宛先 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フィールドをログに追加します。次の関数は、変更されたログを受信して処理します。条件評価
e_if:e_if 関数を使用すると、条件式を追加してログを処理できます。ログが指定された条件を満たさない場合、対応する操作はスキップされます。e_if 関数は
ifロジックを実装します。たとえば、
e_if(e_match("status", "200"), e_regex("data", "ret: \d+", "result"))関数は、statusフィールドの値が 200 であるかどうかをチェックします。true の場合、関数は指定された正規表現を使用してdataフィールドからresultフィールドを抽出します。それ以外の場合、操作は実行されません。e_if_else:この関数はif_else操作と同様に機能します。
処理の終了
変換ルールのステップがログを返さない場合があり、これはログが削除されたことを示します。
たとえば、
e_if(str_islower(v("result")), e_drop())関数は、resultフィールドの値が小文字の文字列であるかどうかをチェックします。true の場合、ログは破棄され、このログに対する後続のステップは実行されません。システムは自動的に次のログを処理します。ログを宛先 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 のリソース関数。 |
制御関数 | これらの関数は、式に対して論理演算を実行します。特定のパラメーターを使用し、条件付き制御を適用し、他の式関数を呼び出して結果を返します。 |
|
その他の式関数 | これらの関数は、固定値または他の関数呼び出しの結果を受け入れ、特定の値を返します。 | 文字列、日時、および型変換関数。 |
詳細については、「式関数」をご参照ください。