improve metrics

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
This commit is contained in:
Jens Langhammer 2024-01-13 22:59:55 +01:00
parent 4e44354680
commit 7a943eac31
No known key found for this signature in database
3 changed files with 24 additions and 4 deletions

View file

@ -1,15 +1,26 @@
"""authentik events app""" """authentik events app"""
from prometheus_client import Gauge from prometheus_client import Gauge, Histogram
from authentik.blueprints.apps import ManagedAppConfig from authentik.blueprints.apps import ManagedAppConfig
from authentik.lib.config import CONFIG, ENV_PREFIX from authentik.lib.config import CONFIG, ENV_PREFIX
# TODO: Deprecated metric - remove in 2024.2 or later
GAUGE_TASKS = Gauge( GAUGE_TASKS = Gauge(
"authentik_system_tasks", "authentik_system_tasks",
"System tasks and their status", "System tasks and their status",
["task_name", "task_uid", "status"], ["task_name", "task_uid", "status"],
) )
SYSTEM_TASK_TIME = Histogram(
"authentik_system_tasks_time_seconds",
"Runtime of system tasks",
)
SYSTEM_TASK_STATUS = Gauge(
"authentik_system_tasks_status",
"System task status",
["task_name", "task_uid", "status"],
)
class AuthentikEventsConfig(ManagedAppConfig): class AuthentikEventsConfig(ManagedAppConfig):
"""authentik events app""" """authentik events app"""

View file

@ -27,7 +27,7 @@ from authentik.core.middleware import (
SESSION_KEY_IMPERSONATE_USER, SESSION_KEY_IMPERSONATE_USER,
) )
from authentik.core.models import ExpiringModel, Group, PropertyMapping, User from authentik.core.models import ExpiringModel, Group, PropertyMapping, User
from authentik.events.apps import GAUGE_TASKS from authentik.events.apps import GAUGE_TASKS, SYSTEM_TASK_STATUS, SYSTEM_TASK_TIME
from authentik.events.context_processors.base import get_context_processors from authentik.events.context_processors.base import get_context_processors
from authentik.events.utils import ( from authentik.events.utils import (
cleanse_dict, cleanse_dict,
@ -622,12 +622,19 @@ class SystemTask(SerializerModel, ExpiringModel):
def update_metrics(self): def update_metrics(self):
"""Update prometheus metrics""" """Update prometheus metrics"""
duration = max(self.finish_timestamp.timestamp() - self.start_timestamp.timestamp(), 0) duration = max(self.finish_timestamp - self.start_timestamp, 0)
# TODO: Deprecated metric - remove in 2024.2 or later
GAUGE_TASKS.labels( GAUGE_TASKS.labels(
task_name=self.name.split(":")[0], task_name=self.name.split(":")[0],
task_uid=self.uid or "", task_uid=self.uid or "",
status=self.status.name.lower(), status=self.status.lower(),
).set(duration) ).set(duration)
SYSTEM_TASK_TIME.observe(duration)
SYSTEM_TASK_STATUS.labels(
task_name=self.name.split(":")[0],
task_uid=self.uid or "",
status=self.status.lower(),
).inc()
def __str__(self) -> str: def __str__(self) -> str:
return f"System Task {self.name}" return f"System Task {self.name}"

View file

@ -8,6 +8,7 @@ from django.http import HttpRequest
from authentik.core.models import User from authentik.core.models import User
from authentik.core.signals import login_failed, password_changed from authentik.core.signals import login_failed, password_changed
from authentik.events.apps import SYSTEM_TASK_STATUS
from authentik.events.models import Event, EventAction, SystemTask from authentik.events.models import Event, EventAction, SystemTask
from authentik.events.tasks import event_notification_handler, gdpr_cleanup from authentik.events.tasks import event_notification_handler, gdpr_cleanup
from authentik.flows.models import Stage from authentik.flows.models import Stage
@ -106,5 +107,6 @@ def event_user_pre_delete_cleanup(sender, instance: User, **_):
@receiver(monitoring_set) @receiver(monitoring_set)
def monitoring_system_task(sender, **_): def monitoring_system_task(sender, **_):
"""Update metrics when task is saved""" """Update metrics when task is saved"""
SYSTEM_TASK_STATUS.clear()
for task in SystemTask.objects.all(): for task in SystemTask.objects.all():
task.update_metrics() task.update_metrics()