設定ファイルを変更することで、Pythonエージェントのモニタリングを拡張して、クラスの追加の関数やメソッドに費やされた時間をトレースすることができます。この形式の カスタムインスツルメンテーション は、APIコールよりも実装が簡単で、コードを修正する必要がありません。しかし、より複雑なニーズのためには、 Python のインスツルメンテーションを API で実装する必要があるかもしれません 。
設定ファイルの機能一覧
インストルメンテーションを指定された関数とクラス メソッドに拡張するには、それらをエージェント構成ファイルの newrelic
セクション内の transaction_tracer.function_trace
設定に追加します。関数の識別子の形式は module:function
であり、クラス メソッドの識別子は module:class.function
である必要があります。
複数のアイテムをリストアップするには、以下のいずれかの方法を使用します。
- 一行で表示します。各項目をスペースで区切ります。
- 複数の行があります。 ini ファイルの規約に従って、後続の行をインデントします。
インストルメント化された関数のデータが報告されると、メトリクスには Function/module:function
または Function/module:class.function
の形式の名前が付けられます。トランザクションのパフォーマンスの内訳では、カテゴリは Function
として表示され、セグメントは module:function
または module:class.function
として表示されます。低速トランザクション追跡の場合は、セグメント名のみが表示されます。関数が実際にジェネレーターを返している場合、ジェネレーターを返すのに費やした時間だけが記録され、ジェネレーターからの値の消費は記録されないことに注意してください。
拡張APIのラッピングに関する制限
エージェント設定ファイルに関数をリストアップしてラッピングする際、メソッドがC拡張モジュールによってCコードで実装されたクラスのメンバーである場合は、この方法でクラスメソッドを指定することはできません。これは、Python C APIで実装された型のメソッドテーブルを変更することができないためです。
報告された関数名のオーバーライド
エージェント構成ファイルで transaction_tracer.function_trace
設定を使用する場合、関数の名前はメトリック名に使用され、 Function
として分類されます。メトリック名で使用できる関数名をオーバーライドする必要がある場合、またはメトリック名を別の方法で分類する必要がある場合は、構成ファイルで関数トレースを定義する代替手段を使用できます。同等のもの:
transaction_tracer.function_trace = dumbdbm:open dumbdbm:_Database._commit
この場合、エージェント設定ファイルに2つの新しい設定セクションを作成し、トレースする機能ごとに1つずつ設定することになります。
[function-trace:dumbdbm-1]enabled = truefunction = dumbdbm:openname = dumbdbm:opengroup = Function
[function-trace:dumbdbm-2]enabled = truefunction = dumbdbm:_Database._commitname = dumbdbm:_Database._commitgroup = Function
ini ファイルのセクション名は function-trace:
で始まる必要があります。このプレフィックスに続く名前コンポーネントは何でもかまいませんが、構成ファイル内のすべての関数トレース セクションにわたって一意である必要があります。 group
と name
設定は、必要に応じてオーバーライドして、目的のメトリック名を得ることができます。 enabled
設定のデフォルトは false
であり、関数トレースを有効にするには true
に設定する必要があります。
APIを使った機器
シンプルなカスタムインストルメンテーションの目的では、コンフィグファイルの方法がうまく機能します。より精密でカスタマイズされたインストゥルメンテーションやエージェントの動作調整には、 Python agent API を使用するとよいでしょう。