edit-icon download-icon

Log Service トリガー

最終更新日: Nov 30, 2018

Log Service トリガーは定期的に Logstore より増分データを取得します。増分データにより、Function Compute でログ更新分の ETL(Extract Transform Load)がトリガーされます。

シナリオ

Log Service トリガーは、データクリーニングおよび ETL に適しています。下図のとおり、Log Service により、ログ収集、ETL、照会、分析を迅速に行うことができます。

Data ETL

下図のとおり、トリガーは送信先にデータを送信し、クラウド内にビッグデータサービス間のデータパイプラインを構築することができます。

Data shipping

説明

  1. カラムベースのストレージ構築とアップロード
  2. フィールドの事前処理とアップロード
  3. カスタム化し、応答を保存します。

Log Service トリガーを設定

トリガー例

次の slsTrigger.yml は、Log Service トリガーの設定の雛形です。

  1. triggerConfig:
  2. sourceConfig:
  3. project: "etl"
  4. logstore: "etl-log"
  5. jobConfig:
  6. maxRetryTime: 3
  7. triggerInterval: 60
  8. functionParameter:
  9. a: "b"
  10. c: "d"
  11. logConfig:
  12. project: "ali-fc-test"
  13. logstore: "test-store"
  14. enable: true

トリガーパラメータ

  • sourceConfig は設定パラメータのデータソースで、次の属性があります。
    • Logstore:データソース(Logstore)の名前。トリガーは定期的にここで指定された Logstore よりデータを取得し、ETL 処理のために Function Compute にデータを送信します。作成後に本パラメータを変更することはできません。
  • jobConfigは、タスク設定パラメータで、次のプロパティがあります。
    • triggerInterval:Log Service よりトリガーされた関数実行の間隔。値は、3〜600(秒単位)。たとえば、triggerInterval: 60は本関数は、60 秒ごとに直近 60 秒以内に各シャードに書き込まれたデータの位置を取得します。増分データにより、本関数はトリガーされます。Logstore シャードのトラフィック量が 1 MB/秒以上と多いようであれば、トリガー間隔を短くすることを推奨します。そうすると、適当なサイズのデータを関数は処理することになります。
    • maxRetryTime:各トリガーの最大再試行数。値は 0 〜 100。Log Service により、関数実行がトリガーされたときに、許可が足りない、ネットワークエラー、関数実行の例外といったエラーが発生することがあります。最大再試行数に達しても関数実行に失敗することがあります。このような場合には、Log Service はトリガー間隔のあとに関数を再度実行します。サービスに対しての影響は関数コードのロジックにもよります。
  • functionParameter:イベントパラメータは .yml ファイルより本パラメータを直接使用します。関数の使用方法はその関数のロジックによります。関数によって関数の設定は異なります。手順にしたがってデフォルトの関数テンプレートのパラメータが必要な場合があります。初期値は、空({})です。
  • logConfig は、トリガーのログ設定であり、次のプロパティがあります。
    • project:Log Service プロジェクトの名前
    • logstore:ログファイルを格納する Logstore 名
  • enable でトリガーを有効にします。値は、true または false。

イベント形式

  1. {
  2. "parameter":{
  3. "a":"b",
  4. "c":"d"
  5. },
  6. "source":{
  7. "endpoint":"http://cn-shanghai-intranet.log.aliyuncs.com",
  8. "projectName":"vangie-fc-test",
  9. "logstoreName":"fc-test",
  10. "shardId":0,
  11. "beginCursor":"MTUyMzI2NzI5NDY1NjI4MzgzNg==",
  12. "endCursor":"MTUyMzI2NzI5NDY1NjI4MzgzNw=="
  13. },
  14. "jobName":"05c79f637c6b46eaa85911cae032cf47551af7bb",
  15. "taskId":"d22697c0-2a41-4d35-b27c-dccec8856768",
  16. "cursorTime":1523323454
  17. }
  • parameter:トリガーに設定する関数のパラメータ
  • source:Function Compute が Log Service より読み込むログブロックの情報
    • endpoint:Log Service プロジェクトのリージョン
    • projectName:プロジェクト名
    • logstoreName:Logstore 名
    • shardId:Logstore 内の特定のシャード
    • beginCursor:トリガー関数のシャード読み込み開始位置
    • endCursor:トリガー関数のシャード読み込み終了位置
  • jobName:Log Service 内の ETL ジョブ名。Function Compute 内の Log Service トリガーは、Log Service の ETL ジョブに対応します。
  • taskId:指定された関数実行の識別子。この実行は ETL ジョブに対応します。
  • cursorTime:Log Service のバックエンドに送信される最新ログエントリの unix_timestamp。ログエントリを取得する際に関数はこの情報を読み込みます。

