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

Simple Log Service:カスタム関数の開発

最終更新日:Mar 26, 2026

Function Compute を使用してログデータを処理する場合、Log Service が提供する関数テンプレートを使用するか、独自のカスタム関数を使用できます。このトピックでは、カスタム関数の構築方法について説明します。

関数イベント

Function Compute を使用してログデータを処理する場合、ステップ 2 で関数のエントリパラメーター (関数イベント) を設定する必要があります。イベントはシリアル化された JSON 文字列です。

  • パラメーター

    パラメーター

    説明

    jobName

    Log Service ETL ジョブの名前。Function Compute の各 Log Service トリガーは、Log Service の ETL ジョブに対応しています。

    taskId

    ETL ジョブの場合、taskId は特定の関数呼び出しを一意に識別します。

    cursorTime

    現在の関数呼び出しにおける最後のログレコードが Log Service サーバーに到着したときの UNIX タイムスタンプ。

    source

    このフィールドは Log Service によって生成されます。Log Service は、ETL ジョブで定義されたタスク間隔に基づいて、関数実行を定期的にトリガーします。source フィールドは関数イベントの重要なコンポーネントであり、現在の関数呼び出しの消費範囲を定義します。

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

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

    • logstoreName: Logstore の名前。

    • shardId: Logstore 内の特定のシャード。

    • beginCursor: シャード内のデータ消費の開始位置。

    • endCursor: シャード内のデータ消費の終了位置。

      説明

      データ範囲 [beginCursor, endCursor)beginCursor を含み、endCursor を含まないことを意味します。

    parameter

    トリガーを作成する際に、[関数の設定] セクションで設定する JSON オブジェクトです。カスタム Log Service ETL 関数は、このフィールドをランタイムに解析して、必須パラメーターを取得できます。詳細については、「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
    }

    関数をデバッグする場合、GetCursorByTime 操作を呼び出してカーソルを取得し、上記の例に基づいてテスト用の関数イベントを構築できます。

関数開発

Java、Python、Node.js など、さまざまな言語で関数を開発できます。Log Service は、統合を簡素化するために対応するランタイム用の SDK を提供しています。詳細については、「SDK リファレンス」をご参照ください。

次のセクションでは、Java 8 ランタイムを使用して Log Service ETL 関数の開発方法を実証します。Java 8 で関数をプログラミングする方法の詳細については、Function Compute Java プログラミングガイドをご参照ください。

  • Java 関数テンプレート

    Log Service は、Java 8 ランタイムに基づいたカスタムデータテンプレートを提供しています。このテンプレートを要件に合わせて適応させることができます。

    このテンプレートは以下の特徴を実装しています。

    • 関数イベントから sourcetaskId、および jobName フィールドを解析します。

    • Log Service Java SDK を使用してソースからデータを取得し、processData インターフェイスを呼び出して各データバッチを処理します。

    テンプレートでは以下を実装する必要があります。

    • 関数イベントから parameter フィールドを解析します。このロジックは UserDefinedFunctionParameter.java に実装します。

    • UserDefinedFunction.javaprocessData インターフェイスにデータ処理ロジックを実装します。

    • UserDefinedFunction を関数の説明的な名前に置換します。

  • processData インターフェイスの実装

    processData インターフェイス内で、データのバッチを消費、変換、配信できます。たとえば、LogStoreReplication サンプルは、ある Logstore からデータを読み取り、別の Logstore に書き込みます。

    説明
    • processData がデータを正常に処理した場合、true を返します。リトライ不可のエラーが発生した場合、false を返します。後者の場合、関数は実行を継続し、Log Service は ETL タスクを成功と見なしますが、未処理データを無視します。

    • 致命的なエラーが発生した場合、またはビジネスロジックが早期終了を必要とする場合、例外をスローして関数を終了します。Log Service は関数の失敗を検出し、ETL ジョブのリトライポリシーに従って関数を再呼び出しします。

    • シャードが高いスループットを持つ場合、Out-of-Memory (OOM) エラーによる予期せぬ終了を防止するために、関数に十分なメモリサイズを設定します。

    • 関数が時間のかかる操作を実行する場合、またはシャードが高いスループットを持つ場合、短い関数トリガー間隔と長い関数実行タイムアウトを設定します。

    • 関数に必要な権限を付与します。たとえば、関数が OSS にデータを書き込む必要がある場合、OSS 書き込み権限が必要です。

ETL ログ

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

    スケジューリングログは、ETL ジョブの開始時刻、終了時刻、成功ステータス、および成功時に返される情報を記録します。ETL ジョブが失敗した場合、エラーログが生成され、システム管理者にアラートが送信されます。トリガーを作成する際、ログ用の Logstore を指定し、その Logstore のインデックスを有効にして設定します。詳細については、「インデックスを作成」をご参照ください。

    関数は実行統計を返すことができます。たとえば、Java 8 ランタイム関数では、統計を outputStream に書き込むことができます。Log Service が提供する関数テンプレートは、シリアル化された JSON オブジェクトを文字列として書き込みます。この文字列は ETL スケジューリングログに記録され、統計分析やクエリを可能にします。

  • ETL プロセスログ

    これらのログは、ETL 実行中の各ステップにおける主要なチェックポイントとエラー情報 (ステップの開始時刻と終了時刻、初期化ステータス、モジュールエラーなど) を記録します。プロセスログは、ETL ジョブのランタイムステータスをモニターし、エラーを迅速に診断するのに役立ちます。

    context.getLogger() を使用してプロセスログを書き込み、Log Service プロジェクト内の指定された Logstore に保存します。この Logstore に対してインデックスベースのクエリを有効にすることを推奨します。