メインコンテンツまでスキップ

アプリのロギングスクリプトのサンプル with Opensearch

Version: 1
  • logging
Download Canvas JSON
logo

Studio上で動作するアプリケーションのログを収集する仕組みとして、OpenSearchとOpenSearch Dashboardsのセットをデプロイするサンプルです。

また、このログ収集サーバに対して、ログを送信するサンプルのアプリ(Python)も付属しています。

OpensearchのスナップショットをAmazon S3へバックアップし、リストアすることも可能です(Amazon S3のアクセスキーが必要)。

紹介動画

概要

想定ユーザー

  • ロギングを実装したいユーザー。
  • PythonアプリケーションのログをOpenSearchに保存したいユーザー。
  • OpenSearchに保存したログをOpenSearchダッシュボードで確認したいユーザー。

テンプレート動作

  • 入力
    • シークレット (スナップショットをAmazon S3に保存する場合に設定する)
      • AWS_ACCESS_KEY_ID
      • AWS_SECRET_ACCESS_KEY
      • AWS_SESSION_TOKEN (任意。一時的な認証情報を使用する場合に設定する。)
    • Injection機能による初期設定
      • Dashboard のSideAppにInjectionファイル /usr/share/opensearch-dashboards/config/opensearch_dashboards.ymlserver.basePath{namespace-id} をCanvasのネームスペースIDに置き換える。
    • ログの保存
      • app ワークスペースの Dummy log generation app SideAppのInjectionファイル /app/src/app.py に、ログを送信するためのコードが記載されている。本アセット単体で動作確認する場合は変更不要。
  • Output
    • 保存されたログをOpenSearchダッシュボードから確認できる。
  • Function
    • PythonアプリケーションのログをOpenSearchに保存する。
    • OpenSearchダッシュボードでログを表示する。

利用方法

単体での動作確認

  1. スナップショットをAmazon S3に保存する場合、Canvasでシークレットとして下記を設定する。
    • AWS_ACCESS_KEY_ID
    • AWS_SECRET_ACCESS_KEY
    • AWS_SESSION_TOKEN (任意。一時的な認証情報を使用する場合に設定する。)
  2. Canvasで Dashboard のSideAppにInjectionファイル /usr/share/opensearch-dashboards/config/opensearch_dashboards.ymlserver.basePath{namespace-id} をCanvasのネームスペースIDに置き換える。
    canvas-init-basepath
  3. デプロイボタンを押し、デプロイの完了を待つ。完了すると、 app ワークスペースの Dummy log generation app SideAppが、30秒おきにログを出力する。
  4. Dashboard のSideAppに接続されたEndpointのURL ( https://studio.{env-id}.studio.exabase.ai/{namespace-id}/log/dashboard/ ) から、OpenSearchダッシュボードにアクセスする。
  5. OpenSearchダッシュボードのメニューから "Discover" を開き、 "Create index pattern" から python-logs-* というインデックスパターンを作成する。 Time field としては、基本的には @timestamp を用いる。
  6. 再度OpenSearchダッシュボードのメニューの "Discover" を開くと、ログを確認できる。
  7. スナップショットをAmazon S3に保存する場合は、OpenSearchダッシュボードから以下の設定を行う。
    1. メニューの "Snapshot Management" -> "Repositories" を開き、 "Create repository" から、下記のように入力してスナップショットリポジトリを登録する。
      • Repository name: {任意の名称}
      • Repository type: Custom configuration
      • Custom configuration:
        {
        "type": "s3",
        "settings": {
        "bucket": "{bucket_name}",
        "base_path": "{bucket_base_path}"
        }
        }
    2. 自動的なスナップショット保存の設定をするために、 "Snapshot Management" -> "Snapshot policies" を開き、 "Create policy" から、表示されるフォームに入力する。
  8. スナップショットからログをリストアする場合、OpenSearchダッシュボードから以下のように操作する。
    1. "Snapshot Management" -> "Repositories" を開き、スナップショット設定時に設定したリポジトリがなければ、設定時と同様にスナップショットリポジトリを登録する。
    2. "Snapshot Management" -> "Snapshots" を開くと、保存していたスナップショットが表示される。リストアしたいスナップショットのチェックボックスをチェックし、 "Restore" を押す。表示に従ってリストアの設定を行い、 "Restore snapshot" を押す。
    3. メニューから "Discover" を開き、インデックスパターンがなければ、リストアしたログのインデックスにマッチするインデックスパターンを "Index pattern name" に入力し、インデックスパターンを作成する。
    4. 再度メニューの "Discover" を開くと、リストアしたログを確認できる。

他のアセットとの連携

  • 本アセットは、PythonアプリケーションのログをOpenSearchとOpenSearch Dashboardsにより扱うための機能を、Studioで構築するアプリケーションに導入するために活用されることを想定されています。

  • 方法は以下の通りです。

    1. ロギング関連機能を導入したいCanvasに本アセットの log ワークスペースと同様のものを配置する。

    2. アプリケーションのコードのログを取りたい箇所に、ロギングのコードを記述する。例えば、下記のように記述する。

      import os
      import logging
      from opensearch_logger import OpenSearchHandler

      logger = logging.getLogger(__name__)
      logger.setLevel(level=logging.DEBUG)

      openSearchHandler = OpenSearchHandler(
      index_name="python-logs",
      hosts=[f"{os.environ['LOG_ADDRESS']}:{os.environ['LOG_PORT']}"],
      use_ssl=False,
      raise_on_index_exc=True,
      )
      logger.addHandler(openSearchHandler)

      logger.info("log message")

      なお、 opensearch-logger を、 pip install opensearch-logger 等により使用できるようにする必要がある。

      また、 上記コード中の LOG_ADDRESSLOG_PORT を、該当のSideApp等でEnvironment variablesとして設定する必要がある。それぞれの内容は下記。

      • LOG_ADDRESS : {OpenSearch SideAppが存在するワークスペース名}-{OpenSearch SideAppのID}log ワークスペースの内容を変更していない場合は、値を log-opensearch とする。
      • LOG_PORT : OpenSearchのSideAppで該当プロセスが待ち受けているポート。 log ワークスペースの内容を変更していない場合は、値を 8080 とする。

      その他、必要に応じて app ワークスペースの Dummy log generation app SideAppに設定されたEnvironment variablesとInjectionされた /app/src/app.py を参考にする。

    3. デプロイ後、 単体での動作確認 と同様に、OpenSearchダッシュボードからインデックスパターンやスナップショットの設定を行う。

    4. 再度OpenSearchダッシュボードのメニューのDiscoverを開くと、ログを確認できる。

関連情報