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

Simple Log Service:カスタム関数の作成

最終更新日:Sep 10, 2024

Function Computeを使用してログデータを消費する場合、log Serviceが提供する関数テンプレートまたはカスタム関数を使用してデータを消費できます。 このトピックでは、カスタム関数を作成する方法について説明します。

Event

関数のイベントは、JSONオブジェクトからシリアル化された文字列です。 イベントには、関数の実行に使用されるパラメータが含まれます。 詳細については、「Function Computeを使用したログデータの消費」をご参照ください。

  • パラメーター

    パラメーター

    説明

    jobName

    Log Serviceの抽出、変換、読み込み (ETL) ジョブの名前。 Log ServiceのETLジョブは、Function Computeのトリガーとして使用されます。

    taskId

    ETLジョブの関数呼び出しの識別子。

    cursorTime

    関数呼び出しでlog Serviceが最後に受信したログエントリのUNIXタイムスタンプ。

    ソース

    関数呼び出しで使用できるデータの範囲。 このパラメーターの値は、関数呼び出しごとにLog Serviceによって定期的に生成されます。

    • endpoint: プロジェクトが存在するリージョンのエンドポイント。 詳細については、「エンドポイント」をご参照ください。

    • projectName: プロジェクトの名前。

    • logstoreName: Logstoreの名前。

    • shardId: Logstore内のシャードのID。

    • begin Cursor: 指定されたシャード内のデータの消費を開始する位置。

    • endCursor: 指定されたシャード内のデータの消費をFunction Computeが停止する位置。

      説明

      消費間隔は、[begin Cursor,endCursor) の形式で、左閉じ、右開きです。

    パラメーター

    トリガーを作成するために指定する [関数の設定] パラメーターの値。 値はJSONオブジェクトです。 カスタムETL関数が呼び出されると、このフィールドが解析されます。 詳細については、「Simple Log Serviceトリガー」をご参照ください。

  • 例:

    {
        "source": {
            "endpoint": "http://cn-shanghai-intranet.log.aliyuncs.com", 
            "projectName": "fc-****************", 
            "logstoreName": "demo", 
            "shardId": 0, 
            "beginCursor": "MTUwNTM5MDI3NTY1ODcwNzU2Ng==", 
            "endCursor": "MTUwNTM5MDI3NTY1ODcwNzU2OA=="
        }, 
        "parameter": {
            ...
        }, 
        "jobName": "fedad35f51a2a97b466da57fd71f315f539d2234", 
        "taskId": "9bc06c96-e364-4f41-85eb-b6e579214ae4",
        "cursorTime": 1511429883
    }

    カスタム関数をデバッグする場合は、GetCursor操作を呼び出してカーソルを取得できます。 次に、前述の形式でイベントを作成して、関数をデバッグできます。

関数の開発

Log Serviceは、Java、Python、Node.jsなどのさまざまなプログラミング言語でランタイム環境SDKを提供します。 SDKを使用して、カスタム関数を開発できます。 詳細については、「SDK リファレンス」をご参照ください。

次の例では、Java Runtime Environment 8 (JRE 8) を使用して、Log ServiceのETL関数を開発する方法を説明します。 JRE 8で関数を開発する方法の詳細については、 Function ComputeのJavaプログラミングガイド

  • Java関数テンプレート

    Log Serviceは、JRE 8に基づくカスタム関数テンプレートを提供します。 テンプレートを使用して関数を開発できます。 詳細については、「カスタム関数テンプレート」をご参照ください。

    関数テンプレートには、次の機能があります。

    • イベントのsource、taskId、およびjobNameフィールドを解析します。

    • Log Service SDK for Javaを使用してイベントのソースパラメーターに基づいてデータを取得し、processDataメソッドを呼び出してデータを処理します。 詳細については、「Log Service SDK For Java」をご参照ください。

    テンプレートを使用して、次の操作を実行することもできます。

    • UserDefinedFunctionParameter.javaファイルを使用して、イベントのパラメーターフィールドを解析します。

    • UserDefinedFunction.javaファイルのprocessDataメソッドを使用して、ビジネスロジックを定義します。

    • UserDefinedFunctionを、ETL関数の識別に役立つ名前に置き換えます。

  • processDataメソッド

    processDataメソッドを使用して、データを消費、変換、および送信できます。 たとえば、LogstoreReplication.javaファイルでは、このメソッドを使用して、Logstoreからデータを読み取り、そのデータを別のLogstoreに書き込みます。

    説明
    • processDataメソッドを使用してデータを処理した場合は、trueが返されます。 processDataメソッドを使用してデータの処理に失敗した場合、falseが返されます。 falseが返された場合、ETL関数は引き続き実行され、Log ServiceはETLタスクが成功したと判断します。 例外データは無視されます。

    • throw exceptionメソッドを使用して重大なエラーまたはロジック例外が返された場合、ETL関数は実行を停止します。 この場合、Log ServiceはETL関数で例外が発生したと見なし、対応するETLジョブで設定されたルールに基づいて関数を呼び出します。

    • シャードへのデータの書き込みまたは読み取りを高速に行う場合は、関数を実行するのに十分なメモリリソースを割り当てます。 このようにして、関数の実行中にメモリ不足 (OOM) エラーが発生することはありません。

    • 関数の実行に時間がかかる場合や、シャードへのデータの書き込みや読み取りが高速な場合は、関数の呼び出し間隔を短くし、タイムアウト時間を長くします。

    • Function Computeに必要な権限を付与します。 たとえば、Function ComputeがObject Storage Service (OSS) にデータを書き込む必要がある場合、Function ComputeにOSSの書き込み権限を付与する必要があります。

ETL ログ

  • ETL スケジューリングログ

    ETL スケジューリングログには、ETL タスクの開始時刻と終了時刻、タスクが成功したかどうか、およびタスクが成功したときに返される情報が記録されます。 エラーが発生すると、ETLエラーログエントリが生成され、システム管理者に通知するために電子メールまたはテキストメッセージが送信されます。 トリガーを作成するときは、トリガーログを保存するLogstoreを指定し、インデックス作成機能を有効にして、Logstoreのインデックスを設定します。 詳細については、「インデックスの作成」をご参照ください。

    関数を使用して、ETL関数の実行結果を取得できます。 たとえば、outputStream関数を使用して、JRE 8に基づくETL関数の実行結果を取得できます。 Log Serviceの関数テンプレートに基づいて開発されたETL関数の実行結果は、JSONオブジェクトからシリアル化された文字列です。 この文字列はETLスケジューリングログに記録されます。 文字列を検索して分析できます。

  • ETL処理ログ

    ETL処理ログには、各実行ステップの重要な情報とエラーが記録されます。 ログには、各ステップの開始時刻、終了時刻、初期化ステータス、およびエラーが記録されます。 ETL関数の実行を監視し、できるだけ早い機会に処理ログに基づいてエラーを特定できます。

    context.getLogger() メソッドを使用して、ETL処理ログを記録し、指定したプロジェクトのLogstoreにログを保存できます。 Logstoreのインデックス作成機能を有効にすることを推奨します。