Python アプリケーション向け New Relic APM 設定ガイド

Python アプリケーションでの New Relic APM 導入は、動的な言語特性を活かした柔軟な監視ソリューションを提供します。Python エージェントは、Django、Flask、FastAPI などの主要フレームワークとの深い統合により、アプリケーションの実行時動作を詳細に追跡できます。

Python エージェントの特徴

Python エージェントの概要

New Relic Python エージェントは、インタープリターレベルでの動的計測により、アプリケーションの実行時動作を詳細に追跡します。デコレータベースの計測システムにより、Pythonic な監視実装を可能にします。

エージェントは以下の情報を自動的に収集します:

  • HTTP リクエストとレスポンスの処理時間
  • データベースクエリの実行時間(SQLAlchemy、Django ORM等)
  • 非同期処理(asyncio)の追跡
  • エラーとスタックトレース

事前準備

システム要件

対応 Python バージョン:

  • 推奨: Python 3.11+ (最新のパフォーマンス最適化)
  • 最小要件: Python 3.8+ (セキュリティサポート期間内)
  • 対応バージョン: CPython 3.8, 3.9, 3.10, 3.11, 3.12+
  • PyPy: PyPy3.8+ (一部制限あり)
  • 注意: Python 3.7以前は非推奨(セキュリティリスク)

Python エージェントを導入する前に、以下の要件を確認してください:

  • Python 3.7 以降(Python 3.9 以降を推奨)
  • CPython、PyPy3 をサポート
  • 仮想環境の使用を推奨(venv、Poetry、conda等)
  • メモリオーバーヘッド: 通常 30-80MB

New Relic アカウントの準備

New Relic のアカウント作成とライセンスキーの取得が必要です。アカウント作成後、「APM & Services」から新しいアプリケーションを追加し、Python を選択してライセンスキーを取得してください。

エージェントのインストール

pip を使用したインストール

bash
pip install newrelic

requirements.txt への追加

txt
newrelic>=9.12.0  # 2025年最新版(Python 3.12+ 完全対応)

Poetry プロジェクトでの追加

bash
poetry add newrelic

基本設定

設定ファイルの生成

New Relic エージェントの設定ファイルを生成します:

bash
newrelic-admin generate-config YOUR_LICENSE_KEY newrelic.ini

設定ファイルの編集

生成された newrelic.ini ファイルを編集し、アプリケーション固有の設定を行います:

ini
[newrelic]
license_key = YOUR_LICENSE_KEY
app_name = My Python Application

# ログ設定
log_file = /tmp/newrelic-python-agent.log
log_level = info

# トランザクション設定
transaction_tracer.enabled = true
transaction_tracer.transaction_threshold = 2.0
transaction_tracer.record_sql = obfuscated

# エラー収集設定
error_collector.enabled = true

New Relic Python エージェント 包括的設定パラメータ

Python エージェントでは、100を超える詳細な設定パラメータが利用可能です。以下に主要なカテゴリごとに分類した包括的な設定パラメータ表を示します。

コア設定パラメータ

パラメータ名説明データ型デフォルト値使用例適用範囲
license_keyNew Relicアカウントのライセンスキー(必須)Stringなしyour_license_key_here全環境
app_nameNew Relic UIに表示されるアプリケーション名StringPython ApplicationMyApp (Production)全環境
monitor_modeパフォーマンスデータ収集の有効/無効Booleantruefalse (開発環境)環境別
developer_modeオフライン開発モード(データ送信なし)Booleanfalsetrue開発環境
enabledエージェント全体の有効/無効Booleantruefalse全環境

ログ設定パラメータ

パラメータ名説明データ型デフォルト値使用例適用範囲
log_fileログファイルのパスStringstderr/var/log/newrelic/python.log全環境
log_levelログレベル設定Stringinfodebug, warning, error全環境
audit_log_file監査ログファイルのパスStringなし/var/log/newrelic/audit.log本番環境

セキュリティ設定パラメータ

パラメータ名説明データ型デフォルト値使用例適用範囲
high_security高セキュリティモードBooleanfalsetrue本番環境
sslHTTPS通信の強制Booleantruefalse (開発環境)全環境
capture_paramsクエリパラメータの収集Booleanfalsetrue全環境
ignored_params除外するパラメータ名Listなしpassword,credit_card,api_key全環境
strip_exception_messages.enabled例外メッセージの削除Booleanfalsetrueセキュア環境

