Python のトラブルシューティング

Instana の Python パッケージで発生する可能性のある問題を特定するには、以下の手順を試してみてください。

注:Instana パッケージは完全に自動化されていますが、問題が発生した場合はチケットを提出してください

GitHub リポジトリからの手動インストール

Python パッケージインデックス( PyPI )のリポジトリからインストールする代わりに、次のコマンドを実行することで、 GitHub リポジトリから直接 Instana ( Python )パッケージをインストールすることができます

pip install git+https://github.com/instana/python-sensor@v3.0.1

サポートされるコンポーネント

問題の特定に時間をかけすぎる前に、まずそのコンポーネントがサポートされているかどうかを確認してください。 サポートされているすべてのコンポーネントの一覧は、 Python の「サポートされているコンポーネントとバージョン」ページでご確認いただけます。

ログと環境変数

デフォルトでは、このパッケージは問題が発生したかどうかを示すメッセージのみをログに記録します。 より詳細なロギング出力が必要な場合は、INSTANA_DEBUG 環境変数を設定します。 この環境変数により、Instana gem でデバッグ・レベルのロギングが有効になります。

ログの出力は、他の方法でも制御できます。 詳細については、 「 Python の設定」 を参照してください。

モニタリングの問題

Instana の Python センサーでは、次のような監視上の問題が発生する可能性があります:

Python センサーがインストールされない

監視対象の種類: python_sensor_not_installed

Python プロセスは、 Instana自動インスツルメンテーションに対応していないプラットフォーム上で実行されており、このプロセスのインスツルメンテーションには、「 コード変更なしで有効化 」および 「コード変更を伴って有効化 」のいずれの方法も使用されていません。

一般的な問題領域

以下のような問題が頻繁に発生します:

Python ダッシュボードにプロセスが表示されない

  1. Instana のホストエージェントのログを確認し、この Python プロセスに関連するメッセージがないか確認してください。

    多くの Python プロセスは、自動的にリモート監視されます。 この監視が不可能な場合、ホストエージェントは問題が発生したことを示すメッセージをログに記録することがあります。

  2. お使いの環境がサポート対象であることを確認し、サポート対象の Python のバージョンを実行していることを確認してください

    問題の特定に時間をかけすぎる前に、まず対象のコンポーネントと環境がサポートされていることを確認してください。 サポートされているすべてのコンポーネントの一覧は、 Python の「サポートされているコンポーネントとバージョン」 に記載されています。

  3. インストール・ステップの検証

    このプロセスが AutoTrace のWebhookを通じて、あるいは手動で監視対象に追加されたかを確認してください。

    プロセスが AutoTrace のWebhookを通じて監視されている場合は、 前提条件が満たされており、 Webhook が正常に動作していることを確認してください。

    手動の場合は、 手動インストールの手順 に正しく従っていることを確認してください。

  4. Instana の Python パッケージがインストールされており、アプリケーションから利用可能であることを確認する

    確認するには、 Pythonrequirements.txt アプリケーションのファイル内で instana を探してください。

    あるいは、 Python のアプリケーション環境から ` pip list` を実行すると、 Python アプリケーションで利用可能なすべての Python パッケージの一覧が表示されます。 Instana の Python パッケージがそのリストに含まれていることを確認してください。

  5. Instana パッケージが最新バージョンであることを確認してください。

    リリースされた最新バージョンはPyPIで確認できます。

    では requirements.txt、 Instana Python パッケージの最新バージョンが、例えば のような名前と共に記載されている instana==x.x.xことを確認してください。 pip list を実行することによっても、生成されたリストにバージョン番号が表示されます。

  6. アプリケーションログの出力に「 Instana 」という記述があることを確認してください。

    アプリケーションまたはコンテナのログには、常に次のような起動メッセージが含まれている必要があります。 Stan is on the scene. Starting Instana instrumentation version x.x.x

    このメッセージが表示されない場合は、パッケージがインストールされていないか、手動でのインストール手順が正しく実行されていない可能性があります。

  7. デバッグ出力を有効にし、アプリケーションまたはコンテナのログを再度確認してください。

    Python プロセスに対して環境変数 INSTANA_DEBUG=true を設定し、アプリケーション・ログまたはコンテナー・ログを再確認します (ステップ 6 と同じ)。

    Instana に関連するエラーメッセージが表示されていないか、特に注意して確認してください。

  8. コンソールから冗長モードで Python アプリケーションをブートしてみてください。

    起動方法の例は、主に使用する Python アプリケーションによって異なります。 例えば、Python アプリケーションが app.py に含まれている場合、以下のコマンドを実行できます。

    export INSTANA_DEBUG=true
    python app.py
    

    「 Python 」アプリケーションの出力に、 Instana に関連するエラーメッセージが表示されていないか、特に注意して確認してください。

  9. サポート・チケットを提出します。

