Python コレクターの設定

Instana Python コレクターのインストールが完了すれば、監視のために手動で設定を行う必要はありません。 Python のプロセスに関連する主要なメトリクスと分散トレースの収集が自動的に開始されます。 ただし、個々のコンポーネントは、ご自身の具体的な要件に合わせて設定することができます。

一般構成

Instana Python パッケージは、Python モニターのための完全ノータッチ自動ソリューションとして使用されることを目的としていますが、必要に応じて完全に構成可能です。 このパッケージの設定には、以下のオプションが利用可能です。

AutoProfile を有効にする

AutoProfile™ は、自動的かつ継続的にプロセス・プロファイルを生成して、Instana に報告します。 プロファイルの詳細については、「 プロファイルの分析」 セクションをご覧ください。

AutoProfile を有効にするには、環境変数 INSTANA_AUTOPROFILE=true を設定します。 AutoProfile 手動インストールでのみサポートされています。 Instana センサーがメインスレッドで初期化されていることを確認してください。

ホストとエージェント間の通信の確立

Instana ( Python )パッケージは、IP 127.0.0.1 経由で Instana エージェントと通信を試み、コンテナ化された環境では、フォールバックとしてホストのデフォルトゲートウェイを経由して通信を試みます。 これらの場所のいずれにもエージェントが存在しない場合は、環境変数を使用して、 Instana のホストエージェントを検索する場所を設定できます。

環境変数は、実行中のプロセスの環境内で設定する必要があります。

export INSTANA_AGENT_HOST = '127.0.0.1'
export INSTANA_AGENT_PORT = '42699'
 

関連資料:

プロセス名の設定

INSTANA_PROCESS_NAME を使用して、Python プロセスを表すインフラストラクチャー・エンティティーのカスタム・ラベルを設定します。

パッケージ構成

Instana パッケージには、各種コンポーネントの構成を管理するランタイム構成モジュールが含まれています。

注: パッケージの改良に伴い、オプションが追加されています。
from instana.configurator import config

# To enable tracing context propagation across Asyncio ensure_future and create_task calls
# Default is false
config['asyncio_task_context_propagation']['enabled'] = True
 

自動インスツルメンテーションの無効化

この Instana パッケージには、パッケージのロード時に初期化される自動インスツルメンテーションが含まれています。 このインスツルメンテーションにより、Instana ダッシュボードに分散トレース情報が提供されます。 自動インスツルメンテーションの完全な一覧については、 「対応バージョン 」のドキュメントを参照してください。

環境変数 を設定することで、自動インスツルメンテーション INSTANA_DISABLE_AUTO_INSTR (トレース)を無効にできます。これにより、tracerに組み込まれているインスツルメンテーションの読み込みが抑制されます。

export INSTANA_DISABLE_AUTO_INSTR="true"
 

エントリ・スパンなしでルート・エグジット・スパンを追跡する

デフォルトでは、 Instana Python Tracer は、アクティブなエントリスパンを持つ終了スパンのみをキャプチャします。 ただし、状況によっては、エントリスパンが存在しない状態で発生するエクシッツパンを追跡する必要がある。

Python Tracer でスタンドアロンの終了スパンを追跡するように設定するには、次のように環境 INSTANA_ALLOW_ROOT_EXIT_SPAN 変数を true または 1 に設定します

export INSTANA_ALLOW_ROOT_EXIT_SPAN=1
 

この機能は、次のような場面で役立ちます:

  • サポートされていないメッセージングライブラリからの受信メッセージ。
  • raw Transmission Control Protocol ( TCP ) や WebSocket など、サポートされていないプロトコルを通じて行われるリクエスト。
  • 他のアプリケーションによって内部的に開始されるスケジュールされたジョブ。
  • Python スクリプトの実行。

Kubernetes

このプラットフォームでは、特定の状況下において、 Python センサーが Instana ホストエージェントを自動的に検出して接続できない場合があります。 この問題を解決するには、ドキュメントの 「 Kubernetes のエージェントのネットワークアクセスを設定する」 のセクションを参照してください。

関連資料:

フレームワーク

Instana の Python コレクターを設定することで、以下のフレームワークからデータを監視および収集することができます:

Django (手動)