トランザクショントレーサー設定

パラメータ名説明データ型デフォルト値使用例適用範囲
transaction_tracer.enabledトランザクション追跡の有効/無効Booleantruefalse全環境
transaction_tracer.transaction_threshold追跡開始閾値(秒)Floatapdex_f2.0全環境
transaction_tracer.record_sqlSQL記録モードStringobfuscatedraw, off全環境
transaction_tracer.stack_trace_thresholdスタックトレース閾値(秒)Float0.51.0全環境
transaction_tracer.explain_enabledSQL実行計画の取得Booleantruefalse全環境
transaction_tracer.explain_threshold実行計画取得閾値(秒)Float0.51.0全環境
transaction_tracer.function_traceカスタム関数の追跡Listなしmymodule:myfunction全環境
transaction_tracer.top_n保持する最大トレース数Integer2010全環境

エラーコレクター設定

パラメータ名説明データ型デフォルト値使用例適用範囲
error_collector.enabledエラー収集の有効/無効Booleantruefalse全環境
error_collector.ignore_errors無視するエラータイプListなしrequests.exceptions.ConnectionError全環境
error_collector.ignore_status_codes無視するHTTPステータスコードList404401,403,404,405全環境
error_collector.max_stack_trace_linesスタックトレースの最大行数Integer5030全環境

スロークエリ設定

パラメータ名説明データ型デフォルト値使用例適用範囲
slow_sql.enabledスロークエリ追跡の有効/無効Booleantruefalse全環境
slow_sql.thresholdスロークエリの閾値(秒)Float0.51.0全環境

ブラウザ監視設定

パラメータ名説明データ型デフォルト値使用例適用範囲
browser_monitoring.auto_instrumentRUMスクリプトの自動挿入BooleantruefalseWeb環境
browser_monitoring.loaderRUMローダータイプStringrumspaWeb環境

分散トレーシング設定

パラメータ名説明データ型デフォルト値使用例適用範囲
distributed_tracing.enabled分散トレーシングの有効/無効Booleantruefalse全環境
distributed_tracing.exclude_newrelic_headerNew Relicヘッダーの除外Booleanfalsetrue全環境

インストルメンテーション設定

パラメータ名説明データ型デフォルト値使用例適用範囲
thread_profiler.enabledスレッドプロファイラの有効/無効Booleantruefalse全環境
xray_session.enabledX-Rayセッションの有効/無効Booleanfalsetrue全環境

データベース設定

パラメータ名説明データ型デフォルト値使用例適用範囲
database_name_reporting.enabledデータベース名の報告Booleantruefalse全環境
datastore_tracer.instance_reporting.enabledデータストアインスタンス情報の報告Booleantruefalse全環境
datastore_tracer.database_name_reporting.enabledデータベース名の報告(詳細)Booleantruefalse全環境

パフォーマンス最適化設定

パラメータ名説明データ型デフォルト値使用例適用範囲
agent_limits.transaction_traces_nodesトレースノードの最大数Integer20001000全環境
agent_limits.sql_query_length_maximumSQL文の最大長Integer163848192全環境
agent_limits.stack_trace_linesスタックトレースの最大行数Integer5030全環境

属性設定

パラメータ名説明データ型デフォルト値使用例適用範囲
attributes.enabled属性収集の有効/無効Booleantruefalse全環境
attributes.exclude除外する属性パターンListなしrequest.headers.authorization全環境
attributes.include含める属性パターンListなしrequest.parameters.*全環境

イベント設定

パラメータ名説明データ型デフォルト値使用例適用範囲
transaction_events.enabledトランザクションイベントの収集Booleantruefalse全環境
transaction_events.max_samples_stored保存する最大サンプル数Integer1200800全環境
custom_insights_events.enabledカスタムイベントの収集Booleantruefalse全環境
custom_insights_events.max_samples_storedカスタムイベントの最大保存数Integer1200800全環境

ネットワーク・接続設定