Log Service トリガーの作成

例 1. Function Compute コンソールを使用

Function Compute および Log Service は必ず同じリージョンにデプロイします。同じリージョンでないと、Log Service トリガーを設定する際に関数サービスは Log Service を探し出すことができません。詳細は、「リージョンとゾーン」をご参照ください。

  1. Alibaba Cloud コンソールにログインします。

  2. Log Service コンソール にログインします。Logstore を 1 つ作成してログファイルおよびデータソースを処理します。また、Function Compute の生成するログファイルを格納する別の Logstore を作成します。詳細については、Log Service のトピック「準備」 をご参照ください。

  3. Function Compute コンソール にログインし、サービスを作成します。表示される [サービスの作成] ダイアログボックスで、

    1. リージョンを選択します。例では、「中国東部(上海)」リージョンを使用します。

    2. [サービスの作成] をクリックします。

    3. 表示される [サービスの作成] ダイアログボックスで、サービス名を入力します。例では、サービス名を「log-com」とします。

    4. [詳細設定] オプションを有効にします。

    5. [ログ設定] で利用可能なログプロジェクトおよび Logstore を設定します。

    6. [ロール設定] の [ロール操作] ドロップダウンリストより「新しいロールを作成」を選択します。[システムポリシー] ドロップダウンリストより、AliyunLogFullAccess および AliyunLogReadOnlyAccessを選択します。

    7. [承認]、[OK] の順にクリックし、アクションを確認します。

  4. 左のナビゲーションペインより、作成した新規サービスを選択します。

  5. [関数の作成] をクリックして [関数の作成] ページに移動します。

    1. [すべて選択] をクリックし、ドロップダウンリストより「python2.7」 を選択します。例では、Python コードを実行します。
    2. [空の関数] の [選択] をクリックします。

      注意:関数の作成時または作成後にトリガーを作成します。トリガーを作成したら設定します。詳細は、「基本操作」を参照。

    3. [トリガータイプ] ドロップダウンリストより [Log Service (Log)] を選択します。[トリガー名]、[ログプロジェクト名]、[トリガーログ]、[呼び出し間隔]、[再試行回数]、および [関数設定] を設定します。例では、トリガーを次のように設定します。
      Create a trigger

      関数コードのイベントパラメータに応じて [関数設定] 欄を設定します。例では、[関数設定] を次のように設定します。
      ※トリガーにAliyunLogETLRoleポリシーを付ける必要があります。

      1. {
      2. "source":{
      3. "endpoint": "http://cn-shanghai-intranet.log.aliyuncs.com"
      4. },
      5. "target": {
      6. "endpoint": "http://cn-shanghai-intranet.log.aliyuncs.com",
      7. "projectName": "etl-test",
      8. "logstoreName": "nginx_access_log_rep"
      9. }
      10. }
    4. [サービス名]、[関数名]、[関数の説明]、[ランタイム]、および [ランタイム環境]のパラメータを設定します。

    5. [次へ] をクリックします。
    6. すべての設定が正しいことを確認の上、[作成] をクリックします。

例 2. Pyhton SDK を使用

例では、fc-python-sdk を使用します。

  1. import fc2
  2. client = fc2.Client(
  3. endpoint = '<Your Endpoint>',
  4. accessKeyID = '<Your AccessKeyID>',
  5. accessKeySecret = '<Your AccessKeySecret>')
  6. service_name = '<service_name>'
  7. function_name = '<function_name>'
  8. trigger_name = '<trigger_name>'
  9. # ログトリガーを作成
  10. log_trigger_config = {
  11. 'sourceConfig': {
  12. 'logstore': 'log_store_source'
  13. },
  14. 'jobConfig': {
  15. 'triggerInterval': 60,
  16. 'maxRetryTime': 10
  17. },
  18. 'functionParameter': {},
  19. 'logConfig': {
  20. 'project': 'log_project',
  21. 'logstore': 'log_store'
  22. },
  23. 'enable': False
  24. }
  25. source_arn = 'acs:log:cn-shanghai:12345678:project/log_project'
  26. invocation_role = 'acs:ram::12345678:role/aliyunlogetlrole'
  27. client.create_trigger('service_name', 'function_name', 'trigger_name', 'oss',
  28. log_trigger_config, source_arn, invocation_role)

参照

Log Service トリガーの使用例「デモ概要