Loggieは、Golangをベースにした、軽量で高性能なクラウドネイティブエージェントで、ログの収集に使用できます。 カスタムランタイムで実行される関数でLoggieを使用して、ファイルからログを収集し、そのログをSimple Log Serviceにアップロードして保存と分析を行うことができます。
前提条件
プロジェクトとLogstoreはSimple Log Serviceで作成されます。 詳細については、「プロジェクトの作成」および「Logstore の作成」をご参照ください。
作成したログプロジェクトは、作成する関数と同じリージョンにある必要があります。
手順
ステップ1: 関数の作成
Function Computeコンソールにログインします。 左側のナビゲーションウィンドウで、[関数] をクリックします。
上部のナビゲーションバーで、リージョンを選択します。 [関数] ページで、[関数の作成] をクリックします。
表示される [関数の作成] ページで、次のパラメーターを設定し、他のパラメーターのデフォルト値を保持し、[作成] をクリックします。 詳細については、「関数の作成」をご参照ください。
関数タイプ: Web関数
基本設定: 関数名を設定します。
コード: 関数のランタイムとコード関連の情報を設定します。
パラメーター
例
サンプルコード
Python 3.9
コードのアップロード方法
[フォルダのアップロード] を選択します。 アップロードするフォルダーの名前は
code
です。app.py
ファイルはcode
ディレクトリに保存されます。 次のコードスニペットは、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
の値と一致していることを確認してください。Startupコマンド
/code/bootstrap
説明ブートストラップファイルはステップ2で作成されます。
リスニングポート
9000
手順2: 起動コマンドとして機能するブートストラップファイルを作成する
関数の作成後、[コード] タブでWebIDEを使用して、
Code
ディレクトリにブートストラップ
ファイルを作成します。次のコードは、サンプルの
ブートストラップ
ファイルを示しています。#!/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ファイルを作成します。
loggie構成ファイルであるLoggie. ymlファイルを作成します。
このファイルが空の場合、デフォルトの設定が使用されます。 この例では、デフォルト設定が使用されています。 ただし、loggie.ymlファイルが存在する必要があります。 ファイルが空でない場合は、
詳細な設定の「概要」をご参照ください。
Loggieを起動し、バックグラウンドプロセスとして実行します。 Loggieの実行ログは、/tmp/loggie.logファイルに出力されます。
アプリケーションを起動します。 この例では、Pythonランタイムが使用されます。 使用する実際のランタイムが優先されます。
ブートストラップ
ファイルの実行権限を設定します。WebIDEで、
を選択し、chmod 777 bootstrap
コマンドを実行して権限を設定します。[デプロイ] をクリックしてコードをデプロイします。
ステップ3: Loggie Agent共通レイヤーを追加する
[設定] タブをクリックします。 [レイヤー] タブで、[レイヤー] セクションの [変更] をクリックします。
レイヤーパネルで、
を選択し、Loggieエージェントレイヤーを設定します。次の表は、Loggie Agentの共通レイヤーに関する情報を示しています。
レイヤー名
互換性のあるランタイム
レイヤーバージョン
ARN
Loggieエージェント
カスタムランタイム
この例ではバージョン1を使用します。
acs:fc:{region}:official:layers/Loggie13x/versions/1
[デプロイ] をクリックしてLoggieエージェントレイヤーを追加します。
ステップ4: 環境変数の設定
[設定] タブで、[環境変数] タブをクリックし、[変更] をクリックします。
環境変数パネルで、次の環境変数を追加します。 環境変数の設定方法の詳細については、「環境変数の設定」をご参照ください。
FC_EXTENSION_SLS_LOGGIE
をtrueに設定します。この環境変数を追加すると、インスタンスは呼び出しの10秒後に凍結されます。 これにより、Loggieは期待どおりにログを報告できます。
重要呼び出しが完了してからインスタンスが凍結されるまでの間、呼び出し中の同じ課金ルールに基づいて料金が引き続き発生します。 詳細については、「課金」をご参照ください。
で次の環境変数を設定します。パイプライン. ymlファイル:
LOGGIE_SINK_SLS_ENDPOINT
,LOGGIE_SINK_SLS_ACCESS_ID
,LOGGIE_SINK_SLS_ACCESS_SECRET
,LOGGIE_SINK_SLS_プロジェクト
,LOGGIE_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シークレット。 AccessKeyシークレットの取得方法の詳細については、「AccessKeyペア」をご参照ください。
LOGGIE_SINK_SLS_プロジェクト
Logstoreが属するプロジェクト。
LOGGIE_SINK_SLS_LOGSTORE
ログの保存に使用されるLogstore。
LOGGIE_SINK_SLS_トピック
ログのトピック。 カスタム値を指定できます。
[デプロイ] をクリックします。 関数設定が更新された後、Loggieを使用して関数の実行ログをSimple Log Serviceにアップロードできます。
ステップ4: 結果の確認
[コード] タブで、[関数のテスト] をクリックして、Function Computeコンソールで関数をデバッグします。
最初のテストで多少の遅延が発生する可能性があります。 関数をさらに数回呼び出すことをお勧めします。
Simple Log Service コンソールにログインします。 pipelines.ymlファイル内のリージョン、プロジェクト、およびLogstore情報に基づいてログを照会します。 以下の図は一例です。
body
: ログ本体。state.*
: ログ収集の状態メタデータ。hostname
は、関数が実行されるインスタンスのIDです。
トラブルシューティング
Loggieは関数インスタンスで独立して実行されます。 Function Computeは、Loggieが正常かどうかを検出できません。 Loggieが異常であっても、関数の実行には影響しません。
Simple Log ServiceでLoggieに関連するログをクエリすると、数秒の遅延が発生する可能性があります。 Simple Log ServiceでLoggieに関連するログが見つからない場合は、次の操作を実行して問題をトラブルシューティングします。
関数は期待どおりに実行されます
この場合、インスタンスは関数が呼び出されてから数分間有効です。 インスタンスにログインして、Loggieの実行ステータスとログを表示できます。 インスタンスへのログイン方法の詳細については、「CLIベースのインスタンス管理」をご参照ください。
ログが存在しない場合は、コマンドラインでLoggieを起動できます。
ログが存在する場合は、ログに基づいて問題をトラブルシューティングします。
pipelines.ymlファイルが正しく設定されているかどうかを確認します。
Simple Log Serviceシンクが正常に起動されているかどうかを確認します。 ログは
pipeline sink(sink/sls)-0 invoke loop start
に似ています。ログファイルが取得されているか確認してください。 ログファイルは、
start collect file: /tmp/log/fc-flask.log
に似ています。 同様のログが利用できない場合は、pipelines.ymlファイル構成のpaths
パスに基づいてログファイルが生成されているかどうかを確認します。
Simple Log Service Logstoreに初めて接続すると、レイテンシが発生する可能性があります。 ログに異常が見つからない場合は、関数を複数回呼び出し、ログを照会する前に数分待つことができます。
関数の実行に失敗する
関数の実行に失敗した場合は、Loggieからスタートアップロジックを削除し、関数が期待どおりに実行されているかどうかを確認できます。 Loggieは外部拡張機能であるため、ほとんどの場合、Loggieは関数の実行に影響しません。 予期しないプロセスの終了や実行タイムアウトが発生した場合は、メモリをスケールアップするか、CPU仕様を増やすことができます。
関連ドキュメント
Loggieの詳細については、「Loggie」をご参照ください。
この例では、Loggieはログを収集し、処理なしでそのままアップロードします。 JSON形式のログの解析やDEBUGログの削除など、ログをアップロードする前にログを処理する場合は、pipelines.ymlファイルにInterceptor設定を追加できます。 詳細については、次をご参照ください:
概要をご参照ください。