パラメータ名説明データ型デフォルト値使用例適用範囲
proxy_hostプロキシサーバーホストStringなしproxy.company.com企業環境
proxy_portプロキシサーバーポートIntegerなし8080企業環境
proxy_userプロキシ認証ユーザーStringなしproxyuser企業環境
proxy_passプロキシ認証パスワードStringなしproxypass企業環境
startup_timeout起動タイムアウト(秒)Float0.010.0全環境
shutdown_timeoutシャットダウンタイムアウト(秒)Float2.55.0全環境

機械学習・AI設定

パラメータ名説明データ型デフォルト値使用例適用範囲
machine_learning.enabled機械学習監視の有効/無効Booleantruefalse全環境
machine_learning.inference_events_value.enabled推論イベント値の収集BooleantruefalseML環境

デバッグ・診断設定

パラメータ名説明データ型デフォルト値使用例適用範囲
debug.disable_sslSSL無効化(デバッグ用)Booleanfalsetrue開発環境
debug.log_data_collector_payloadsデータコレクターペイロードのログ出力Booleanfalsetrue開発環境
debug.log_transaction_trace_payloadトランザクショントレースペイロードのログ出力Booleanfalsetrue開発環境

環境変数による設定

上記のすべてのパラメータは、設定ファイル以外にも環境変数で設定可能です。環境変数名は NEW_RELIC_ プレフィックスに続けて、パラメータ名をアッパーケースで記述します。

bash
# 例:環境変数による設定
export NEW_RELIC_LICENSE_KEY="your_license_key"
export NEW_RELIC_APP_NAME="MyApp (Production)"
export NEW_RELIC_HIGH_SECURITY="true"
export NEW_RELIC_TRANSACTION_TRACER_RECORD_SQL="obfuscated"

フレームワーク別設定

Django アプリケーション

Django プロジェクトでは、WSGI ファイルまたは manage.py での初期化を行います。

settings.py での設定

python
# settings.py
import newrelic.agent

# New Relic エージェントの初期化
newrelic.agent.initialize('/path/to/newrelic.ini')

# Django設定
INSTALLED_APPS = [
    # その他のアプリ
]

# ミドルウェア設定(任意)
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    # その他のミドルウェア
]

wsgi.py での設定

python
# wsgi.py
import os
import newrelic.agent

# New Relic設定の初期化
newrelic.agent.initialize()

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
application = get_wsgi_application()

# WSGIアプリケーションのラップ
application = newrelic.agent.wsgi_application()(application)

Flask アプリケーション

Flask アプリケーションでは、アプリケーション初期化時にエージェントを設定します:

python
# app.py
import newrelic.agent
newrelic.agent.initialize()

from flask import Flask

app = Flask(__name__)

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

if __name__ == '__main__':
    app.run()

FastAPI アプリケーション

FastAPI では ASGI アプリケーションとしてエージェントを統合します:

python
# main.py
import newrelic.agent
newrelic.agent.initialize()

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
    return {"Hello": "World"}

# ASGI アプリケーションのラップ
app = newrelic.agent.asgi_application()(app)

アプリケーション起動方法

環境変数による設定(推奨)

本番環境では設定ファイルの代わりに環境変数を使用することでセキュリティを向上できます:

bash
# セキュアな環境変数設定
export NEW_RELIC_LICENSE_KEY="your_license_key_here"
export NEW_RELIC_APP_NAME="MyPythonApp (Production)"
export NEW_RELIC_ENVIRONMENT="production"
export NEW_RELIC_LOG_LEVEL="info"
export NEW_RELIC_DISTRIBUTED_TRACING_ENABLED="true"
export NEW_RELIC_HIGH_SECURITY="true"  # セキュリティ強化モード

# アプリケーション起動
python app.py

.env ファイルでの管理(開発環境)

開発環境では .env ファイルを使用して環境変数を管理できます:

bash
# .env ファイル(.gitignoreに追加必須)
NEW_RELIC_LICENSE_KEY=your_license_key_here
NEW_RELIC_APP_NAME=MyPythonApp (Development)
NEW_RELIC_ENVIRONMENT=development
NEW_RELIC_LOG_LEVEL=debug
NEW_RELIC_MONITOR_MODE=false

Python-dotenv での読み込み:

python
import os
from dotenv import load_dotenv
import newrelic.agent

# .envファイルの読み込み
load_dotenv()

# 環境変数からの設定
newrelic.agent.initialize()

newrelic-admin コマンドによる起動

