Add dedicated class for metrics. Count logins and new chats

This commit is contained in:
nojaf
2025-05-15 11:30:58 +02:00
parent 6d93afc405
commit d0973ab060
4 changed files with 38 additions and 16 deletions

View File

@@ -0,0 +1,27 @@
from typing import Optional
class TelemetryMetrics:
def __init__(self, meter):
self.login_counter = meter.create_counter(
"user_login_total", description="Total number of user logins"
)
self.user_request_counter = meter.create_counter(
"user_request_total", description="Total number of user requests"
)
def track_user_login(self, user_id: str, email: str):
self.login_counter.add(
1, {"method": "regular", "user_id": user_id, "email": email}
)
def track_user_request(self, user_id: str):
self.user_request_counter.add(1, {"user_id": user_id})
telemetry_metrics: Optional[TelemetryMetrics] = None
def initialize_telemetry_metrics(meter):
global telemetry_metrics
telemetry_metrics = TelemetryMetrics(meter)

View File

@@ -1,4 +1,5 @@
from fastapi import FastAPI
from open_webui.utils.telemetry.metrics import initialize_telemetry_metrics
from opentelemetry import trace, metrics
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import OTLPMetricExporter
@@ -14,10 +15,6 @@ from open_webui.utils.telemetry.exporters import LazyBatchSpanProcessor
from open_webui.utils.telemetry.instrumentors import Instrumentor
from open_webui.env import OTEL_SERVICE_NAME, OTEL_EXPORTER_OTLP_ENDPOINT
meter = None
login_counter = None
active_sessions_gauge = None
def setup(app: FastAPI, db_engine: Engine):
resource = Resource.create(attributes={SERVICE_NAME: OTEL_SERVICE_NAME})
@@ -41,14 +38,5 @@ def setup(app: FastAPI, db_engine: Engine):
)
meter_provider = MeterProvider(resource=resource, metric_readers=[reader])
metrics.set_meter_provider(meter_provider)
global meter, login_counter, active_sessions_gauge
meter = metrics.get_meter(OTEL_SERVICE_NAME)
login_counter = meter.create_counter(
"user_login_total", description="Total number of user logins"
)
active_sessions_gauge = meter.create_gauge(
"active.sessions", description="Number of currently active user sessions"
)
initialize_telemetry_metrics(meter)