OpenCensus Python을 사용하여 들어오는 요청 추적

OpenCensus Python 및 해당 통합은 들어오는 요청 데이터를 수집합니다. 인기 있는 웹 프레임워크 Django, Flask 및 Pyramid를 기반으로 하는 웹 애플리케이션에 전송된 들어오는 요청 데이터를 추적할 수 있습니다. Application Insights는 데이터를 requests 원격 분석으로 수신합니다.

먼저 최신 OpenCensus Python SDK를 사용하여 Python 애플리케이션을 계측합니다.

Django 애플리케이션 추적

  1. PyPI에서 opencensus-ext-django를 다운로드하여 설치합니다. django 미들웨어를 사용하여 애플리케이션을 계측합니다. Django 애플리케이션에 전송된 들어오는 요청이 추적됩니다.

  2. MIDDLEWAREsettings.py 파일에 opencensus.ext.django.middleware.OpencensusMiddleware를 포함합니다.

    MIDDLEWARE = (
        ...
        'opencensus.ext.django.middleware.OpencensusMiddleware',
        ...
    )
    
  3. OPENCENSUS 아래 settings.py에 AzureExporter가 올바르게 구성되어 있는지 확인합니다. 추적하지 않으려는 URL의 요청은 EXCLUDELIST_PATHS에 추가합니다.

    OPENCENSUS = {
        'TRACE': {
            'SAMPLER': 'opencensus.trace.samplers.ProbabilitySampler(rate=1)',
            'EXPORTER': '''opencensus.ext.azure.trace_exporter.AzureExporter(
                connection_string="InstrumentationKey=<your-ikey-here>"
            )''',
            'EXCLUDELIST_PATHS': ['https://example.com'],  <--- These sites will not be traced if a request is sent to it.
        }
    }
    

Azure Monitor OpenCensus Python 샘플 리포지토리에서 Django 샘플 애플리케이션을 찾을 수 있습니다.

Flask 애플리케이션 추적

  1. PyPI에서 opencensus-ext-flask를 다운로드하여 설치합니다. flask 미들웨어를 사용하여 애플리케이션을 계측합니다. Flask 애플리케이션에 전송된 들어오는 요청이 추적됩니다.

    
    from flask import Flask
    from opencensus.ext.azure.trace_exporter import AzureExporter
    from opencensus.ext.flask.flask_middleware import FlaskMiddleware
    from opencensus.trace.samplers import ProbabilitySampler
    
    app = Flask(__name__)
    middleware = FlaskMiddleware(
        app,
        exporter=AzureExporter(connection_string="InstrumentationKey=<your-ikey-here>"),
        sampler=ProbabilitySampler(rate=1.0),
    )
    
    @app.route('/')
    def hello():
        return 'Hello World!'
    
    if __name__ == '__main__':
        app.run(host='localhost', port=8080, threaded=True)
    
    
  2. app.config를 통해 flask 애플리케이션을 구성할 수도 있습니다. 추적하지 않으려는 URL의 요청은 EXCLUDELIST_PATHS에 추가합니다.

    app.config['OPENCENSUS'] = {
        'TRACE': {
            'SAMPLER': 'opencensus.trace.samplers.ProbabilitySampler(rate=1.0)',
            'EXPORTER': '''opencensus.ext.azure.trace_exporter.AzureExporter(
                connection_string="InstrumentationKey=<your-ikey-here>",
            )''',
            'EXCLUDELIST_PATHS': ['https://example.com'],  <--- These sites will not be traced if a request is sent to it.
        }
    }
    

    참고

    Docker 환경의 uWSGI에서 Flask를 실행하려면, 먼저 uWSGI 구성 파일(uwsgi.ini)에 lazy-apps = true을 추가해야 합니다. 자세한 내용은 이슈 설명을 참조하십시오.

Azure Monitor OpenCensus Python 샘플 리포지토리에서 요청을 추적하는 Flask 샘플 애플리케이션을 찾을 수 있습니다.

Pyramid 애플리케이션 추적

  1. PyPI에서 opencensus-ext-django를 다운로드하여 설치합니다. pyramid 트윈을 사용하여 애플리케이션을 계측합니다. Pyramid 애플리케이션에 전송된 들어오는 요청이 추적됩니다.

    def main(global_config, **settings):
        config = Configurator(settings=settings)
    
        config.add_tween('opencensus.ext.pyramid'
                         '.pyramid_middleware.OpenCensusTweenFactory')
    
  2. 코드에서 직접 pyramid 트윈을 구성할 수 있습니다. 추적하지 않으려는 URL의 요청은 EXCLUDELIST_PATHS에 추가합니다.

    settings = {
        'OPENCENSUS': {
            'TRACE': {
                'SAMPLER': 'opencensus.trace.samplers.ProbabilitySampler(rate=1.0)',
                'EXPORTER': '''opencensus.ext.azure.trace_exporter.AzureExporter(
                    connection_string="InstrumentationKey=<your-ikey-here>",
                )''',
                'EXCLUDELIST_PATHS': ['https://example.com'],  <--- These sites will not be traced if a request is sent to it.
            }
        }
    }
    config = Configurator(settings=settings)
    

FastAPI 애플리케이션 추적

  1. 다음 종속성이 필요합니다.

  2. PyPI에서 opencensus-ext-fastapi를 다운로드하여 설치합니다.

    pip install opencensus-ext-fastapi

  3. fastapi 미들웨어를 사용하여 애플리케이션을 계측합니다.

    from fastapi import FastAPI
    from opencensus.ext.fastapi.fastapi_middleware import FastAPIMiddleware
    
    app = FastAPI(__name__)
    app.add_middleware(FastAPIMiddleware)
    
    @app.get('/')
    def hello():
        return 'Hello World!'
    
  4. 애플리케이션을 실행합니다. FastAPI 애플리케이션에 대한 호출은 자동으로 추적되어야 합니다. 원격 분석은 Azure Monitor에 직접 기록되어야 합니다.

다음 단계