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

Function Compute:カスタムランタイムでLoggieを使用する

最終更新日:Nov 01, 2024

Loggieは、Golangをベースにした、軽量で高性能なクラウドネイティブエージェントで、ログの収集に使用できます。 カスタムランタイムで実行される関数でLoggieを使用して、ファイルからログを収集し、そのログをSimple Log Serviceにアップロードして保存と分析を行うことができます。

前提条件

プロジェクトとLogstoreはSimple Log Serviceで作成されます。 詳細については、「プロジェクトの作成」および「Logstore の作成」をご参照ください。

重要

作成したログプロジェクトは、作成する関数と同じリージョンにある必要があります。

手順

ステップ1: 関数の作成

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

  2. 上部のナビゲーションバーで、リージョンを選択します。 [関数] ページで、[関数の作成] をクリックします。

  3. 表示される [関数の作成] ページで、次のパラメーターを設定し、他のパラメーターのデフォルト値を保持し、[作成] をクリックします。 詳細については、「関数の作成」をご参照ください。

    • 関数タイプ: 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: 起動コマンドとして機能するブートストラップファイルを作成する

  1. 関数の作成後、[コード] タブで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

    スクリプトは次の操作を実行します。

    1. パイプライン構成ファイルであるpipelines.ymlファイルを作成します。

      • ソース

        ログの種類とパスを指定します。 次の例では、で終わるすべてのファイルからログを収集する方法を示します。. ログで、/tmp /ログディレクトリに移動します。

        sourceaddonMetaは、ログ収集のデフォルト状態メタデータを追加するように指定します。 ソースの詳細については、「概要」をご参照ください。

      • シンク

        Simple Log Serviceに関する情報を指定します。

        スクリプト内の変数は、ステップ4で設定されます。

    2. loggie構成ファイルであるLoggie. ymlファイルを作成します。

      このファイルが空の場合、デフォルトの設定が使用されます。 この例では、デフォルト設定が使用されています。 ただし、loggie.ymlファイルが存在する必要があります。 ファイルが空でない場合は、

      詳細な設定の「概要」をご参照ください。

    3. Loggieを起動し、バックグラウンドプロセスとして実行します。 Loggieの実行ログは、/tmp/loggie.logファイルに出力されます。

    4. アプリケーションを起動します。 この例では、Pythonランタイムが使用されます。 使用する実際のランタイムが優先されます。

  2. ブートストラップファイルの実行権限を設定します。

    WebIDEで、[ターミナル] > [新しいターミナル] を選択し、chmod 777 bootstrapコマンドを実行して権限を設定します。

  3. [デプロイ] をクリックしてコードをデプロイします。

ステップ3: Loggie Agent共通レイヤーを追加する

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

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

    次の表は、Loggie Agentの共通レイヤーに関する情報を示しています。

    レイヤー名

    互換性のあるランタイム

    レイヤーバージョン

    ARN

    Loggieエージェント

    カスタムランタイム

    この例ではバージョン1を使用します。

    acs:fc:{region}:official:layers/Loggie13x/versions/1

  3. [デプロイ] をクリックしてLoggieエージェントレイヤーを追加します。

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

  1. [設定] タブで、[環境変数] タブをクリックし、[変更] をクリックします。

  2. 環境変数パネルで、次の環境変数を追加します。 環境変数の設定方法の詳細については、「環境変数の設定」をご参照ください。

    • 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_トピック

      ログのトピック。 カスタム値を指定できます。

  3. [デプロイ] をクリックします。 関数設定が更新された後、Loggieを使用して関数の実行ログをSimple Log Serviceにアップロードできます。

ステップ4: 結果の確認

  1. [コード] タブで、[関数のテスト] をクリックして、Function Computeコンソールで関数をデバッグします。

    最初のテストで多少の遅延が発生する可能性があります。 関数をさらに数回呼び出すことをお勧めします。

  2. Simple Log Service コンソールにログインします。 pipelines.ymlファイル内のリージョン、プロジェクト、およびLogstore情報に基づいてログを照会します。 以下の図は一例です。

    image

    • 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設定を追加できます。 詳細については、次をご参照ください:

    概要をご参照ください。