Loggieは、ログの収集に使用されるGolangベースのクラウドネイティブエージェントです。 それは軽量および高性能を特色にします。 カスタムランタイムの関数でLoggieを使用して、ファイルからログを収集し、そのログをSimple Log Serviceにアップロードして保存とカスタム分析を行うことができます。
始める前に
Function Compute: サービスの作成
Simple Log Service: プロジェクトの作成とLogstoreの作成。
説明作成するログプロジェクトは、手順1で作成する関数と同じリージョンにある必要があります。
手順
手順1: カスタムランタイムでの関数の作成
Function Computeコンソールにログインします。 左側のナビゲーションウィンドウで、[サービスと機能] をクリックします。
上部のナビゲーションバーで、リージョンを選択します。 [サービス] ページで、目的のサービスをクリックします。
[関数] ページで、[関数の作成] をクリックします。
[関数の作成] ページで、次のパラメーターを設定し、他のパラメーターにデフォルト値を使用して、[作成] をクリックします。 詳細については、「関数の作成」をご参照ください。
作成方法: [カスタムランタイムの使用] を選択します。
基本設定: [function name] フィールドに関数名を入力し、[Handler Type] の [Event Handler] を選択します。
コード: 関数のランタイム環境とコード関連の情報を設定します。
パラメーター
例
ランタイム
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'
を、コード内の実際のログタイプとログの場所に変更できます。 設定がステップ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ファイルを作成します。
ソース
ログのタイプとパスを指定します。 次の例では、で終わるすべてのファイルからログを収集する方法を示します。. ログで、/tmp /ログディレクトリに移動します。
シンク
Simple Log Serviceに関する情報を指定します。 スクリプト内の変数はステップ4で設定されます。
loggie構成ファイルであるLoggie. ymlファイルを作成します。
このファイルが空の場合、デフォルトの設定が使用されます。 この例では、デフォルト設定が使用されています。 ただし、loggie.ymlファイルが存在する必要があります。 ファイルが空でない場合は、詳細な設定の詳細について「 概要」をご参照ください。
Loggieを起動し、バックグラウンドプロセスとして実行します。 Loggieの実行ログは、/tmp/loggie.logファイルに出力されます。
アプリケーションを起動します。 この例では、Pythonが使用されます。 実際のシナリオでは、使用するプログラミング言語を指定します。
ブートストラップ
ファイルの実行権限を取得します。WebIDEで、
を選択し、chmod 777 bootstrap
コマンドを実行して、ファイルを実行可能にするように設定します。
ステップ3: Loggie公式共通レイヤーを追加する
[設定] タブをクリックします。 [レイヤー] セクションで、[変更] をクリックします。
レイヤーを変更するパネルで、
を選択し、Loggieレイヤーを設定します。次の表に、Loggie共通レイヤーに関する情報を示します。
レイヤー名
互換性のあるランタイム
レイヤーバージョン
ARN
Loggieエージェント
カスタムランタイム
この例では、レイヤバージョン1を使用します。
acs:fc:{region}:official:layers/Loggie13x/versions/1
[OK] をクリックします。
ステップ4: 環境変数の設定
[設定] タブの [環境変数] セクションで、[変更] をクリックします。
環境変数を変更するパネルで、次の環境変数を追加します。 環境変数の設定方法の詳細については、「環境変数」をご参照ください。
環境変数
FC_EXTENSION_SLS_LOGGIE=true
を設定します。この環境変数を追加すると、関数が呼び出されてから10秒後にインスタンスが凍結されます。 これにより、Loggieは期待どおりにログを報告できます。
重要FC_EXTENSION_SLS_LOGGIE=true環境変数の使用に対して課金されます。 環境変数の課金ルールは、プリフリーズフックの課金ルールと同じです。 詳細については、「課金ルール」をご参照ください。
で環境変数を設定します。パイプライン. 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
.
[OK] をクリックします。 関数設定が更新された後、Loggieを使用して関数の実行ログをSimple Log Serviceにアップロードできます。
ステップ4: 結果の確認
[コード] タブで、[テスト機能] をクリックします。
関数を初めてテストする場合、ログのアップロードが多少遅れることがあります。 関数をさらに数回テストすることをお勧めします。
Log Serviceコンソールにログインし、pipelines.ymlファイルのリージョン、プロジェクト、およびLogstore設定に基づいてログを照会します。 以下の図は一例です。
body
: ログ。state.*
: ログ収集状態のメタデータ。hostname
は、関数が実行されるインスタンスのIDです。
トラブルシューティング
Loggieは関数インスタンスで独立して実行されます。 Function Computeは、Loggieが期待どおりに実行されているかどうかを検出できません。 Loggieが誤動作しても機能の実行には影響しません。
Simple Log ServiceでLoggieに関連するログをクエリすると、数秒の遅延が発生する場合があります。 Simple Log ServiceでLoggieに関連するログが見つからない場合は、次の操作を実行して問題をトラブルシューティングします。
関数は期待どおりに実行されます
この場合、インスタンスは関数が呼び出されてから数分間有効です。 インスタンスにログインして、Loggieの実行ステータスとログを表示できます。 インスタンスへのログイン方法の詳細については、「関数インスタンスを管理するためのコマンドの実行」をご参照ください。
ログが存在しない場合は、コマンドラインで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 Webサイトをご覧ください。
この例では、Loggieはログを収集し、処理なしでアップロードします。 JSON形式のログの解析やDEBUGログの削除など、ログをアップロードする前にログを処理する場合は、pipelines.ymlファイルにInterceptor設定を追加できます。 詳細については、次をご参照ください: 概要をご参照ください。