環境 AUTOWRAPT_BOOTSTRAP=instana 変数が設定されると、Djangoフレームワークが自動的に検出され、設定が行われる必要があります。 何らかの理由で Django の手動インスツルメントを行う場合、または手動インスツルメントが必要な場合には、代わりに settings.py の MIDDLEWARE リストに instana.instrumentation.django.middleware.InstanaMiddleware を追加できます。

import os
import instana

# ... <snip> ...

MIDDLEWARE = [
    'instana.instrumentation.django.middleware.InstanaMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
 

Pyramid

注:Instana、 Python、 3.0.0 以降、Pyramid のインストルメンテーションは自動的に行われます。

バージョン 1.22.0 から 2.5.3 にかけて、 Instana の Python パッケージには、Pyramidのマニュアルサポートが含まれています。 Pyramidベースのアプリケーションに可視性を追加するには、以下の手順を実行します:

  1. パッケージ instana が仮想環境またはコンテナに追加され requirements.txt 、インストールされていることを確認してください。
  2. Pyramidアプリケーションのファイル __init__.py の先頭に import instana 以下を追加してください。
  3. 設定に「 Instana 」計測用Tweenを追加してください。
import instana

with Configurator(settings=settings) as config:
    # ...
    config.include('instana.instrumentation.pyramid.tweens')
    # ...
 

次の画像は、Pyramidの設定における Instana のインスツルメンテーションの例を示しています:

Pyramid

production.ini 構成で pyramid.tweens オプションを設定している場合は、instana.instrumentation.pyramid.tweens.InstanaTweenFactory がこのリストの最初のエントリーであることを確認してください。

pyramid.tweens =
    instana.instrumentation.pyramid.tweens.InstanaTweenFactory
    # other tweens
 

WSGIおよびASGIスタック

Instana ( Python )パッケージには、準拠したスタックに追加可能なWeb Server Gateway Interface(WSGI)およびAsynchronous Server Gateway Interface(ASGI)ミドルウェアが含まれています。 さまざまなスタックで自動化機能が利用可能ですが、 Instana による自動サポートがまだ提供されていないスタックについては、手動での追加も可能です。

「 Instana 」パッケージ( Python )をインストールした後、次のコマンドを実行してください:

import instana

from instana.middleware import InstanaWSGIMiddleware
# or
from instana.middleware import InstanaASGIMiddleware

# Wrap the wsgi app in Instana middleware (InstanaWSGIMiddleware)
wsgiapp = InstanaWSGIMiddleware(MyWSGIApplication())
 

Instana 現在、主要なフレームワークすべてを対象に自動テストの自動化に取り組んでいますが、それまでの間は、 Instana から、まだ自動サポートが提供されていないスタック向けの具体的なクイックスタートガイドをご確認ください。

Bottle WSGI

Bottle WSGI をインストルメントするには、以下のコマンドを使用します:

# Import Instana and the Instana WSGI middleware wrapper
import instana
from instana.middleware import InstanaWSGIMiddleware

from bottle import Bottle, run

app = Bottle()

@app.route('/hello')
def hello():
    return "Hello World!"

# Wrap the application with the Instana WSGI Middleware
app = InstanaWSGIMiddleware(app)

# Alternative method for reference
# app = InstanaWSGIMiddleware(bottle.default_app())

run(app, host='localhost', port=8080)
 

CherryPy WSGI

CherryPy のWSGIをインストルメントするには、以下のコマンドを使用してください:

import cherrypy

# Import Instana and the Instana WSGI middleware wrapper
import instana
from instana.middleware import InstanaWSGIMiddleware

# My CherryPy application
class Root(object):
    @cherrypy.expose
    def index(self):
        return "hello world"

cherrypy.config.update({'engine.autoreload.on': False})
cherrypy.server.unsubscribe()
cherrypy.engine.start()

# Wrap the application with the Instana WSGI Middleware
wsgiapp = InstanaWSGIMiddleware(cherrypy.tree.mount(Root()))
 

この例では、uwsgiをウェブ・サーバーとして使い、次のように起動する:

uwsgi --socket 127.0.0.1:8080 --enable-threads --protocol=http --wsgi-file mycherry.py --callable wsgiapp -H ~/.local/share/virtualenvs/cherrypyapp-C1BUba0z
 

~/.local/share/virtualenvs/cherrypyapp-C1BUba0z は、pipenv からローカル virtualenv へのパスです。

Falcon WSGI

Falconフレームワークは、WSGIラッパーを通じて次のようにインストルメンテーションすることも可能です:

import falcon

# Import Instana and the Instana WSGI middleware wrapper
import instana
from instana.middleware import InstanaWSGIMiddleware

app = falcon.API()

# ...

# Wrap the application with the Instana WSGI Middleware
app = InstanaWSGIMiddleware(app)
 

では、例 uwsgi --http :9000 --enable-threads --module=myfalcon.app として を使用してスタックを起動します

Gevent ベースのアプリケーション

Instana 1.4gevent 以降をベースとしたアプリケーションに対応しています。

Instana Python パッケージを手動でインポートする場合は、gevent import とモンキー・パッチが最初に実行されるようにしてください。

    from gevent import monkey
    monkey.patch_all()
    import instana # <--- after the gevent monkey patching of stdlib
 
注:Instana、 Python、Tracer、 2.5.0 以前のバージョンでは、これらの geventパッケージをベースにしたアプリケーションは、パッケージの有効化において(環境 AUTOWRAPT_BOOTSTRAP 変数を使用する)「 コード変更なしで有効化 」という方法を使用してはなりません。 前述の通り、この方法は、が gevent要求する一階のモンキーパッチングの要件を満たしていないため、機能しません。 その場合は、 「コードの変更による有効化」 という方法を使用してください。

Instana Python Tracer 2.5.0 から、 AutoTrace のWebhookまたは「 コード変更なしで有効化する 」方法を使用すると、トレーサーは自動的に処理を実行します monkey.patch_all() 。 環境 INSTANA_GEVENT_MONKEY_OPTIONS 変数を設定することで、このモンキーパッチングを微調整できます。 このカンマ区切りのリストを使用すると、geventの gevent.monkey.main 関数 MONKEY OPTIONS と同様に、モンキーパッチングの対象とするモジュールや除外するモジュールを指定できます。

以下の例は、モンキーパッチング用のモジュールをカスタマイズするために利用可能なオプションを示しています:

export INSTANA_GEVENT_MONKEY_OPTIONS='--no-socket, --dns, --no-time, --select, --no-ssl'
 
export INSTANA_GEVENT_MONKEY_OPTIONS='no-socket, dns, no-time, select, no-ssl'
 
export INSTANA_GEVENT_MONKEY_OPTIONS='no-socket,dns,no-time,select,no-ssl'
 

もし と gevent および Instana の自動トレース Django 機能を併用する場合は、自動トレースが開始される前に 環境 DJANGO_SETTINGS_MODULE 変数を設定しておくようにしてください。 この DJANGO_SETTINGS_MODULE 環境変数に関する詳細については、 Django のドキュメントを参照してください。

このレベルのカスタマイズではまだ不十分な場合は、Activating with code changes というパッケージの有効化方法を使います。

ツール

Instana の Python コレクターを設定することで、さまざまなツールからのデータを監視・収集することができます。

Web サーバー

以下の設定を使用して、さまざまなWebサーバーを監視することができます:

uWSGI Webサーバー

uwsgi で が有効になっている enable-threads ことを確認してください。

スレッド数

この Python の計測機能は、プロセスのメトリクスを定期的に収集・報告するための軽量なバックグラウンドスレッドを作成します。 uWSGI では、デフォルトで GIL とスレッド処理が無効になっています。 uWSGI, で動作するアプリケーションに計測機能を追加する場合は、コマンド --enable-threads (または enable-threads = true INI 形式)でスレッドを有効にしてください。 詳細については、『 uWSGI 』のドキュメントを参照してください。

Gunicorn Webサーバー

Gunicorn で実行されるアプリケーションに計測機能を追加するには、引数として を --preload 指定してください。

プリロード

この Python の計測機能は、プロセスのメトリクスを定期的に収集・報告するための軽量なバックグラウンドスレッドを作成します。 デフォルトでは、ワーカーがGunicornでフォークされた後、アプリケーションコードが処理される。 Gunicorn で実行されるアプリケーションに計測機能を追加したい場合は、コマンド --preload を指定してプリロードを有効にしてください。 詳しくはGunicornのドキュメントをご覧ください。

Gunicorn の例:コマンドライン

Gunicornをプリロードして実行するには、この例に示されている次のコマンドを使用してください:

gunicorn -w 4 --preload "file:app"
 

Gunicorn の例:設定ファイル

設定ファイルを使ってGunicornを使うには、以下の変数を含むPythonファイルを使う。 Gunicornコマンドに'-c file_name.py追加する。

bind = "0.0.0.0:8000"
workers = 4
preload_app = true  # required
 

エンド・ユーザー・モニタリング (EUM)

Instana サーバー側のトレースとブラウザのイベントを連携させる詳細なエンドユーザー監視機能を提供し、サーバーからブラウザに至るまでの全体像を把握できるようにします。

詳細については、エンドユーザー監視ページをご覧ください。

スパンをフィルタリングする

Python Tracer 3.11.0 以降では、スパンをその属性に基づいてフィルタリングすることで、トレースデータの量を削減できます。 この機能により、データ取り込みのコストを最適化できるほか、アプリケーションにとって最も関連性の高いトレースに監視を集中させることができます。

以下の基準に基づいて、スパンを除外または含めるようにフィルタリングルールを設定できます:

  • Span属性 :特定の属性値(例: kafka.topic または redis.command
  • カテゴリ :テクノロジー種別(例: databasesmessaging、 など) protocols
  • 種類 :ライブラリまたはフレームワークの識別子(例: httpまたは kafka
  • 種類 :スパンタイプ(例: entryexit、または) intermediate

スパンフィルタリングの設定

以下のいずれかの方法で、スパンフィルタリングを設定できます。 複数のメソッドが使用される場合、フィルタリングは以下の優先順位に従って適用されます:

環境変数を使用したフィルタリング

以下の環境変数を使用して、スパンフィルタリングルールを設定します:

  • INSTANA_CONFIG_PATH
    INSTANA_CONFIG_PATH=/path/to/your/configuration.yaml
     

    ファイル agent configuration.yaml のパスを指定してください。 ファイルは、「エージェント設定の使用」 に記載されているガイドラインに従う必要があります。

  • INSTANA_TRACING_FILTER_<policy>_<rule-name>_ATTRIBUTES
    INSTANA_TRACING_FILTER_<policy>_<rule-name>_ATTRIBUTES="rule-key;rule-value;match-type"

次の表に、パラメータとその詳細、およびサポートされている値を示します:

パラメーター 説明
<policy> フィルタポリシーの種類
  • EXCLUDE: ルールに一致するスパンは除外されます
  • INCLUDE: ルールに一致するspan要素のみを含める
<rule-name> ルールの一意の識別子(他のルールとの競合を防ぐ)
rule-key フィルタリングの対象となる属性
  • category: テクノロジー企業(databasesmessaging、または protocols
  • kind: スパンタイプ (entry, exit, または intermediate) - type: ライブラリまたはフレームワーク (http, kafka, または redis)
  • attribute: 特定のspan属性(kafka.access, redis.command, または dynamodb.op
rule-value 一致させる値のカンマ区切りリスト
  • kafka.accessの場合: consume, send, produce
  • redis.commandの場合: SET, GET
match-type マッチング戦略
  • strict: 完全一致
  • startswith: 接頭辞一致
  • endswith: 接尾辞一致
  • contains: 部分文字列の一致
# Exclude all HTTP spans
INSTANA_TRACING_FILTER_EXCLUDE_HTTP_ATTRIBUTES="type;http"

# Include only health check endpoints
INSTANA_TRACING_FILTER_INCLUDE_HEALTH_ATTRIBUTES="http.url;/health"

# Exclude all messaging spans
INSTANA_TRACING_FILTER_EXCLUDE_CATEGORY_ATTRIBUTES="category;messaging"

# Include only specific Kafka topic and operations
INSTANA_TRACING_FILTER_INCLUDE_KAFKA_ATTRIBUTES="kafka.topic;topic1;strict|kafka.access;consume,send"

# Exclude all exit spans
INSTANA_TRACING_FILTER_EXCLUDE_KIND_ATTRIBUTES="kind;exit"

エージェント設定を使用したフィルタリング

エージェント configuration.yaml ファイルの セクション tracing.filter でフィルタリングルールを定義します。 この設定では、 YAML 構造を使用して、スパン属性に基づいたフィルタルールを指定します:

tracing:
  filter:
    deactivate: <boolean>
    <policy>: # exclude | include
      - name: <string>
        suppression: <boolean>
        attributes:
          - key: <string> # category | kind | type | span attribute (e.g., kafka.access, http.host)
            values: <list of strings>
            match_type: <string> # strict | startswith | endswith | contains
重要: 1つのポリシー内で複数のフィルタルールを定義できます。 各ルールでは複数の属性を指定でき、ルールが適用されるためにはすべての属性が一致している必要があります。
フィールド 必須 説明 Default
filter はい すべてのフィルタリングルールのルートノード。
deactivate いいえ 設定済みのルールを削除せずにフィルタリングを無効にする機能の切り替え。 フィルタリングが無効になっている場合true false
policy はい フィルタポリシーのタイプ:exclude orinclude
name はい フィルタルールを説明する、人間が読みやすい名前。
suppression いいえ 子スパンを非表示にするかどうかを指定します。 この場合true、すべての子スパンは非表示になります。 「Whenfalse」の子スパンが許可される場合。 「除外」ポリシーにのみ適用されます true
attributes はい このルールが適用されるために、すべて一致しなければならないspan属性のリスト。
key はい Span属性のキー(例:categorytypekind、、、または、やなどのkafka.access 特定のhttp.host属性)。
values はい 一致させる値の一覧。 いずれかの値が一致すれば、その属性は一致したものとみなされます。 ワイルドカードとして使用'*' し、任意の値に一致させます(属性の有無に基づくフィルタリングに便利です)。
match_type いいえ マッチング戦略:strict,startswith,endswith, またはcontains

式の評価

フィルタールールは、記述順に評価されます。 あるスパンがルールに一致した場合、そのルールが適用され、それ以降のルールは評価されません。 フィルタリングが正しく機能するように、ルールを最も具体的なものから最も一般的なものの順に並べ替えてください。

構成の例

tracing:
  filter:
    exclude:
      - name: Exclude all health check endpoints
        attributes:
          - key: http.url
            values: [/health]
            match_type: contains
      - name: Exclude all messaging spans
        attributes:
          - key: category
            values: [messaging]
            match_type: strict
    include:
      - name: Include specific internal health endpoint
        attributes:
          - key: http.url
            values: [/internal/health]
            match_type: strict

前の例では、フィルタリング設定により以下のルールが適用されます:

  • (最初の一致ルール /internal/health )に一致するスパンを含みます
  • (ただし、 /internal/health/health )に一致するスパンは除外する
  • メッセージングカテゴリのすべてのスパンを除外します
  • 以下のエンドポイントを除くすべての /health エンドポイントを除外します /internal/health

エンドポイントを無視する(非推奨)

注: この機能は、 Python Tracer 3.11.0 より非推奨となりました。 代わりにフィルタリングスパンを使用してください。

Python Tracer 3.3.0 以降では、この機能を使用して不要なトレースや呼び出しを除外し、データ取り込みの総量を削減することができます。 たとえば、次のような特定のエンドポイントのトレース redis.getを除外することができます。

この機能は、以下の対応ライブラリで利用可能です:

ライブラリー Instana Python パッケージのバージョン
Redis >= 3.3.0
DynamoDB >= 3.3.0
Kafka >= 3.5.0

ルールのフィルタリング

スパンをフィルタリングするためのルールは以下の通りです:

  • あるスパンが無視されると、その後に続くすべてのスパンも同様に無視されます。
  • ワイルドカードを使用して、すべてのエンドポイント * またはメソッドを無視します。
  • エンドポイントの値( Kafka のトピック名など)は、サービス間で一貫して同じままです。
  • メソッド名は、プログラミング言語や技術によって異なる場合があります。 ご利用のサービスに適したメソッドとエンドポイントを確認するには、 Instana のUIをご参照ください。

以下の Instana のUIスクリーンショットは、設定に適切なメソッドとエンドポイントを特定するための視覚的な参考資料となります:

UIにおける手法とエンドポイント

注: エンドポイントの無視機能は、メソッド名が完全に一致する場合にのみ有効です。 フィルタリング対象として、正しいメソッド名を使用していることを確認してください。 このドキュメントでは、 Kafka - Python パッケージの ` send method` を使用しています。

エンドポイントの除外設定

以下のいずれかのオプションを使用して、エンドポイントの除外を有効にできます:

注: 複数のアプローチが同時に使用される場合、 Python Tracer は、環境変数、コード内設定、エージェント設定の順に優先順位を付けます。

環境変数

サービスごとにエンドポイントをフィルタリングするには、以下の環境変数を使用して、無視するエンドポイントを設定できます:

  • INSTANA_IGNORE_ENDPOINTS_PATH : 外部の YAML ファイルを使用してフィルタリングを設定します。
  • INSTANA_IGNORE_ENDPOINTS : メソッド名のみに基づいてスパンを除外する。
INSTANA_IGNORE_ENDPOINTS_PATH の使用

この環境変数を使用すると、次の例に示すように、外部の YAML ファイルを通じてフィルタリングを設定できます:

INSTANA_IGNORE_ENDPOINTS_PATH=/absolute/path/to/config.yaml
 

前の例では、ファイル config.yaml には絶対パスを指定し、指定された構成構造に従う必要があります。

方法によるフィルタリング

除外したいエンドポイントを指定するには、次の例 INSTANA_IGNORE_ENDPOINTS のように環境変数を設定してください:

tracing:
  ignore-endpoints:
    redis:
      - get
      - type
    dynamodb:
      - query
    kafka:
      - send
 

この設定では、以下のスパンがフィルタリングされます:

  • GET および TYPERedis 用のコマンド
  • QUERY DynamoDB 用のコマンド
  • SEND Kafka およびすべての下流スパンに対するメソッド

メソッドとエンドポイントでフィルタリングする

除外したいエンドポイントを指定するには、次の例 INSTANA_IGNORE_ENDPOINTS のように環境変数を設定してください:

tracing:
  ignore-endpoints:
    kafka:
      - methods: ["consume"]
        endpoints: ["topic1", "topic2"]

      - methods: ["consume", "send"]
        endpoints: ["topic3"]

      - methods: ["*"] # Applied to all methods
        endpoints: ["topic4"]

      - methods: ["consume"]
        endpoints: ["*"] # Applied to all endpoints
 

この設定では、以下のスパンがフィルタリングされます:

  • CONSUME Kafkatopic2 およびすべての下流スパンにおける および topic1 に対するメソッド
  • CONSUME および、 SENDKafkatopic3 およびすべての下流のスパンにおける手法
  • Kafka およびすべての下流のスパンにおける topic4 のすべての (*) メソッド
  • CONSUME Kafka*内のすべてのトピックおよびすべてのダウンストリーム・スパンに対するメソッド

同じ設定ファイル内で、両方のフィルタリングオプション(メソッドのみ、およびメソッドとエンドポイント)を組み合わせて使用することができます。

この構成は、 configuration.yaml エージェントの構造と互換性があります。

INSTANA_IGNORE_ENDPOINTS の使用

この環境変数を使用すると、次の例に示すように、メソッド名のみに基づいてスパンを除外することができます:

INSTANA_IGNORE_ENDPOINTS=redis:get,type
 

この設定では、以下のスパンがフィルタリングされます:

  • GET および TYPERedis 用のコマンド

Redis を完全にフィルタリングするには、以下の設定を使用できます:

INSTANA_IGNORE_ENDPOINTS=redis
 

複数のサービスをフィルタリングするには、以下の設定を使用できます:

INSTANA_IGNORE_ENDPOINTS=redis:get,type;dynamodb:query,scan;kafka:send
 

この設定では、以下のスパンがフィルタリングされます:

  • GET および TYPERedis 内のコマンド
  • QUERY および SCANDynamoDB 内のコマンド
  • SEND Kafka 内のコマンド

コード内設定

コード内設定の手法を用いてエンドポイントを無視するには、以下の設定をファイル src/instana/configurator.py に渡してください:

config["tracing"]["ignore_endpoints"] = { "redis": ["get", "type"] }
 

この設定により、 Redis パッケージに含まれる および TYPE コマンド GET はトレースの対象から除外されます。

Redis パッケージ内のすべてのエンドポイントを無視するには、以下の設定をファイル src/instana/configurator.py に指定してください:

config["tracing"]["ignore_endpoints"] = { "redis": [] }
 

複数のサービスをフィルタリングするには、以下の設定を使用できます:

config["tracing"]["ignore_endpoints"] = {
    "redis": ["get", "type"],
    "dynamodb": ["query", "scan"],
    "kafka": ["send"]
}
 

この設定では、以下のスパンがフィルタリングされます:

  • GET および TYPERedis 内のコマンド
  • QUERY および SCANDynamoDB 内のコマンド
  • SEND Kafka およびすべての下流のスパンにおけるメソッド

次の例は、メソッドとエンドポイントによるフィルタリングを示しています:

config["tracing"]["ignore_endpoints"] = {
    "kafka": [
        { methods: ["consume"], endpoints: ["topic1", "topic2"] },
        { methods: ["send"], endpoints: ["topic3"] }
    ]
}
 

この設定では、以下のスパンがフィルタリングされます:

  • CONSUME Kafkatopic2 およびすべての下流スパンにおける および topic1 に対するメソッド
  • SEND Kafkatopic3 およびすべての下流スパンにおける

同じ設定内で、両方のフィルタリングオプション(メソッドのみ、およびメソッドとエンドポイント)を使用できます。

エージェントの構成

エージェントの設定を使用してエンドポイントを除外するには、エージェント configuration.yaml のファイルに設定 ignore-endpoints を追加してください。 詳細については、 「エンドポイントの無視」 のセクションを参照してください。

スパンの無効化の設定

Python Tracer 3.7.0 以降では、 Instana Python センサーのスパン無効化機能を使用して、スパンを無効にすることができます。 「span無効化」機能を使用すると、アプリケーション内でのspanの生成を完全に無効にすることができます。 この機能は、次のような場面で役立ちます:

  • アプリケーションによって生成されるスパン数を減らしたいと考えています。
  • 監視の対象外となる操作があります。
  • アプリケーションのパフォーマンスに関しては、他の部分に注力したいと考えています。

サポートされるカテゴリー

カテゴリとは、 共通の技術やプロトコルによってグループ化されたライブラリの集合です。 現在、スパンの無効化は「 logging カテゴリ」に対してのみ可能です。

構成オプション

次のいずれかのオプションを使用して、span要素を無効にすることができます:

オプション 1: YAML の設定を使用する

以下の指定を使用して、環境 INSTANA_CONFIG_PATH 変数をローカルの YAML 設定ファイルに設定します:

tracing:
  disable:
    - <category_or_type>: <boolean>

この disable キーには、カテゴリまたは type 名前のリストを指定できます。 「 type 名前」とは、 Instana Python Tracer でサポートされているフレームワーク、ライブラリ名、または計測対象名の参照を指します。 個々の type 設定は、定義順序にかかわらず、親 category の設定よりも優先されます。 このアプローチにより、より広範なカテゴリが無効化されている場合でも、特定の計測機能を有効にしておくといったきめ細かな制御が可能になります。 次の設定例では、 Redis 用のものを除き、すべてのデータベーススパンを無効にします:

com.instana.tracing:
  disable:
    - databases: true
    - redis: false

方法 2:環境変数の使用

次の例に示すように、環境変数 INSTANA_TRACING_DISABLE を使用してスパンを無効にすることができます:

# Disable Redis spans
INSTANA_TRACING_DISABLE=redis

# Disable all logging spans
INSTANA_TRACING_DISABLE=logging

# Disable multiple technologies
INSTANA_TRACING_DISABLE=redis,logging

オプション 3:エージェントの設定

エージェントの設定を使用して Redis のspanを無効にするには、エージェントの configuration.yaml ファイルに以下の disable 設定を追加します:

com.instana.tracing:
  disable:
    - redis: true

エージェントの設定を使用してカテゴリのスパン logging を無効にするには、エージェントの configuration.yaml ファイルに以下の disable 設定を追加します:

com.instana.tracing:
  disable:
    - logging: true

スタックトレースの設定

デフォルトでは、 Instana Python Tracer は、キャプチャされた EXIT すべてのスパンについて、直近の 30 フレームのスタックトレースをキャプチャします。 この値は、必要に応じて増減させることができます。

注: スパン ENTRY については、通常、有用なアプリケーションレベルの情報が含まれていないため、スタックトレースは収集されません。

Python Tracer 3.10.0 以降では、スタックトレースの取得に関して以下の 2 つの設定を行うことができます:

  • スタックトレースの長さ :キャプチャするスタックトレースのフレーム数。
    • 指定可能な値:1~40
    • デフォルト値: 30
  • スタックトレースのレベル :スタックトレースがどのように取得されるか。
    • 対応する値:
      • all: すべての終了スパンについてスタックトレースを収集します(デフォルト)。
      • error: エラーが発生したスパンについてのみスタックトレースを収集します。
      • none: スタックトレースは収集されません。
注: エラーが発生したスパンについては、スタックトレースの長さにかかわらず完全なスタックトレースが収集されるため、根本原因を確実に特定できます。

スタックトレースの取得は、以下のいずれかのオプションを使用して設定できます:

エージェントおよび YAML の設定方法による、テクノロジー固有のスタックトレースの取得を設定するには、 「テクノロジー固有の設定」 を参照してください。

環境変数の使用

以下の例に示すように、環境変数 ` INSTANA_STACK_TRACEINSTANA_STACK_TRACE_LENGTH $STACKTRACE` および `$STACKTRACE_LENGTH` を使用して、スタックトレースをフィルタリングできます

  • エラーが発生したスパンについてのみスタックトレースをキャプチャする: この設定を使用すると、エラーが発生した場合にのみスタックトレースが収集されます。
    # Captures stack trace only for erroneous spans.
    INSTANA_STACK_TRACE=error
  • スタックトレースの収集を無効にする: この設定を使用すると、スタックトレースの収集を完全に無効にできます。
    # Disable collection of stack trace.
    INSTANA_STACK_TRACE=none
  • すべてのスパンについてスタックトレースを取得する: この設定を使用すると、すべてのスパンについてスタックトレースが収集されます。
    # Captures stack trace for all spans.
    INSTANA_STACK_TRACE=all
  • スタックトレースのフレーム数を制限する: この設定を使用すると、キャプチャされるスタックトレースのフレーム数を制限できます。
    # Limits capture of stack trace frames to 25.
    INSTANA_STACK_TRACE_LENGTH=25
     

YAML の設定を使用する

以下の指定を使用して、環境 INSTANA_CONFIG_PATH 変数をローカルの YAML 設定ファイルに設定します:

tracing:
  global:
    stack-trace: <string>
    stack-trace-length: <int>

エージェント設定の使用

エージェント設定によるスタックトレースの取得を設定するには、次の例に示すように、エージェント設定ファイルの セクション com.instana.tracing.global でパラメータを定義します

com.instana.tracing:
  global:
    stack-trace-length: 15
    stack-trace: 'error' 

技術固有の設定

Instana Python Tracer では、グローバル設定を上書きするテクノロジー固有の設定が可能です。 以下の指定を使用することで、設定を微調整し、スタックトレースの取得を制御できます:

com.instana.tracing:
  global:
    stack-trace: <string>
    stack-trace-length: <int>

  <technology>:
    stack-trace: <string>
    stack-trace-length: <int>

この設定では、` <technology> key` に対して以下の値がサポートされています:

  • kafka
  • rabbitmq
  • aioamqp
  • aiohttp
  • urllib3 (および urllib3 の両 requests 方のスパンについて)
  • httpx
  • log
  • redis
  • mysql
  • postgres
  • mongo
  • pymongo
  • cassandra
  • couchbase
  • dynamodb
  • sqlalchemy
  • boto3
  • s3
  • rpc

次の例では、すべてのスパンについてスタックトレースを取得し、グローバル設定として25フレームに制限していますが、 Kafka の場合、エラーが発生したスパンのみについて完全なスタックトレースを取得します:

com.instana.tracing:
  global:
    stack-trace: all
    stack-trace-length: 25

  kafka:
    stack-trace: error

Kafka のトレース相関ヘッダーの設定

トレース相関を使用すると、スパンは分散して作成されたスパン間の関係を維持します。 たとえば、トレース相関が有効になっている場合、プロデューサー・スパンとコンシューマー・スパンの両方でトレースIDは同一になります。 トレースの相関が無効になっている場合、プロデューサーとコンシューマーのスパンは異なるトレースIDを持つため、両者の間には相関関係が生まれません。

Kafka のトレース相関機能を完全に無効にするには、以下の設定オプションのいずれかを使用できます:

  • 環境変数:環境変数を INSTANA_KAFKA_TRACE_CORRELATION に設定します false

  • システムプロパティ:以下の設定を使用してください:

    config["tracing"]["kafka"] = { "trace_correlation": False }
     
  • エージェントの設定: Instana ホストエージェントのレベルで、 Kafka トレースの相関設定を行います。

詳細については、 「 Kafka ヘッダーの移行」 を参照してください。

特定のプロセスの監視

Instana コマンドラインに, uwsgi, または python という gunicorn名前が含まれるプロセスを自動的に監視します。 エージェントの設定ファイルに特定のプロセス名を指定することで、コマンドライン上では異なる名前で実行されている Python アプリケーションを監視することができます。 詳細については、 エージェント設定ファイルを使用したホストエージェントの設定方法をご覧ください。