bash
newrelic-admin run-program python app.py

Gunicorn での起動

bash
newrelic-admin run-program gunicorn --bind 0.0.0.0:8000 myapp:app

カスタム計測の基本

デコレータベースの計測

重要な関数やメソッドにカスタム計測を追加できます:

python
import newrelic.agent

@newrelic.agent.function_trace()
def important_business_logic():
    # ビジネスロジック
    pass

@newrelic.agent.background_task()
def background_process():
    # バックグラウンド処理
    pass

カスタムメトリクスの記録

python
import newrelic.agent

def record_business_metrics(order_data):
    # カスタムメトリクスの記録
    newrelic.agent.record_custom_metric('Custom/Revenue', order_data['amount'])
    newrelic.agent.record_custom_metric('Custom/OrdersProcessed', 1)
    
    # カスタムイベントの記録
    newrelic.agent.record_custom_event('OrderCompleted', {
        'order_id': order_data['id'],
        'amount': order_data['amount']
    })

監視データの確認

New Relic UI でのデータ確認

エージェント導入後、数分で New Relic のダッシュボードにデータが表示されます。確認できる主要な情報:

  • 概要: アプリケーションの全体的なパフォーマンス
  • トランザクション: 各エンドポイントやビューの処理時間
  • データベース: SQLクエリの実行時間と N+1 問題の検出
  • エラー: Python 例外とエラーの詳細

基本的なメトリクス

自動的に収集される基本メトリクス:

  • 平均レスポンス時間
  • スループット(RPM: Requests Per Minute)
  • エラー率
  • Apdex スコア(ユーザー満足度指標)

よくある問題と解決方法

エージェントが動作しない場合

  1. インポート順序: newrelic.agent.initialize() が最初に呼び出されているか確認
  2. ライセンスキー: 正しいキーが設定されているか確認
  3. 設定ファイルのパス: newrelic.ini のパスが正しいか確認
  4. ログの確認: エージェントログでエラーを確認

パフォーマンスへの影響を最小化

本番環境での設定例:

ini
[newrelic]
# パフォーマンス影響を最小化する設定
transaction_tracer.top_n = 20
error_collector.max_stack_trace_lines = 50
agent_limits.transaction_traces_nodes = 2000

セキュリティ設定

機密情報を保護するための基本設定:

ini
[newrelic]
# 機密情報の自動難読化
capture_params = false
ignored_params = password,credit_card,ssn,api_key,token

# SSL通信の強制
ssl = true

# 属性から機密情報を除外
attributes.exclude = request.headers.authorization,
                   request.parameters.password

Docker での設定

Docker コンテナでの使用例:

セキュリティ強化された Docker 設定例:

dockerfile
# セキュリティ強化されたマルチステージビルド
FROM python:3.11-slim as builder

# セキュリティベストプラクティス
RUN groupadd -r appuser && useradd -r -g appuser appuser

# 依存関係のインストール
COPY requirements.txt .
RUN pip install --no-cache-dir --user -r requirements.txt

# 本番イメージ
FROM python:3.11-slim

# 非rootユーザーの作成
RUN groupadd -r appuser && useradd -r -g appuser appuser

# ユーザーライブラリのコピー
COPY --from=builder /root/.local /home/appuser/.local
ENV PATH=/home/appuser/.local/bin:$PATH

# アプリケーションファイルのコピー
WORKDIR /app
COPY --chown=appuser:appuser app.py .
COPY --chown=appuser:appuser newrelic.ini .

# 非rootユーザーに切り替え
USER appuser

# セキュリティ設定
ENV NEW_RELIC_HIGH_SECURITY=true
ENV NEW_RELIC_SECURITY_POLICIES_TOKEN=""

# ヘルスチェック
HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \
    CMD python -c "import requests; requests.get('http://localhost:8000/health')"

# アプリケーション起動
CMD ["newrelic-admin", "run-program", "python", "app.py"]

Docker Compose 設定例

yaml
version: '3.8'
services:
  python-app:
    build: .
    environment:
      - NEW_RELIC_LICENSE_KEY=${NEW_RELIC_LICENSE_KEY}
      - NEW_RELIC_APP_NAME=MyPythonApp (Docker)
      - NEW_RELIC_ENVIRONMENT=production
      - NEW_RELIC_HIGH_SECURITY=true
      - NEW_RELIC_DISTRIBUTED_TRACING_ENABLED=true
    ports:
      - "8000:8000"
    security_opt:
      - no-new-privileges:true
    read_only: true
    tmpfs:
      - /tmp
    user: "1001:1001"  # 非rootユーザー