各手順を確認しても、 Python のプロセスが Instana のダッシュボードに表示されない場合は、 チケットを発行してください

サポートチケットには、以下の内容を記載してください:

  1. プラットフォーム、Python のバージョン、使用中のフレームワークなど、環境の詳細。
  2. これまでのすべての検証の概要。

Python アプリケーションでのトレースの欠落

  1. サポート対象バージョン 」ページを参照し、使用中のフレームワークやライブラリがサポートされていることを確認してください。

  2. 申請プロセスが、 Instana のダッシュボード上で、該当するホストの下に表示されていることを確認してください。

    アプリケーションが Instana のダッシュボードに表示されない場合は、前のセクションを参照してください。

  3. Python アプリケーション・プロセスの INSTANA_DEBUG=true 環境を設定し、プロセスを再始動します。

    この環境変数を設定すると、 Python アプリケーションプロセスから、次のようなログ出力が表示されるはずです:

    DEBUG instana: initializing agent
    INFO instana: Stan is on the scene.  Starting Instana instrumentation version: 1.22.1
    DEBUG instana: initializing fsm
    DEBUG instana: Instrumenting asyncio
    DEBUG instana: Instrumenting aiohttp client
    DEBUG instana: Instrumenting aiohttp server
    DEBUG instana: Instrumenting asynqp
    DEBUG instana: Instrumenting cassandra
    DEBUG instana: Instrumenting couchbase
    DEBUG instana: Instrumenting flask (without blinker support)
    DEBUG instana: Instrumenting gevent: gevent not detected or loaded.  Nothing done.
    DEBUG instana: Instrumenting grpcio
    DEBUG instana: Instrumenting tornado client
    DEBUG instana: Instrumenting tornado server
    DEBUG instana: Instrumenting logging
    DEBUG instana: Instrumenting pymysql
    DEBUG instana: Instrumenting psycopg2
    DEBUG instana: Instrumenting redis
    DEBUG instana: Instrumenting sqlalchemy
    DEBUG instana: Instrumenting suds-jurko
    DEBUG instana: Instrumenting urllib3
    DEBUG instana: Instrumenting django
    DEBUG instana: Instana host agent found on localhost:42699
    DEBUG instana: Attempting to make an announcement to the agent on localhost:42699
    DEBUG instana: Spawning metric & span reporting threads
    DEBUG instana:  -> Metric reporting thread is now alive
    DEBUG instana:  -> Span reporting thread is now alive
    DEBUG instana: Announced pid: 34287 (true pid: 34287).  Waiting for Agent Ready...
    DEBUG instana: Instrumenting pymongo
    DEBUG instana: uwsgi hooks: decorators not available: likely not running under uWSGI
    INFO instana: Instana host agent available. We're in business. Announced pid: 34287 (true pid: 34287)
    DEBUG instana: Sending process snapshot data
    

    予期されるコンポーネントがこのリストに正しく表示されているかどうか確認してください。

  4. 応答ヘッダー内の要求コンテキスト・ヘッダーをチェックします

    curl または wget を使用してアプリケーションに対して要求を実行し、アプリケーションから返される応答ヘッダーを確認します。

    たとえば、``オプション -i はレスポンスヘッダーを curl 返します:

    curl -i http://127.0.0.1:8000/
    
    HTTP/1.1 200 OK
    Date: Wed, 10 Jun 2020 08:55:25 GMT
    Server: WSGIServer/0.2 CPython/3.6.9
    Content-Type: text/html; charset=utf-8
    X-Instana-T: 495b8301e86286c4
    X-Instana-S: 495b8301e86286c4
    X-Instana-L: 1
    Server-Timing: intid;desc=495b8301e86286c4
    Connection: close
    

    出力には、 X-Instana-S、、および X-Instana-LX-Instana-T のヘッダーが表示されているはずです。

    出力にこれらのヘッダーが表示された場合、使用中の時間範囲がこのリクエストが行われた期間をカバーしていることを前提として、Query Analyze で trace.id equals 495b8301e86286c4 この特定のトレースをフィルタを使用して検索することができます。

  5. サポート・チケットの提出

