Python のトラブルシューティング
Instana の Python パッケージで発生する可能性のある問題を特定するには、以下の手順を試してみてください。
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 アプリケーションを適切に監視するには、 手動インストール手順に従ってください。
一般的な問題領域
以下のような問題が頻繁に発生します:
Python ダッシュボードにプロセスが表示されない
Instana のホストエージェントのログを確認し、この Python プロセスに関連するメッセージがないか確認してください。
多くの Python プロセスは、自動的にリモート監視されます。 この監視が不可能な場合、ホストエージェントは問題が発生したことを示すメッセージをログに記録することがあります。
お使いの環境がサポート対象であることを確認し、サポート対象の Python のバージョンを実行していることを確認してください
問題の特定に時間をかけすぎる前に、まず対象のコンポーネントと環境がサポートされていることを確認してください。 サポートされているすべてのコンポーネントの一覧は、 Python の「サポートされているコンポーネントとバージョン」 に記載されています。
インストール・ステップの検証
このプロセスが AutoTrace のWebhookを通じて、あるいは手動で監視対象に追加されたかを確認してください。
プロセスが AutoTrace のWebhookを通じて監視されている場合は、 前提条件が満たされており、 Webhook が正常に動作していることを確認してください。
手動の場合は、 手動インストールの手順 に正しく従っていることを確認してください。
Instana の Python パッケージがインストールされており、アプリケーションから利用可能であることを確認する
確認するには、 Python
requirements.txtアプリケーションのファイル内でinstanaを探してください。あるいは、 Python のアプリケーション環境から `
pip list` を実行すると、 Python アプリケーションで利用可能なすべての Python パッケージの一覧が表示されます。 Instana の Python パッケージがそのリストに含まれていることを確認してください。Instana パッケージが最新バージョンであることを確認してください。
リリースされた最新バージョンはPyPIで確認できます。
では
requirements.txt、 Instana Python パッケージの最新バージョンが、例えば のような名前と共に記載されているinstana==x.x.xことを確認してください。pip listを実行することによっても、生成されたリストにバージョン番号が表示されます。アプリケーションログの出力に「 Instana 」という記述があることを確認してください。
アプリケーションまたはコンテナのログには、常に次のような起動メッセージが含まれている必要があります。
Stan is on the scene. Starting Instana instrumentation version x.x.xこのメッセージが表示されない場合は、パッケージがインストールされていないか、手動でのインストール手順が正しく実行されていない可能性があります。
デバッグ出力を有効にし、アプリケーションまたはコンテナのログを再度確認してください。
Python プロセスに対して環境変数
INSTANA_DEBUG=trueを設定し、アプリケーション・ログまたはコンテナー・ログを再確認します (ステップ 6 と同じ)。Instana に関連するエラーメッセージが表示されていないか、特に注意して確認してください。
コンソールから冗長モードで Python アプリケーションをブートしてみてください。
起動方法の例は、主に使用する Python アプリケーションによって異なります。 例えば、Python アプリケーションが
app.pyに含まれている場合、以下のコマンドを実行できます。export INSTANA_DEBUG=true python app.py「 Python 」アプリケーションの出力に、 Instana に関連するエラーメッセージが表示されていないか、特に注意して確認してください。
サポート・チケットを提出します。
各手順を確認しても、 Python のプロセスが Instana のダッシュボードに表示されない場合は、 チケットを発行してください。
サポートチケットには、以下の内容を記載してください:
- プラットフォーム、Python のバージョン、使用中のフレームワークなど、環境の詳細。
- これまでのすべての検証の概要。
Python アプリケーションでのトレースの欠落
「サポート対象バージョン 」ページを参照し、使用中のフレームワークやライブラリがサポートされていることを確認してください。
申請プロセスが、 Instana のダッシュボード上で、該当するホストの下に表示されていることを確認してください。
アプリケーションが Instana のダッシュボードに表示されない場合は、前のセクションを参照してください。
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予期されるコンポーネントがこのリストに正しく表示されているかどうか確認してください。
応答ヘッダー内の要求コンテキスト・ヘッダーをチェックします
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この特定のトレースをフィルタを使用して検索することができます。サポート・チケットの提出
サポートされているフレームワークまたはコンポーネントのいずれかを実行していて、前のステップの X-Instana-T、 X-Instana-S、および X-Instana-L 応答ヘッダーが表示されない場合は、 サポート・チケットをファイルします。` ` `
サポート・チケットに以下を添付します。
- アプリケーションの
requirements.txt、または使用中の Python パッケージのリスト (pip listからの出力) - ステップ 2 のアプリケーション・エンティティーへのダッシュボード・リンク
- ステップ 3 の出力
- ステップ 4 の出力
トレースを実行すると、 Python プロセスが「新しいスレッドを開始できません」というメッセージとともにクラッシュします
Python アプリケーションがトレースによって異常終了し、 RuntimeError: can't start new thread メッセージがアプリケーション・ログに表示される場合、最も可能性の高い原因は、アプリケーションに権限を付与する必要があることです。 トレースおよびスレッド開始許可について詳しくは、 トレースに関する注と制限を参照してください。
AutoTrace により Python プロセスが異常終了する
サポート・チケットの提出
AutoTrace Webhook が Python プロセスをクラッシュさせている場合、チケットを提出してください。
特定のプロセスの AutoTrace Webhook インスツルメンテーションを停止します。
AutoTrace のWebhook用にリソースにラベルを付ける方法の詳細については、 InstanaAutoTrace -webhook を参照してください。 また、 AutoTrace のWebhookを設定して、 リソースのネームスペース全体を無視するようにすることもできます。 さらに、 Webhook 内で「 Python 」トレーサーを完全に無効にすることもできます。 このステップは、クラッシュの根本原因が特定されて修正されるまでの一時的な回避策です。
手動インストール方式の使用
その間に、 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へ完全に移行するには、アプリケーションから以下の要素を削除する必要があります:
Instana の Python パッケージ
Instana ( AutoTrace )のWebhookは、アプリケーション用の Instana ( Python )パッケージを個別に管理します。 あなたやあなたの組織が手動でインストールする必要はありません。
必ず、
Pipfile、requirements.txtまたは からinstanavirtualenvPython パッケージを削除してください。OpenTracing や API への呼び出しを行う場合は、代わりに明示的に
opentracingインポートし、そのパッケージに対して呼び出しが行われていることを確認する必要があります(例:opentracing.tracer.start_active_span)。 Instana は、引き続き結果のトレースを受け取ります。環境
AUTOWRAPT_BOOTSTRAPを削除するこの環境変数は、コード変更を必要とせずに Instana Python パッケージをロードするために使用されます。 Instana の AutoTrace Webhookを使用すれば、この環境変数は不要になります。
すべての
import instana呼び出しを削除します。Python AutoTrace Python アプリケーションに、 Instana Python パッケージを自動的に適用します。 Instana Python パッケージの手動インポートを削除できます。