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

Function Compute:カスタムランタイムでの Loggie Agent の使用

最終更新日:Nov 09, 2025

Loggie は、Go に基づく軽量でパフォーマンス専有型のクラウドネイティブなログ収集エージェントです。カスタムランタイムを持つ関数で Loggie Agent を使用して、ファイルからログを収集し、ストレージおよびカスタム分析のために Simple Log Service (SLS) にアップロードできます。

前提条件

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

重要

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

手順

ステップ 1: 関数の作成

  1. Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、[関数] をクリックします。

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

  3. 表示されるダイアログボックスで、[Web 関数] タイプを選択し、[Web 関数の作成] をクリックします。

  4. [Web 関数の作成] ページで、次の項目を設定し、他の項目はデフォルト値を使用してから、[作成] をクリックします。

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

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

    • 弹性設定: 関数のインスタンスの仕様と単一インスタンスの同時実行度はデフォルト値のままにします。

    • コード: 関数のランタイムとコード関連情報を選択します。

      設定項目

      ランタイム環境

      カスタムランタイム > Python > Python 3.9

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

      [フォルダのアップロード] を選択します。アップロードするフォルダの名前は 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 Agent を起動し、バックグラウンドプロセスとして実行します。
    /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 で終わるすべてのファイルからログが収集されます。

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

      • sink

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

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

      このファイルが空の場合、デフォルトの設定が使用されます。このトピックの例ではデフォルトの設定を使用しますが、loggie.yml ファイルは存在する必要があります。ファイルが空でない場合、特定のパラメーターについては、「Loggie システム設定」をご参照ください。

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

    4. アプリケーションを起動します。この例では Python を使用します。実際のアプリケーションに基づいてコマンドを入力してください。

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

    WebIDE で、[ターミナル] > [新しいターミナル] を選択し、chmod 777 bootstrap コマンドを実行してファイル権限を設定します。

  3. [コードのデプロイ] をクリックして、コードのデプロイを完了します。

ステップ 3: 公式の Loggie Agent パブリックレイヤーの追加

  1. [設定] タブをクリックします。[高度な設定] を見つけ、[編集] をクリックし、[高度な設定] パネルで [レイヤー] セクションを見つけて編集します。

  2. [レイヤー] セクションで、[レイヤーの追加] > [公式パブリックレイヤーの追加] を選択して Loggie Agent を設定します。

    次の表に、Loggie Agent パブリックレイヤーについて説明します。

    レイヤー名

    互換性のあるランタイム

    レイヤーバージョン

    ARN

    Loggie Agent

    カスタムランタイム

    この例では、レイヤーバージョン 1 を使用します。

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

  3. [デプロイ] をクリックして Loggie Agent レイヤーを追加します。

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

  1. [設定] タブで、[高度な設定] を見つけ、[編集] をクリックし、[高度な設定] パネルで [環境変数] セクションを見つけて編集します。

  2. [環境変数] セクションで、次の環境変数を追加します。環境変数の設定方法の詳細については、「環境変数の設定」をご参照ください。

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

      この環境変数を追加すると、関数の呼び出しが終了しても、関数インスタンスはすぐにはフリーズしません。インスタンスは 10 秒の遅延後にフリーズし、Loggie Agent 拡張機能がログを正常にレポートできるようになります。

      重要

      呼び出しの完了からインスタンスのフリーズまでの期間中、インスタンスの呼び出しフェーズと同じ課金ルールに基づいて料金が発生します。詳細については、「課金」をご参照ください。

    • 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 Agent を介して Simple Log Service にアップロードできます。

ステップ 5: 結果の確認

  1. [コード] タブで、[関数のテスト] をクリックして、コンソールで関数をテストします。

    設定が完了した後、初めて関数をテストするときに遅延が発生する場合があります。関数を複数回呼び出すことをお勧めします。

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

    image

    • body: ログ情報。

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

トラブルシューティング

Loggie Agent は関数インスタンス内で独立して実行されます。Function Compute プラットフォームは、Loggie Agent が期待どおりに実行されているかどうかを検出できません。Loggie Agent が異常であっても、関数の正常な実行には影響しません。

Simple Log Service で Loggie Agent からのログをクエリできない場合 (数秒の遅延が発生する可能性があります)、次の手順に従って問題をトラブルシューティングしてください。

関数は期待どおりに実行される

関数が期待どおりに実行される場合、関数インスタンスは呼び出し後、一定期間 (通常は数分) アクティブな状態を維持します。インスタンスにログインして、Loggie Agent の実行ステータスとログ情報を表示できます。インスタンスへのログイン方法の詳細については、「インスタンスのコマンドライン操作」をご参照ください。

  • ログ情報が利用できない場合は、コマンドラインから Loggie Agent を起動してみてください。

  • Loggie のログが利用可能な場合は、ログに基づいて問題をトラブルシューティングします。

    • pipelines.yml ファイルが正しく設定されているかどうかを確認します。

    • SLS シンクが正常に起動したかどうかを確認します。ログは pipeline sink(sink/sls)-0 invoke loop start のようになります。

    • ログファイルが収集されているかどうかを確認します。ログは start collect file: /tmp/log/fc-flask.log のようになります。同様のログがない場合は、pipelines.yml ファイルで指定された paths パスにログファイルが生成されているかどうかを確認します。

説明

SLS Logstore に初めて接続するときに、遅延が発生する場合があります。すべてのログが正常な場合は、関数を複数回呼び出し、数分待ってから再度ログをクエリしてください。

関数の実行に失敗する

Loggie Agent は外部拡張機能であるため、通常、関数の正常な動作には影響しません。まず Loggie Agent の起動ロジックを削除して、関数が期待どおりに実行されるかどうかを確認できます。プロセスが予期せず終了した場合や、実行タイムアウトエラーが発生した場合は、メモリまたは CPU の仕様を増やすことを試みることができます。

リファレンス

  • Loggie の詳細については、「Loggie の概要」をご参照ください。

  • この例では、Loggie はログを収集し、処理せずにアップロードします。アップロード前にログデータを処理する (JSON フォーマットの解析や DEBUG ログの削除など) には、pipelines.yml ファイルにインターセプタ設定を追加できます。詳細については、「 Loggie-Interceptor」をご参照ください。