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

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

最終更新日:Mar 01, 2026

Loggie は、軽量でパフォーマンス専有型の操作のために構築された、Golangベースのクラウドネイティブなログ収集エージェントです。Function Compute のカスタムランタイムでは、Loggie は関数インスタンス内でバックグラウンドプロセスとして実行されます。関数はログをローカルファイルに書き込み、Loggie はそれらのファイルを読み取り、ログを Simple Log Service (SLS) に転送してストレージと分析を行います。

前提条件

開始する前に、以下を確認してください。

説明

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

課金

FC_EXTENSION_SLS_LOGGIE=true 環境変数を設定すると、Loggie がログのアップロードを完了できるように、各呼び出し後にインスタンスが 10 秒間フリーズします。このフリーズ期間は、Prefreeze フックと同じルールで課金されます。詳細については、「課金ルール」をご参照ください。

ステップ 1: カスタムランタイムでの関数作成

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

  2. トップナビゲーションバーで、リージョンを選択します。 「[サービス]」ページで、対象のサービスをクリックします。

  3. [関数]」ページで、「[関数の作成]」をクリックします。

  4. [関数の作成] ページで、次のパラメーターを設定します。その他のパラメーターにはデフォルト値を使用し、[作成] をクリックします。詳細については、「関数を作成する」をご参照ください。サンプル app.py:

    説明 filename='/tmp/log/fc-flask.log' を実際のログファイルのパスに置き換えてください。このパスは、ステップ 2 で作成したパイプライン構成の sources.paths の値と一致する必要があります。
    パラメーター
    作成方法カスタムランタイムを使用
    [関数名][基本設定] の下)関数名を入力します
    ハンドラータイプ[基本設定] 配下)イベントハンドラー
    ランタイムPython 3.9
    コードアップロード方法フォルダーを使用。フォルダー名は code で、内部のファイルは app.py です。以下のサンプルコードをご参照ください。
    起動コマンド/code/bootstrap (ステップ 2 で作成)
    リスニングポート9000
       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)

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

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

bootstrap ファイルに以下の内容を追加します。

#!/bin/bash

#1. Create the pipelines.yml file.
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. Create the loggie.yml file.
cat << EOF > /code/etc/loggie.yml
EOF

#3. Start Loggie and run it as a background process.
/opt/bin/loggie -config.system=/code/etc/loggie.yml -config.pipeline=/code/etc/pipelines.yml > /tmp/loggie.log 2>&1 &

#4. Start the application.
exec python app.py

このスクリプトは以下を実行します。

  1. pipelines.yml の作成 -- パイプライン構成ファイルです。

    セクション説明
    sourcesログタイプとパスを定義します。この例では、/tmp/log/ ディレクトリからすべての .log ファイルを収集します。
    sinkSLS の送信先を指定します。変数はステップ 4 で設定されます。
  2. loggie.yml の作成 -- Loggie システム構成ファイルです。空のファイルはデフォルト構成を使用します。ファイルは空であっても存在する必要があります。デフォルト以外の構成については、「 Loggie リファレンスドキュメント」をご参照ください。

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

  4. アプリケーションを起動します。この例では Python を使用しています。コマンドは、関数が使用する言語に置き換えてください。

ファイルの内容を追加した後、bootstrap ファイルに実行権限を付与します。 WebIDE で、[ターミナル] > [新しいターミナル] を選択し、次のコマンドを実行します。

chmod 777 bootstrap

ステップ 3: Loggie 公式共通レイヤーの追加

  1. [設定] タブをクリックします。[レイヤー] セクションで、[変更] をクリックします。

  2. パネルで、[レイヤーの追加][公式共通レイヤーの追加] を選択し、Loggie レイヤーを設定します。

    レイヤー名互換性のあるランタイムレイヤーバージョンARN
    Loggie Agentカスタムランタイム1 (この例で使用)acs:fc:{region}:official:layers/Loggie13x/versions/1
  3. [OK]をクリックします。

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

  1. 設定]タブで、[環境変数]セクションに移動し、[変更]をクリックします。

  2. 以下の環境変数を追加します。詳細については、「環境変数」をご参照ください。FC_EXTENSION_SLS_LOGGIE=true -- Loggie がログのアップロードを完了できるように、呼び出し後の 10 秒間のフリーズを有効にします。コストの詳細については、「課金」をご参照ください。pipelines.yml で参照されている 6 つの SLS シンク変数:

    変数説明
    LOGGIE_SINK_SLS_ENDPOINTご利用のリージョンの SLS エンドポイント
    LOGGIE_SINK_SLS_ACCESS_IDAccessKey ID
    LOGGIE_SINK_SLS_ACCESS_SECRETAccessKey Secret
    LOGGIE_SINK_SLS_PROJECTSLS プロジェクト名
    LOGGIE_SINK_SLS_LOGSTORESLS Logstore 名
    LOGGIE_SINK_SLS_TOPICログトピック

  3. [OK] をクリックします。構成が保存されると、Loggie は SLS への関数ログの転送を開始します。

ステップ 5: 結果の検証

  1. [コード] タブで、[関数をテスト] をクリックします。最初の呼び出しでは、ログの配信が遅延する可能性があります。Loggie が初期化してログをフラッシュできるように、関数を数回呼び出します。

  2. Log Service コンソールにログインします。pipelines.yml で構成したリージョン、プロジェクト、Logstore でログをクエリします。クエリ結果で、以下のフィールドを探します。

    フィールド説明
    bodyご利用の関数によって書き込まれたログコンテンツ
    state.*ログ収集状態に関するメタデータです。state 内の hostname フィールドには、関数が実行されたインスタンスの ID が含まれています。

トラブルシューティング

Loggie は関数インスタンス内で独立して実行されます。Function Compute は Loggie のヘルスを監視せず、Loggie の障害は関数の実行に影響を与えません。SLS でのログクエリには数秒のレイテンシーが発生する場合があります。

SLS にログが表示されない場合は、以下の手順で問題を診断してください。

関数実行後にログが見つからない場合

関数が正常に実行されると、インスタンスは呼び出し後数分間アクティブなままになります。インスタンスにログインして Loggie を検査します。手順については、「関数インスタンスを管理するコマンドの実行」をご参照ください。

以下を確認してください。

チェック項目アクション
Loggie が実行中である/tmp/loggie.log が存在しない場合は、コマンドラインから Loggie を手動で起動します。
パイプライン構成が正しい/code/etc/pipelines.yml を開き、ソースパスとシンクの認証情報を検証します。
SLS シンクが起動した/tmp/loggie.logpipeline sink(sink/sls)-0 invoke loop start に似たログ行を探します。
ログファイルが検出されるstart collect file: /tmp/log/fc-flask.log に似たログ行を探します。見つからない場合は、アプリケーションが pipelines.ymlpaths パターンに一致するパスにログファイルを書き込んでいることを確認してください。
説明 SLS Logstore への最初の接続には時間がかかる場合があります。Loggie ログにエラーが表示されない場合は、関数を数回呼び出し、数分待ってから SLS を再度クエリしてください。

関数の実行に失敗する場合

問題を切り分けるには、bootstrap ファイルから Loggie 起動ロジックを削除し、関数が単独で実行されるかテストします。Loggie は外部拡張であり、関数の実行に影響を与えないはずです。予期せぬプロセス終了や実行タイムアウトが発生した場合は、関数のメモリまたは CPU の仕様を増やしてください。

リファレンス