improve metrics
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
This commit is contained in:
parent
4e44354680
commit
7a943eac31
|
@ -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"""
|
||||||
|
|
|
@ -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}"
|
||||||
|
|
|
@ -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()
|
||||||
|
|
Reference in a new issue