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

Function Compute:カスタムランタイムとの Loggie エージェント連携

最終更新日:Mar 27, 2026

Loggie は、Golang をベースとした軽量・高性能・クラウドネイティブなログ収集エージェントです。カスタムランタイムを用いる関数において、Loggie エージェントを活用してファイルからログを収集し、Simple Log Service (SLS) へ送信・保存・分析することができます。

前提条件

プロジェクトおよび Logstore を作成します。詳細については、「プロジェクトの管理」および「Logstore の作成」をご参照ください。

重要

作成するプロジェクトは、対象の関数と同一リージョンに配置する必要があります。

操作手順

ステップ 1:関数の作成

  1. まず、Function Compute コンソール にログインし、左側ナビゲーションバーから 関数管理 > 関数 を選択します。

  2. 上部ナビゲーションバーでリージョンを選択します。その後、関数 ページで 関数を作成 をクリックします。

  3. 表示されるダイアログボックスで、Web 関数 を選択し、次へ をクリックします。

  4. 関数の作成 ページで、以下のパラメーターを設定し、その他のパラメーターはデフォルト値のままにして、作成 をクリックします。

    各パラメーターの詳細については、「関数の作成」をご参照ください。

    • 基本設定関数名 を設定します。

    • エラスティックポリシー:リソース仕様および単一インスタンス同時実行数については、デフォルト値をそのまま使用します。

    • コード:関数のランタイムおよびコードを設定します。

      パラメーター

      ランタイム環境

      カスタム実行時

      コードのアップロード方法

      フォルダー内のコードのアップロード を選択します。アップロードするフォルダ名は code であり、code ディレクトリ内のファイルは app.py です。app.py のサンプルコードは以下のとおりです。

      from flask import Flask
      from flask import request
      import logging
      import os
      
      REQUEST_ID_HEADER = 'x-fc-request-id'
      
      app = Flask(__name__)
      
      format_str = '[%(asctime)s] %(levelname)s in %(module)s: %(message)s'
      logging.basicConfig(filename='/tmp/log/fc-flask.log', filemode='w', 
          format=format_str, encoding='utf-8', level=logging.DEBUG)
      @app.route("/invoke", methods = ["POST"])
      def hello_world():
          rid = request.headers.get(REQUEST_ID_HEADER)
          logger = logging.getLogger()
      
          print("FC Invoke Start RequestId: " + rid)
          logger.info("FC Invoke Start RequestId: " + rid)
      
          data = request.stream.read()
          print(str(data))
          logger.info("receive event: {}".format(str(data)))
          
          print("FC Invoke End RequestId: " + rid)
          logger.info("FC Invoke Start RequestId: " + rid)
          return "Hello, World!"
      
      if __name__ == '__main__':
          app.run(host='0.0.0.0',port=9000)
      説明

      コード内の filename='/tmp/log/fc-flask.log' を変更することで、ログファイルのパスを指定できます。このパスは、ステップ 2sources.paths 設定と一致させる必要があります。

      起動コマンド

      /code/bootstrap

      説明

      bootstrap ファイルは、ステップ 2 で作成します。

      リスニングポート

      9000

