Loggie は、軽量でパフォーマンス専有型の操作のために構築された、Golangベースのクラウドネイティブなログ収集エージェントです。Function Compute のカスタムランタイムでは、Loggie は関数インスタンス内でバックグラウンドプロセスとして実行されます。関数はログをローカルファイルに書き込み、Loggie はそれらのファイルを読み取り、ログを Simple Log Service (SLS) に転送してストレージと分析を行います。
前提条件
開始する前に、以下を確認してください。
SLS プロジェクトは、ステップ 1 で作成する関数と同じリージョンにある必要があります。
課金
FC_EXTENSION_SLS_LOGGIE=true 環境変数を設定すると、Loggie がログのアップロードを完了できるように、各呼び出し後にインスタンスが 10 秒間フリーズします。このフリーズ期間は、Prefreeze フックと同じルールで課金されます。詳細については、「課金ルール」をご参照ください。
ステップ 1: カスタムランタイムでの関数作成
「Function Compute コンソール」にログインします。左側のナビゲーションウィンドウで、[サービスと関数] をクリックします。
トップナビゲーションバーで、リージョンを選択します。 「[サービス]」ページで、対象のサービスをクリックします。
「[関数]」ページで、「[関数の作成]」をクリックします。
[関数の作成] ページで、次のパラメーターを設定します。その他のパラメーターにはデフォルト値を使用し、[作成] をクリックします。詳細については、「関数を作成する」をご参照ください。サンプル
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このスクリプトは以下を実行します。
pipelines.ymlの作成 -- パイプライン構成ファイルです。セクション 説明 sourcesログタイプとパスを定義します。この例では、 /tmp/log/ディレクトリからすべての.logファイルを収集します。sinkSLS の送信先を指定します。変数はステップ 4 で設定されます。 loggie.ymlの作成 -- Loggie システム構成ファイルです。空のファイルはデフォルト構成を使用します。ファイルは空であっても存在する必要があります。デフォルト以外の構成については、「 Loggie リファレンスドキュメント」をご参照ください。Loggie をバックグラウンドプロセスとして起動します。Loggie ランタイムログは
/tmp/loggie.logに書き込まれます。アプリケーションを起動します。この例では Python を使用しています。コマンドは、関数が使用する言語に置き換えてください。
ファイルの内容を追加した後、bootstrap ファイルに実行権限を付与します。 WebIDE で、[ターミナル] > [新しいターミナル] を選択し、次のコマンドを実行します。
chmod 777 bootstrapステップ 3: Loggie 公式共通レイヤーの追加
[設定] タブをクリックします。[レイヤー] セクションで、[変更] をクリックします。
パネルで、[レイヤーの追加] > [公式共通レイヤーの追加] を選択し、Loggie レイヤーを設定します。
レイヤー名 互換性のあるランタイム レイヤーバージョン ARN Loggie Agent カスタムランタイム 1 (この例で使用) acs:fc:{region}:official:layers/Loggie13x/versions/1[OK]をクリックします。
ステップ 4: 環境変数の設定
[設定]タブで、[環境変数]セクションに移動し、[変更]をクリックします。
以下の環境変数を追加します。詳細については、「環境変数」をご参照ください。
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ログトピック [OK] をクリックします。構成が保存されると、Loggie は SLS への関数ログの転送を開始します。
ステップ 5: 結果の検証
[コード] タブで、[関数をテスト] をクリックします。最初の呼び出しでは、ログの配信が遅延する可能性があります。Loggie が初期化してログをフラッシュできるように、関数を数回呼び出します。
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.log で pipeline sink(sink/sls)-0 invoke loop start に似たログ行を探します。 |
| ログファイルが検出される | start collect file: /tmp/log/fc-flask.log に似たログ行を探します。見つからない場合は、アプリケーションが pipelines.yml の paths パターンに一致するパスにログファイルを書き込んでいることを確認してください。 |
関数の実行に失敗する場合
問題を切り分けるには、bootstrap ファイルから Loggie 起動ロジックを削除し、関数が単独で実行されるかテストします。Loggie は外部拡張であり、関数の実行に影響を与えないはずです。予期せぬプロセス終了や実行タイムアウトが発生した場合は、関数のメモリまたは CPU の仕様を増やしてください。
リファレンス
ログをアップロードする前に変換する場合 (例: JSON ログの解析や DEBUG エントリのフィルター) は、
pipelines.ymlにインターセプター構成を追加します。詳細については、「 Loggie インターセプターリファレンス」をご参照ください。