Loggie は、Go に基づく軽量でパフォーマンス専有型のクラウドネイティブなログ収集エージェントです。カスタムランタイムを持つ関数で Loggie Agent を使用して、ファイルからログを収集し、ストレージおよびカスタム分析のために Simple Log Service (SLS) にアップロードできます。
前提条件
プロジェクトと Logstore を作成します。詳細については、「プロジェクトの管理」および「Logstore の作成」をご参照ください。
作成するプロジェクトは、作成する関数と同じリージョンにある必要があります。
手順
ステップ 1: 関数の作成
Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、[関数] をクリックします。
上部のナビゲーションバーで、リージョンを選択します。[関数] ページで、[関数の作成] をクリックします。
表示されるダイアログボックスで、[Web 関数] タイプを選択し、[Web 関数の作成] をクリックします。
[Web 関数の作成] ページで、次の項目を設定し、他の項目はデフォルト値を使用してから、[作成] をクリックします。
パラメーターの詳細については、「関数の作成」をご参照ください。
基本設定: [関数名] を設定します。
弹性設定: 関数のインスタンスの仕様と単一インスタンスの同時実行度はデフォルト値のままにします。
コード: 関数のランタイムとコード関連情報を選択します。
設定項目
例
ランタイム環境
コードのアップロード方法
[フォルダのアップロード] を選択します。アップロードするフォルダの名前は
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'を特定のログタイプとログの場所に変更できます。この設定は、ステップ 2 のsources.pathsパスと一致している必要があります。起動コマンド
/code/bootstrap説明bootstrap ファイルは ステップ 2 で作成されます。
リッスンポート
9000
ステップ 2: 起動コマンドとして機能する bootstrap ファイルの作成
関数が作成されたら、[コード] タブの 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このスクリプトは、次の操作を実行します。
pipelines.yml 設定ファイルを作成します。pipelines.yml はパイプライン設定ファイルです。
loggie.yml 設定ファイルを作成します。loggie.yml は Loggie のシステム設定ファイルです。
このファイルが空の場合、デフォルトの設定が使用されます。このトピックの例ではデフォルトの設定を使用しますが、loggie.yml ファイルは存在する必要があります。ファイルが空でない場合、特定のパラメーターについては、「Loggie システム設定」をご参照ください。
Loggie Agent を起動し、バックグラウンドプロセスとして実行します。Loggie Agent のランタイムログは /tmp/loggie.log に書き込まれます。
アプリケーションを起動します。この例では Python を使用します。実際のアプリケーションに基づいてコマンドを入力してください。
bootstrapファイルに実行権限を設定します。WebIDE で、 を選択し、
chmod 777 bootstrapコマンドを実行してファイル権限を設定します。[コードのデプロイ] をクリックして、コードのデプロイを完了します。
ステップ 3: 公式の Loggie Agent パブリックレイヤーの追加
[設定] タブをクリックします。[高度な設定] を見つけ、[編集] をクリックし、[高度な設定] パネルで [レイヤー] セクションを見つけて編集します。
[レイヤー] セクションで、 を選択して Loggie Agent を設定します。
次の表に、Loggie Agent パブリックレイヤーについて説明します。
レイヤー名
互換性のあるランタイム
レイヤーバージョン
ARN
Loggie Agent
カスタムランタイム
この例では、レイヤーバージョン 1 を使用します。
acs:fc:{region}:official:layers/Loggie13x/versions/1
[デプロイ] をクリックして Loggie Agent レイヤーを追加します。
ステップ 4: 環境変数の設定
[設定] タブで、[高度な設定] を見つけ、[編集] をクリックし、[高度な設定] パネルで [環境変数] セクションを見つけて編集します。
[環境変数] セクションで、次の環境変数を追加します。環境変数の設定方法の詳細については、「環境変数の設定」をご参照ください。
環境変数
FC_EXTENSION_SLS_LOGGIE=trueを設定します。この環境変数を追加すると、関数の呼び出しが終了しても、関数インスタンスはすぐにはフリーズしません。インスタンスは 10 秒の遅延後にフリーズし、Loggie Agent 拡張機能がログを正常にレポートできるようになります。
重要呼び出しの完了からインスタンスのフリーズまでの期間中、インスタンスの呼び出しフェーズと同じ課金ルールに基づいて料金が発生します。詳細については、「課金」をご参照ください。
pipelines.yml ファイルで参照される次の環境変数を設定します:
LOGGIE_SINK_SLS_ENDPOINT、LOGGIE_SINK_SLS_ACCESS_ID、LOGGIE_SINK_SLS_ACCESS_SECRET、LOGGIE_SINK_SLS_PROJECT、LOGGIE_SINK_SLS_LOGSTORE、およびLOGGIE_SINK_SLS_TOPIC。環境変数
説明
LOGGIE_SINK_SLS_ENDPOINTSimple Log Service のエンドポイント。詳細については、「エンドポイント」をご参照ください。
LOGGIE_SINK_SLS_ACCESS_IDAccessKey ID。AccessKey ID の取得方法の詳細については、「AccessKey ペアの取得」をご参照ください。
LOGGIE_SINK_SLS_ACCESS_SECRETAccessKey Secret。AccessKey Secret の取得方法の詳細については、「AccessKey ペアの取得」をご参照ください。
LOGGIE_SINK_SLS_PROJECT宛先 Logstore が属するプロジェクト。
LOGGIE_SINK_SLS_LOGSTOREログの保存に使用される Logstore。
LOGGIE_SINK_SLS_TOPICログのトピック。カスタム値を指定できます。
[デプロイ] をクリックします。関数の設定が更新されると、関数の実行ログを Loggie Agent を介して Simple Log Service にアップロードできます。
ステップ 5: 結果の確認
[コード] タブで、[関数のテスト] をクリックして、コンソールで関数をテストします。
設定が完了した後、初めて関数をテストするときに遅延が発生する場合があります。関数を複数回呼び出すことをお勧めします。
Simple Log Service コンソールにログインし、pipelines.yml ファイルで指定したリージョン、プロジェクト、および Logstore に基づいてログをクエリします。以下に例を示します。

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」をご参照ください。