ステップ 2:bootstrap ファイルの作成

  1. 関数を作成した後、コード タブで WebIDE を使用し、bootstrap ファイルを code ディレクトリ内に作成します。

    以下に、bootstrap ファイルの内容の例を示します。

    #!/bin/bash
    
    # 1. pipelines.yml ファイルを作成します。
    mkdir -p /tmp/log /code/etc
    cat << EOF > /code/etc/pipelines.yml
    pipelines:
      - name: demo
        sources:
          - type: file
            name: fc-demo
            addonMeta: true
            fields:
              topic: "loggie"
            fieldsUnderRoot: true
            paths:
              - "/tmp/log/*.log"
        sink:
          type: sls
          endpoint: ${LOGGIE_SINK_SLS_ENDPOINT}
          accessKeyId: ${LOGGIE_SINK_SLS_ACCESS_ID}
          accessKeySecret: ${LOGGIE_SINK_SLS_ACCESS_SECRET}
          project: ${LOGGIE_SINK_SLS_PROJECT}
          logstore: ${LOGGIE_SINK_SLS_LOGSTORE}
          topic: ${LOGGIE_SINK_SLS_TOPIC}
    EOF
    
    # 2. loggie.yml ファイルを作成します。
    cat << EOF > /code/etc/loggie.yml
    EOF
    
    # 3. Loggie エージェントを起動し、バックグラウンドプロセスとして実行します。
    /opt/bin/loggie -config.system=/code/etc/loggie.yml -config.pipeline=/code/etc/pipelines.yml > /tmp/loggie.log 2>&1 &
    
    # 4. アプリケーションを起動します。
    exec python app.py

    このスクリプトは、以下の処理を行います:

    1. 構成ファイル pipelines.yml を作成します。pipelines.yml はパイプライン構成ファイルです。

      • sources

        ログソースを指定します。本例では、/tmp/log ディレクトリ内の拡張子が .log のすべてのファイルからログを収集します。

        addonMeta 設定は、sources 構成でログ収集状態に関するデフォルトのメタデータを追加します。 sources 構成について詳しくは、「共通のソース構成」をご参照ください。

      • sink

        Simple Log Service に関する情報を指定します。 スクリプト内の変数は、ステップ 4 で設定されます。

    2. 構成ファイル loggie.yml を作成します。loggie.yml は Loggie のシステム構成ファイルです。

      空のファイルはデフォルト構成を意味します。本トピックの例では、デフォルト構成方式を採用しており、loggie.yml ファイルが存在することを前提としています。ファイルが空でない場合は、「Loggie システム構成」をご参照のうえ、具体的なパラメーターについて確認してください。

    3. Loggie エージェントを起動し、バックグラウンドプロセスとして実行します。エージェントの実行ログは /tmp/loggie.log に書き込まれます。

    4. アプリケーションを起動します。本例では Python を使用していますが、実際のランタイムに応じたコマンドを使用してください。

  2. bootstrap ファイルに実行権限を付与します。

    WebIDE で を選択し、chmod 777 bootstrap コマンドを実行してファイルの権限を設定します。

  3. デプロイメントコード をクリックしてデプロイメントを完了します。

ステップ 3:Loggie エージェントのパブリックレイヤーの追加

  1. 設定 タブをクリックします。詳細設定 を見つけ、右側の 変更 をクリックします。高度な設定パネルで、レイヤー セクションを編集します。

  2. レイヤー エリアで、レイヤーの追加 > パブリックレイヤーの追加 を選択し、Loggie エージェントを構成します。

    以下に、Loggie エージェントのパブリックレイヤーの概要を示します。

    レイヤー名

    互換性のあるランタイム

    レイヤーのバージョン

    ARN

    Loggie エージェント

    カスタムランタイム

    本例ではバージョン 1 を使用します。

    acs:fc:{region}:official:layers/Loggie13x/versions/1

  3. デプロイ をクリックして Loggie エージェントのレイヤーを追加します。

