- FastAPI приложение для отправки мониторинговых алертов в мессенджеры - Поддержка Telegram и MAX/VK - Интеграция с Grafana, Zabbix, AlertManager - Автоматическое создание тикетов в Jira - Управление группами мессенджеров через API - Декораторы для авторизации и скрытия эндпоинтов - Подробная документация в папке docs/ Автор: Сергей Антропов Сайт: https://devops.org.ru
69 lines
2.4 KiB
Python
69 lines
2.4 KiB
Python
"""
|
|
Настройка телеметрии OpenTelemetry.
|
|
|
|
Автор: Сергей Антропов
|
|
Сайт: https://devops.org.ru
|
|
"""
|
|
import logging
|
|
from opentelemetry import trace
|
|
from opentelemetry.sdk.resources import Resource, SERVICE_NAME
|
|
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
|
|
from opentelemetry.sdk.trace import TracerProvider
|
|
from opentelemetry.sdk.trace.sampling import TraceIdRatioBased
|
|
from opentelemetry.sdk.trace.export import SimpleSpanProcessor
|
|
from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def setup_telemetry():
|
|
"""
|
|
Настройка провайдера телеметрии OpenTelemetry.
|
|
|
|
Returns:
|
|
TracerProvider: Провайдер трейсинга.
|
|
"""
|
|
from app.core.config import settings
|
|
|
|
resource = Resource(attributes={SERVICE_NAME: settings.otel_service_name})
|
|
sampler = TraceIdRatioBased(1.0) # 100% семплирование
|
|
|
|
# Настройка экспортера OTLP
|
|
exporter_config = {}
|
|
if settings.otel_exporter_otlp_endpoint:
|
|
exporter_config['endpoint'] = settings.otel_exporter_otlp_endpoint
|
|
exporter_config['insecure'] = settings.otel_exporter_otlp_insecure
|
|
|
|
exporter = OTLPSpanExporter(**exporter_config)
|
|
|
|
provider = TracerProvider(sampler=sampler, resource=resource)
|
|
processor = SimpleSpanProcessor(exporter)
|
|
provider.add_span_processor(processor)
|
|
trace.set_tracer_provider(provider)
|
|
|
|
logger.info(f"Telemetry настроен для сервиса: {settings.otel_service_name}")
|
|
return provider
|
|
|
|
|
|
def add(app):
|
|
"""
|
|
Добавить инструментацию OpenTelemetry к приложению FastAPI.
|
|
|
|
Args:
|
|
app: Экземпляр приложения FastAPI.
|
|
"""
|
|
from app.core.config import settings
|
|
|
|
if settings.otel_enabled:
|
|
try:
|
|
tracer_provider = setup_telemetry()
|
|
FastAPIInstrumentor.instrument_app(
|
|
app,
|
|
tracer_provider=tracer_provider,
|
|
excluded_urls="/openapi.json,/docs,/redoc"
|
|
)
|
|
logger.info("OpenTelemetry инструментация добавлена")
|
|
except Exception as e:
|
|
logger.error(f"Ошибка настройки OpenTelemetry: {e}")
|
|
else:
|
|
logger.info("OpenTelemetry отключен") |