Files
2026-07-13 13:17:40 +08:00

140 lines
4.6 KiB
Python

from typing import Optional
from ray.dashboard.consts import COMPONENT_METRICS_TAG_KEYS
class NullMetric:
"""Mock metric class to be used in case of prometheus_client import error."""
def set(self, *args, **kwargs):
pass
def observe(self, *args, **kwargs):
pass
def inc(self, *args, **kwargs):
pass
try:
from prometheus_client import CollectorRegistry, Counter, Gauge, Histogram
# The metrics in this class should be kept in sync with
# python/ray/tests/test_metrics_agent.py
class DashboardPrometheusMetrics:
def __init__(self, registry: Optional[CollectorRegistry] = None):
self.registry: CollectorRegistry = registry or CollectorRegistry(
auto_describe=True
)
# Buckets: 5ms, 10ms, 25ms, 50ms, 75ms
# 100ms, 250ms, 500ms, 750ms
# 1s, 2.5s, 5s, 7.5s, 10s
# 20s, 40s, 60s
# used for API duration
histogram_buckets_s = [
0.005,
0.01,
0.025,
0.05,
0.075,
0.1,
0.25,
0.5,
0.75,
1,
2.5,
5,
7.5,
10,
20,
40,
60,
]
self.metrics_request_duration = Histogram(
"dashboard_api_requests_duration_seconds",
"Total duration in seconds per endpoint",
("endpoint", "http_status", "Version", "SessionName", "Component"),
unit="seconds",
namespace="ray",
registry=self.registry,
buckets=histogram_buckets_s,
)
self.metrics_request_count = Counter(
"dashboard_api_requests_count",
"Total requests count per endpoint",
(
"method",
"endpoint",
"http_status",
"Version",
"SessionName",
"Component",
),
unit="requests",
namespace="ray",
registry=self.registry,
)
self.metrics_event_loop_tasks = Gauge(
"dashboard_event_loop_tasks",
"Number of tasks currently pending in the event loop's queue.",
tuple(COMPONENT_METRICS_TAG_KEYS),
unit="tasks",
namespace="ray",
registry=self.registry,
)
self.metrics_event_loop_lag = Gauge(
"dashboard_event_loop_lag",
"Event loop lag in seconds.",
tuple(COMPONENT_METRICS_TAG_KEYS),
unit="seconds",
namespace="ray",
registry=self.registry,
)
self.metrics_dashboard_cpu = Gauge(
"component_cpu",
"Dashboard CPU percentage usage.",
tuple(COMPONENT_METRICS_TAG_KEYS),
unit="percentage",
namespace="ray",
registry=self.registry,
)
self.metrics_dashboard_mem_uss_mb = Gauge(
"component_uss",
"USS usage of all components on the node.",
tuple(COMPONENT_METRICS_TAG_KEYS),
unit="mb",
namespace="ray",
registry=self.registry,
)
self.metrics_dashboard_mem_uss_bytes = Gauge(
"component_uss",
"USS usage of all components on the node.",
tuple(COMPONENT_METRICS_TAG_KEYS),
unit="bytes",
namespace="ray",
registry=self.registry,
)
self.metrics_dashboard_mem_rss_mb = Gauge(
"component_rss",
"RSS usage of all components on the node.",
tuple(COMPONENT_METRICS_TAG_KEYS),
unit="mb",
namespace="ray",
registry=self.registry,
)
self.metrics_dashboard_mem_rss_bytes = Gauge(
"component_rss",
"RSS usage of all components on the node.",
tuple(COMPONENT_METRICS_TAG_KEYS),
unit="bytes",
namespace="ray",
registry=self.registry,
)
except ImportError:
class DashboardPrometheusMetrics(object):
def __getattr__(self, attr):
return NullMetric()