ステップ 4:環境変数の設定

  1. 設定 タブで、詳細設定 を見つけ、変更 をクリックし、詳細設定 パネル内の 環境変数 セクションを編集します。

  2. 環境変数 パネルで、以下の環境変数を追加します。詳細については、「環境変数の設定」をご参照ください。

    • FC_EXTENSION_SLS_LOGGIE=true 環境変数を設定します。

      この環境変数を追加すると、呼び出し終了後に関数インスタンスが即座にフリーズされず、Loggie エージェント拡張によるログの正常なアップロードを保証するために 10 秒間待機します。

      重要

      呼び出しが終了してからインスタンスがフリーズされるまでの待機期間についても課金されます。課金ルールは、インスタンスの呼び出しフェーズと同一です。詳細については、「課金」をご参照ください。

    • pipelines.yml ファイル内で参照される環境変数を設定します。これらには、LOGGIE_SINK_SLS_ENDPOINTLOGGIE_SINK_SLS_ACCESS_IDLOGGIE_SINK_SLS_ACCESS_SECRETLOGGIE_SINK_SLS_PROJECTLOGGIE_SINK_SLS_LOGSTORE、および LOGGIE_SINK_SLS_TOPIC が含まれます。

      環境変数

      説明

      LOGGIE_SINK_SLS_ENDPOINT

      Simple Log Service のエンドポイントです。詳細については、「エンドポイント」をご参照ください。

      LOGGIE_SINK_SLS_ACCESS_ID

      ご利用の AccessKey ID です。AccessKey ID の取得方法については、「AccessKey ペアの作成」をご参照ください。

      LOGGIE_SINK_SLS_ACCESS_SECRET

      ご利用の AccessKey Secret です。AccessKey Secret の取得方法については、「AccessKey ペアの作成」をご参照ください。

      LOGGIE_SINK_SLS_PROJECT

      送信先 Logstore を含むプロジェクトです。

      LOGGIE_SINK_SLS_LOGSTORE

      ログの保存に使用する Logstore です。

      LOGGIE_SINK_SLS_TOPIC

      ログのトピックです。任意の値を指定できます。

  3. デプロイ をクリックします。関数の設定が更新された後、実行ログは Loggie を経由して Simple Log Service へアップロードされるようになります。

ステップ 5:結果の検証

  1. コード タブで、関数のテスト をクリックして、コンソール上で関数のデバッグを行います。

    設定後の初回呼び出しでは若干の遅延が発生することがあります。複数回呼び出して確認することを推奨します。

  2. Simple Log Service コンソール にログインし、pipelines.yml ファイルで指定したリージョン、プロジェクト、Logstore を基にログをクエリします。以下に例を示します。

    image

    • body:ログメッセージ。

    • state.*:ログ収集状態に関するメタデータ。hostname フィールドは、関数が実行されるインスタンスの ID です。

トラブルシューティング

Loggie エージェントは関数インスタンス内で独立して実行されます。Function Compute は、Loggie エージェントが正常に動作しているかどうかを検出できないため、エージェントの障害が関数の実行に影響を与えることはありません。

数秒経過しても Simple Log Service に Loggie エージェントからのログが表示されない場合は、以下の手順でトラブルシューティングを行ってください。

関数が正常に実行される場合

関数が正常に実行される場合、呼び出し終了後も数分間はインスタンスがアクティブな状態が続きます。この期間中にインスタンスにログインし、Loggie エージェントの実行状態およびログを確認できます。詳細については、「インスタンスのコマンドライン操作」をご参照ください。

  • ログが存在しない場合は、コマンドラインから Loggie エージェントを起動してみてください。

  • Loggie のログが存在する場合は、それらを用いてトラブルシューティングを行ってください。

    • pipelines.yml ファイルの構成が正しいか確認してください。

    • SLS シンクが正常に起動したか確認してください。ログには、pipeline sink(sink/sls)-0 invoke loop start に類似したエントリが記録されているはずです。

    • ログファイルが正しく収集されているか確認してください。start collect file: /tmp/log/fc-flask.log に類似したログエントリが存在するか確認します。該当するログエントリがない場合は、paths 設定で指定された pipelines.yml ファイルのパスにログファイルが生成されているか確認してください。

説明

Simple Log Service の Logstore への初回接続時には、ログ取り込みに遅延が発生することがあります。エージェントのログが正常である場合は、関数をさらに数回呼び出し、数分待ってから Simple Log Service で関数のログをクエリしてください。

関数が正常に実行されない場合

Loggie エージェントは外部拡張であり、通常は関数の正常な動作に影響を与えません。関数が失敗する場合は、まず bootstrap ファイルから Loggie エージェントの起動ロジックを削除し、関数単体で正常に動作することを確認してください。プロセスの終了またはタイムアウトエラーが発生する場合は、関数のメモリまたは CPU を増加させてみてください。

関連ドキュメント

  • 本例では、Loggie がログを収集してそのままアップロードしています。JSON 形式のログの解析や DEBUG ログの除外など、ログデータをアップロード前に処理する必要がある場合は、pipelines.yml ファイルにインターセプタ構成を追加できます。詳細については、「 Loggie-インターセプタ」をご参照ください。