aidial_sdk/telemetry/types.py (33 lines of code) (raw):
import logging
import os
from typing import Optional
from aidial_sdk.pydantic_v1 import BaseModel
from aidial_sdk.utils.env import env_var_list
# OpenTelemetry SDK configuration env vars:
# https://opentelemetry.io/docs/specs/otel/configuration/sdk-environment-variables/
OTEL_LOGS_EXPORTER = env_var_list("OTEL_LOGS_EXPORTER")
OTEL_TRACES_EXPORTER = env_var_list("OTEL_TRACES_EXPORTER")
OTEL_METRICS_EXPORTER = env_var_list("OTEL_METRICS_EXPORTER")
OTEL_EXPORTER_PROMETHEUS_PORT = int(
os.getenv("OTEL_EXPORTER_PROMETHEUS_PORT", 9464)
)
OTEL_PYTHON_LOG_CORRELATION = (
os.getenv("OTEL_PYTHON_LOG_CORRELATION", "false").lower() == "true"
)
class LogsConfig(BaseModel):
otlp_export: bool = "otlp" in OTEL_LOGS_EXPORTER
level: int = logging.INFO
class TracingConfig(BaseModel):
otlp_export: bool = "otlp" in OTEL_TRACES_EXPORTER
"""Configure logging to include tracing context
into console log messages"""
logging: bool = OTEL_PYTHON_LOG_CORRELATION
class MetricsConfig(BaseModel):
otlp_export: bool = "otlp" in OTEL_METRICS_EXPORTER
prometheus_export: bool = "prometheus" in OTEL_METRICS_EXPORTER
port: int = OTEL_EXPORTER_PROMETHEUS_PORT
class TelemetryConfig(BaseModel):
service_name: Optional[str] = None
logs: Optional[LogsConfig] = LogsConfig() if OTEL_LOGS_EXPORTER else None
tracing: Optional[TracingConfig] = (
TracingConfig() if OTEL_TRACES_EXPORTER else None
)
metrics: Optional[MetricsConfig] = (
MetricsConfig() if OTEL_METRICS_EXPORTER else None
)