サポートされているフレームワークまたはコンポーネントのいずれかを実行していて、前のステップの X-Instana-TX-Instana-S、および X-Instana-L 応答ヘッダーが表示されない場合は、 サポート・チケットをファイルします。` ` `

サポート・チケットに以下を添付します。

  1. アプリケーションの requirements.txt、または使用中の Python パッケージのリスト (pip list からの出力)
  2. ステップ 2 のアプリケーション・エンティティーへのダッシュボード・リンク
  3. ステップ 3 の出力
  4. ステップ 4 の出力

トレースを実行すると、 Python プロセスが「新しいスレッドを開始できません」というメッセージとともにクラッシュします

Python アプリケーションがトレースによって異常終了し、 RuntimeError: can't start new thread メッセージがアプリケーション・ログに表示される場合、最も可能性の高い原因は、アプリケーションに権限を付与する必要があることです。 トレースおよびスレッド開始許可について詳しくは、 トレースに関する注と制限を参照してください。

AutoTrace により Python プロセスが異常終了する

  1. サポート・チケットの提出

    AutoTrace Webhook が Python プロセスをクラッシュさせている場合、チケットを提出してください

  2. 特定のプロセスの AutoTrace Webhook インスツルメンテーションを停止します。

    AutoTrace のWebhook用にリソースにラベルを付ける方法の詳細については、 InstanaAutoTrace -webhook を参照してください。 また、 AutoTrace のWebhookを設定して、 リソースのネームスペース全体を無視するようにすることもできます。 さらに、 Webhook 内で「 Python 」トレーサーを完全に無効にすることもできます。 このステップは、クラッシュの根本原因が特定されて修正されるまでの一時的な回避策です。

  3. 手動インストール方式の使用

    その間に、 Python の可視性のために 手動インストール方式 を使用することもできます。

AUTOWRAPT_BOOTSTRAP、gevent、および RecursionError

gevent Python の標準ライブラリの多くはモンキーパッチが適用されており、その gevent要件の一つとして、ブートプロセスの可能な限り早い段階でモンキーパッチを適用することが挙げられます。

コード変更なしで有効化するインストール方法(環境 AUTOWRAPT_BOOTSTRAP 変数を使用)または AutoTrace Webhook を利用しており、かつ Instana Python に対応 gevent したTracerのバージョンが 2.5.0 より古い場合、以下のエラーが発生する可能性があります:

RecursionError: maximum recursion depth exceeded while calling a Python object
[Previous line repeated 212 more times]
super(SSLContext, SSLContext).options.__set__(self, value)

このエラーは、 Pythoninstana パッケージが他のどのパッケージ(``でさえ gevent)よりも先に読み込まれる autowrapt ために発生します。

この場合は、 Instana、 Python、Tracer 2.5.0 以降を使用するか、 手動インストール方法に切り替えてください(コードに を import instana 追加します)。

AUTOWRAPT_BOOTSTRAP、Django、およびgeventの設定が不適切です

コード変更なしで有効化するインストール方法(環境 AUTOWRAPT_BOOTSTRAP 変数を使用)を利用する場合、または AutoTrace のWebhookと、 Instana、 Python、Tracer 2.5.0 以降のバージョ geventDjango ンを使用するパッケージを利用する場合、以下のエラーが発生する可能性があります:

django.core.exceptions.ImproperlyConfigured: Requested settings, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

次に、 Django のドキュメントに記載されている通り、自動トレースが開始される前に 環境 DJANGO_SETTINGS_MODULE 変数が設定されていることを確認してください。 自動トレースが開始される前に環境 DJANGO_SETTINGS_MODULE 変数を設定しても不十分な場合は、パッケージの有効化における「 コードの変更による有効化 」という方法を使用できます。

Instana への移行 AutoTrace webhook

Instana 」 AutoTrace の Webhook は、 Instana によって監視されている Python アプリケーションの自動計測において、現在サポートされている方法となっています。

AutoTrace のWebhookへ完全に移行するには、アプリケーションから以下の要素を削除する必要があります:

  1. Instana の Python パッケージ

    Instana ( AutoTrace )のWebhookは、アプリケーション用の Instana ( Python )パッケージを個別に管理します。 あなたやあなたの組織が手動でインストールする必要はありません。

    必ず、 Pipfilerequirements.txtまたは から instanavirtualenvPython パッケージを削除してください。

    OpenTracing や API への呼び出しを行う場合は、代わりに明示的に opentracing インポートし、そのパッケージに対して呼び出しが行われていることを確認する必要があります(例: opentracing.tracer.start_active_span)。 Instana は、引き続き結果のトレースを受け取ります。

  2. 環境AUTOWRAPT_BOOTSTRAPを削除する

    この環境変数は、コード変更を必要とせずに Instana Python パッケージをロードするために使用されます。 Instana の AutoTrace Webhookを使用すれば、この環境変数は不要になります。

  3. すべての import instana 呼び出しを削除します。

    Python AutoTrace Python アプリケーションに、 Instana Python パッケージを自動的に適用します。 Instana Python パッケージの手動インポートを削除できます。