Использование Azure Application Insights в докеризованном Django

я пытаюсь внедрить Azure's Application Insights в докеризованную среду Django/AngularJS, чтобы охватить поток данных из конца в конец. Чтобы сделать это, я

  1. Добавил opencensus соответствующие библиотеки в мой requirements.txt файл:

    opencensus-ext-azure
    opencensus-ext-django
    opencensus-ext-requests
    opencensus-ext-logging
    opencensus-ext-postgresql

  2. Отредактируйте секцию логирования в моем settings.py:

     LOGGING = {
        'disable_existing_loggers': False,
        'formatters': {
            'default': {
                'format': '%(asctime)s - %(levelname)s - %(processName)s - %(name)s\n%(message)s',
            },
        },
            "handlers": {
                "azure": {
                    "level": "DEBUG",
                "class": "opencensus.ext.azure.log_exporter.AzureLogHandler",
                'connection_string': os.getenv('CONNECTION_STRING'),
                 },
                "console": {
                    "level": "DEBUG",
                    "class": "logging.StreamHandler",
                    "stream": sys.stdout,
                 },
              },
            "loggers": {
                'my-app’s-name’: {
                    "handlers": ["azure", "console"]
                },
            },
        'version': 1
        }
  1. И инициализировал экземпляр Tracer в моем views.py:
    from opencensus.ext.azure.trace_exporter import AzureExporter
    from opencensus.trace import config_integration
    from opencensus.trace.samplers import AlwaysOnSampler
    from opencensus.trace.tracer import Tracer
    import logging
    
    logger = logging.getLogger("my-app-name")
    logger.setLevel(logging.DEBUG)
    
    
    tracer = Tracer(
        exporter=AzureExporter(
            connection_string = os.getenv('CONNECTION_STRING')
        ),
        sampler=AlwaysOnSampler())

Теперь у меня есть несколько вопросов

  1. Где и как я должен создавать span? Можно ли реализовать его до того, как функция вернет свой результат? Т.е.
    @login_required(login_url='login') 
    def query_xyz(request):
        if request.method == 'GET':
            work_date_str = request.GET.get('workDate')
            work_date = parser.parse(work_date_str).date() if work_date_str is not None else datetime.now().date()
    
            column = [i.replace(' ', '_') for i in request.GET.getlist('column')]
            filters = json.loads(request.GET.get('filters')) if request.GET.get('filters') else None
            limit = json.loads(request.GET.get('limit'))
        
            query_result = api.x_y_z(x=column[0],
                                     y=column[1],
                                     work_date=work_date,
                                     filters=filters,
                                     limit=limit)
                  with tracer.span(name='3Way_query'):
               return JsonResponse(query_result)

или перед объявлением функции?
Т.е.

    with tracer.span(name='3Way_query'):
         @login_required(login_url='login')
          def query_xyz(request):
        … 

Когда я попробовал создать пролеты следующим образом;

    tracer.start_span(name='3Way_query')
    @login_required(login_url='login')
    def query_xyz(request):
    …
     return JsonResponse(query_result)
    tracer.end_span()

Проницательность приложения обнаружила событие, но предоставила неполную информацию enter image description here

Запрос, конечно, не занял 0 времени!
2. AngularJS собирается и работает с

python manage.py collectstatic --no-input

Команда. Поэтому у меня нет NPM Module для размещения модулей App insights, Моя App.module.js выглядит следующим образом:

  1. Где и как я могу внедрить экземпляры App insights?
  2. Есть ли способ, чтобы клиент (angularJS) и сервер (Django) использовали один и тот же трассировщик/спан?
    ЛЮБАЯ помощь будет очень признательна 🙏🏽
Вернуться на верх