Kubernetes での設定

セキュリティ強化された Kubernetes デプロイメント:

yaml
# Secret リソース
apiVersion: v1
kind: Secret
metadata:
  name: newrelic-secret
type: Opaque
data:
  license-key: <base64_encoded_license_key>
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: python-app
  labels:
    app: python-app
    version: v1.0.0
spec:
  replicas: 3
  selector:
    matchLabels:
      app: python-app
  template:
    metadata:
      labels:
        app: python-app
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/port: "8000"
    spec:
      securityContext:
        runAsNonRoot: true
        runAsUser: 1001
        runAsGroup: 1001
        fsGroup: 1001
      containers:
      - name: app
        image: myapp:latest
        imagePullPolicy: Always
        securityContext:
          allowPrivilegeEscalation: false
          readOnlyRootFilesystem: true
          capabilities:
            drop:
            - ALL
        env:
        - name: NEW_RELIC_LICENSE_KEY
          valueFrom:
            secretKeyRef:
              name: newrelic-secret
              key: license-key
        - name: NEW_RELIC_APP_NAME
          value: "MyPythonApp (K8s)"
        - name: NEW_RELIC_ENVIRONMENT
          value: "production"
        - name: NEW_RELIC_HIGH_SECURITY
          value: "true"
        - name: NEW_RELIC_DISTRIBUTED_TRACING_ENABLED
          value: "true"
        - name: NEW_RELIC_LOG_LEVEL
          value: "info"
        ports:
        - containerPort: 8000
          name: http
        resources:
          requests:
            memory: "256Mi"
            cpu: "100m"
          limits:
            memory: "512Mi"
            cpu: "500m"
        readinessProbe:
          httpGet:
            path: /health
            port: 8000
          initialDelaySeconds: 10
          periodSeconds: 5
        livenessProbe:
          httpGet:
            path: /health
            port: 8000
          initialDelaySeconds: 30
          periodSeconds: 10
        volumeMounts:
        - name: tmp-volume
          mountPath: /tmp
      volumes:
      - name: tmp-volume
        emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
  name: python-app-service
spec:
  selector:
    app: python-app
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8000
  type: ClusterIP

トラブルシューティング

診断フローチャート

一般的な問題と解決方法

1. データが New Relic に表示されない

症状: アプリケーションが New Relic ダッシュボードに表示されない

診断スクリプト:

python
import newrelic.agent
import sys
import os

def diagnose_newrelic():
    """New Relic エージェント診断"""
    
    print("=== New Relic Python エージェント診断 ===")
    
    # バージョン確認
    print(f"Agent version: {newrelic.agent.version}")
    print(f"Python version: {sys.version}")
    
    # 設定確認
    try:
        config = newrelic.agent.global_settings()
        print(f"App name: {config.app_name}")
        print(f"License key: {'*' * 32 + config.license_key[-8:] if config.license_key else 'Not set'}")
        print(f"Monitor mode: {config.monitor_mode}")
        print(f"High security: {config.high_security}")
        print(f"Log level: {config.log_level}")
    except Exception as e:
        print(f"Configuration error: {e}")
    
    # アプリケーション状態確認
    try:
        application = newrelic.agent.application()
        print(f"Application object: {application}")
        print(f"Application name: {application.name}")
        print(f"Active: {application.active}")
    except Exception as e:
        print(f"Application error: {e}")
    
    # 環境変数確認
    print("\n=== 環境変数 ===")
    env_vars = [
        'NEW_RELIC_LICENSE_KEY',
        'NEW_RELIC_APP_NAME', 
        'NEW_RELIC_ENVIRONMENT',
        'NEW_RELIC_CONFIG_FILE',
        'NEW_RELIC_LOG_LEVEL'
    ]
    
    for var in env_vars:
        value = os.environ.get(var, 'Not set')
        if 'LICENSE_KEY' in var and value != 'Not set':
            value = '*' * 32 + value[-8:]
        print(f"{var}: {value}")

