[metric] Optional extra metric labels (#18049)

This commit is contained in:
Yinghai Lu
2026-01-31 22:25:59 -08:00
committed by GitHub
parent c7d53fa26a
commit 11892599f1
5 changed files with 27 additions and 4 deletions

View File

@@ -109,6 +109,8 @@ class SchedulerMetricsMixin:
}
if dp_rank is not None:
labels["dp_rank"] = dp_rank
if self.server_args.extra_metric_labels:
labels.update(self.server_args.extra_metric_labels)
self.metrics_collector = SchedulerMetricsCollector(
labels=labels,
enable_lora=self.enable_lora,

View File

@@ -437,6 +437,8 @@ class TokenizerManager(TokenizerCommunicatorMixin, TokenizerManagerMultiItemMixi
if self.server_args.tokenizer_metrics_allowed_custom_labels:
for label in self.server_args.tokenizer_metrics_allowed_custom_labels:
labels[label] = ""
if self.server_args.extra_metric_labels:
labels.update(self.server_args.extra_metric_labels)
self.metrics_collector = TokenizerMetricsCollector(
server_args=self.server_args,
labels=labels,

View File

@@ -119,9 +119,13 @@ class BasePrefixCache(ABC, PrefixCacheTrait):
)
def init_metrics_collector(self):
self.metrics_collector = RadixCacheMetricsCollector(
labels={"cache_type": self.__class__.__name__}
)
from sglang.srt.server_args import get_global_server_args
server_args = get_global_server_args()
labels = {"cache_type": self.__class__.__name__}
if server_args.extra_metric_labels:
labels.update(server_args.extra_metric_labels)
self.metrics_collector = RadixCacheMetricsCollector(labels=labels)
def update_eviction_metrics(self, num_evicted: int, start_time: float):
if self.metrics_collector is not None and num_evicted > 0:

View File

@@ -8,7 +8,7 @@ import os
import threading
import time
from queue import Empty
from typing import TYPE_CHECKING, List, Optional
from typing import TYPE_CHECKING, Dict, List, Optional
import torch
@@ -88,6 +88,7 @@ class HiRadixCache(RadixCache):
self.pp_size = params.pp_size
self.enable_storage = server_args.hicache_storage_backend is not None
self.enable_storage_metrics = self.enable_storage and params.enable_metrics
self.extra_metric_labels = server_args.extra_metric_labels
(
extra_config,
@@ -126,6 +127,7 @@ class HiRadixCache(RadixCache):
hicache_storage_pass_prefix_keys=hicache_storage_pass_prefix_keys,
enable_storage=self.enable_storage,
enable_storage_metrics=self.enable_storage_metrics,
extra_metric_labels=self.extra_metric_labels,
)
# record the nodes with ongoing write through
@@ -168,6 +170,7 @@ class HiRadixCache(RadixCache):
hicache_storage_pass_prefix_keys: bool,
enable_storage: bool,
enable_storage_metrics: bool,
extra_metric_labels: Optional[Dict[str, str]],
) -> None:
prefetch_timeout_per_page = (
self.page_size / 1024 * prefetch_timeout_per_ki_token
@@ -182,6 +185,9 @@ class HiRadixCache(RadixCache):
"pp_rank": self.cache_controller.pp_rank,
"pp_size": self.cache_controller.pp_size,
}
if extra_metric_labels:
labels.update(extra_metric_labels)
self.storage_metrics_collector = StorageMetricsCollector(labels=labels)
storage_metrics_collector = StorageMetricsCollector(labels=labels)
self.enable_storage = enable_storage
@@ -310,6 +316,7 @@ class HiRadixCache(RadixCache):
hicache_storage_pass_prefix_keys=hicache_storage_pass_prefix_keys,
enable_storage=True,
enable_storage_metrics=self._enable_metrics_flag,
extra_metric_labels=self.extra_metric_labels,
)
return True, "Attached HiCache storage backend successfully."

View File

@@ -380,6 +380,7 @@ class ServerArgs:
enable_metrics_for_all_schedulers: bool = False
tokenizer_metrics_custom_labels_header: str = "x-custom-labels"
tokenizer_metrics_allowed_custom_labels: Optional[List[str]] = None
extra_metric_labels: Optional[Dict[str, str]] = None
bucket_time_to_first_token: Optional[List[float]] = None
bucket_inter_token_latency: Optional[List[float]] = None
bucket_e2e_request_latency: Optional[List[float]] = None
@@ -3369,6 +3370,13 @@ class ServerArgs:
"'--tokenizer-metrics-custom-labels-header' field in HTTP requests, e.g., {'label1': 'value1', 'label2': "
"'value2'} is allowed if '--tokenizer-metrics-allowed-custom-labels label1 label2' is set.",
)
parser.add_argument(
"--extra-metric-labels",
type=json.loads,
default=ServerArgs.extra_metric_labels,
help="The custom labels for metrics. "
'e.g. \'{"label1": "value1", "label2": "value2"}\'',
)
parser.add_argument(
"--bucket-time-to-first-token",
type=float,