Использование Azure Application Insights в докеризованном Django
я пытаюсь внедрить Azure's Application Insights в докеризованную среду Django/AngularJS, чтобы охватить поток данных из конца в конец. Чтобы сделать это, я
Добавил opencensus соответствующие библиотеки в мой
requirements.txt
файл:opencensus-ext-azure
opencensus-ext-django
opencensus-ext-requests
opencensus-ext-logging
opencensus-ext-postgresqlОтредактируйте секцию логирования в моем
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
}
- И инициализировал экземпляр 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())
Теперь у меня есть несколько вопросов
- Где и как я должен создавать 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()
Проницательность приложения обнаружила событие, но предоставила неполную информацию
Запрос, конечно, не занял 0 времени!
2. AngularJS собирается и работает с
python manage.py collectstatic --no-input
Команда.
Поэтому у меня нет NPM Module
для размещения модулей App insights,
Моя App.module.js
выглядит следующим образом:
- Где и как я могу внедрить экземпляры App insights?
- Есть ли способ, чтобы клиент (angularJS) и сервер (Django) использовали один и тот же трассировщик/спан?
ЛЮБАЯ помощь будет очень признательна 🙏🏽