# 診断実行
if __name__ == "__main__":
    diagnose_newrelic()

2. パフォーマンス影響が大きい

症状: APM エージェント導入後にアプリケーションが重くなる

解決方法:

ini
[newrelic]
# パフォーマンス最適化設定
transaction_tracer.top_n = 10  # デフォルト: 20
error_collector.max_stack_trace_lines = 30  # デフォルト: 50
agent_limits.transaction_traces_nodes = 1000  # デフォルト: 2000

# 詳細なSQL監視を無効化(必要に応じて)
transaction_tracer.explain_enabled = false
slow_sql.enabled = false

# ブラウザ監視を無効化(必要に応じて)
browser_monitoring.auto_instrument = false

3. Django で静的ファイルが監視される

症状: 静的ファイルのリクエストがトランザクションとして記録される

解決方法:

python
# settings.py
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    # New Relic ミドルウェアは静的ファイルミドルウェアの後に配置
    'django.middleware.common.CommonMiddleware',
    'newrelic.agent.django_middleware',  # ここに配置
    # その他のミドルウェア
]

# 静的ファイルのパスを除外
import newrelic.agent

@newrelic.agent.function_trace('StaticFileExclusion')
def static_file_filter(environ, start_response):
    """静的ファイルを New Relic 監視から除外"""
    path = environ.get('PATH_INFO', '')
    
    # 静的ファイルパスの場合は監視しない
    if path.startswith('/static/') or path.startswith('/media/'):
        newrelic.agent.ignore_transaction()
    
    return app(environ, start_response)

4. 非同期タスクが追跡されない

症状: Celery タスクや asyncio 処理が New Relic に表示されない

解決方法:

python
import newrelic.agent
import asyncio
from celery import Celery

# Celery タスクの監視
app = Celery('tasks')

@app.task
@newrelic.agent.background_task()  # 必須デコレータ
def async_task(param):
    # バックグラウンドタスク処理
    newrelic.agent.record_custom_metric('Custom/BackgroundTask', 1)
    return result

# asyncio タスクの監視
@newrelic.agent.background_task()
async def async_function():
    """非同期関数の監視"""
    with newrelic.agent.FunctionTrace('AsyncOperation'):
        await some_async_operation()
        
    # カスタムメトリクスの記録
    newrelic.agent.record_custom_metric('Custom/AsyncTask', 1)

# asyncio イベントループでの実行
async def main():
    await async_function()

if __name__ == "__main__":
    asyncio.run(main())

詳細ログの有効化

問題を特定するため、詳細ログを有効にします:

ini
[newrelic]
log_file = /var/log/newrelic/python-agent.log
log_level = debug  # 本番環境では info に戻す
audit_log_file = /var/log/newrelic/python-audit.log

# デバッグ用追加設定
debug.disable_ssl = false
debug.log_data_collector_payloads = false
debug.log_transaction_trace_payload = false

パフォーマンス監視の最適化

python
import newrelic.agent
from functools import wraps

def performance_monitor(threshold_seconds=1.0):
    """パフォーマンス閾値監視デコレータ"""
    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            with newrelic.agent.FunctionTrace(f'Performance/{func.__name__}'):
                import time
                start_time = time.time()
                
                try:
                    result = func(*args, **kwargs)
                    duration = time.time() - start_time
                    
                    # 閾値を超えた場合の警告
                    if duration > threshold_seconds:
                        newrelic.agent.record_custom_metric(
                            'Custom/SlowFunction',
                            duration
                        )
                        
                        newrelic.agent.record_custom_event('SlowFunction', {
                            'function_name': func.__name__,
                            'duration': duration,
                            'threshold': threshold_seconds
                        })
                    
                    return result
                    
                except Exception as e:
                    newrelic.agent.notice_error(attributes={
                        'function_name': func.__name__,
                        'error_type': type(e).__name__
                    })
                    raise
                    
        return wrapper
    return decorator

# 使用例
@performance_monitor(threshold_seconds=0.5)
def slow_database_operation():
    """データベース処理の監視"""
    # 処理内容
    pass

Python アプリケーションでの New Relic APM 導入により、動的な言語特性を活かした詳細なパフォーマンス監視を実現できます。適切な設定と統合により、Python エコシステムの多様な実行パターンに対応した包括的な監視システムを構築できます。


関連記事