SGLang и Prometheus: метрики очереди локального сервера
На странице · 6 разделов
Для мониторинга SGLang запустите сервер с `--enable-metrics` и проверьте `http://127.0.0.1:30000/metrics`: endpoint отдаёт метрики в формате Prometheus. По `sglang:num_queue_reqs`, `sglang:num_running_reqs` и гистограмме `sglang:time_to_first_token_seconds` можно отличать ожидание в очереди от обработки запроса. Но пустая очередь при одном запросе не доказывает запас производительности: повторите проверку при контролируемой нагрузке на своей модели и не открывайте /metrics в интернет.
Документация SGLang v0.5.20, проверена 28 сентября 2026 года. Команды ниже составлены по зафиксированному Git-коммиту
94602c9, но Modelium не запускал сервер, GPU, модель или мониторинговый стенд. Значения метрик появляются только в вашем окружении; цифры из примеров авторов не являются результатами Modelium. s1 s2
Что именно показывает /metrics и когда это полезно?
SGLang отдаёт Prometheus-метрики после запуска с --enable-metrics; документация проверяет endpoint командой curl http://localhost:30000/metrics. Здесь можно наблюдать текущую очередь и выполняющиеся запросы, счётчики токенов и распределение задержек. Это контроль сервера инференса, а не качества ответа модели, прав на данные или отсутствия сетевого выхода. s1 s2
Практический маршрут: задача → конкретная модель и GPU → SGLang → тестовый запрос → метрики → решение об изменении нагрузки. Если вам ещё нужен первый успешный ответ, начните с гайда запуска SGLang; пример документации использует qwen/qwen2.5-0.5b-instruct, но модель и её весовые файлы здесь не скачивались и пригодность к вашему железу не измерялась. Конфигурация NVIDIA sm80+ в quickstart — условия его примера, не универсальное аппаратное требование для всех вариантов SGLang. s3 s5
Как включить сбор на существующем локальном сервере?
Нужны установленный SGLang совместимой версии, рабочий inference-сервер с выбранной моделью и право перезапустить его. Проверьте свою версию, платформу и зависимости по установке SGLang и официальной документации: этот материал не обещает, что произвольный GPU запустит выбранные веса. В отдельном терминале перезапустите ваш сервер, добавив --enable-metrics к привычным параметрам. Следующий пример адаптирован из quickstart для тестовой модели, а не подтверждён запуском Modelium: s1 s3 s5
python3 -m sglang.launch_server \
--model-path qwen/qwen2.5-0.5b-instruct \
--host 127.0.0.1 --port 30000 --enable-metrics
Параметр --host 127.0.0.1 в этом примере оставляет API и /metrics доступными лишь с той же машины. Не копируйте в публичный контейнер вариант quickstart с --host 0.0.0.0 без отдельной сетевой политики: /metrics публикуется на HTTP-сервере, а не на отдельном «тайном» порту. Если Prometheus находится на другой машине, понадобится контролируемый путь доступа; не открывайте порт всем адресам ради диагностики. s1 s3 s6
После сообщения сервера о готовности сначала проверьте endpoint на той же машине: s1 s3
curl -fsS http://127.0.0.1:30000/metrics | \
grep -E '^sglang:(num_queue_reqs|num_running_reqs|time_to_first_token_seconds)' | \
head -20
Ненулевой HTTP-ответ или наличие строк говорит только о работающей выдаче метрик, не о готовности к вашей нагрузке. Не принимайте числа из образца экспорта в документации за замер собственной системы. s1 s2
Как проверить метрики одним контролируемым запросом?
Отправьте запрос к уже поднятой модели через документированный /v1/chat/completions; имя модели в JSON должно соответствовать фактическому запуску. Это тест синтаксиса и наблюдения, не прогноз скорости. Используйте вымышленный текст вместо клиентских данных. s3 s4
curl -fsS http://127.0.0.1:30000/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{"model":"qwen/qwen2.5-0.5b-instruct","messages":[{"role":"user","content":"Ответь одним словом: готово"}],"max_tokens":16}'
curl -fsS http://127.0.0.1:30000/metrics | \
grep -E '^sglang:(num_queue_reqs|num_running_reqs|time_to_first_token_seconds_(count|sum)|generation_tokens_total)'
Проверяйте успешный HTTP-ответ и JSON с ответом, затем сравнивайте счётчики и гистограммы до и после запроса. num_queue_reqs и num_running_reqs — моментальные gauges: при одиночном запросе выборка после завершения может снова показать ноль. Если хотите увидеть очередь, нужен контролируемый параллельный тест в отдельной среде, где вы знаете пределы GPU и влияние на других пользователей; не создавайте искусственный пик на рабочем сервере. Отсутствие очереди не доказывает, что задержка под будущей нагрузкой сохранится. s2 s3
Какие серии читать в Prometheus?
sglang:num_queue_reqs— запросы, ожидающие обслуживания;sglang:num_running_reqs— текущие запросы в работе. Сопоставляйте обе серии с потоком запросов во времени, а не с единственным снимком. s2sglang:time_to_first_token_seconds— histogram времени до первого токена (TTFT);sglang:e2e_request_latency_seconds— полная задержка запроса. Сравнивайте одну и ту же модель/маршрут и одинаковый тип нагрузки._sumи_countявляются составными частями гистограммы: отношение их скоростей изменения за одинаковый интервал показывает среднее по наблюдениям, не p95 и не задержку одного пользователя. s2sglang:prompt_tokens_totalиsglang:generation_tokens_total— счётчики обработанных токенов;sglang:cache_hit_rate— показатель попаданий в cache. Без условий запросов и режима cache сравнение «быстрее после настройки» нельзя приписывать одному флагу. s2
Не копируйте примерные значения и метки из документации в отчёт как свои. У Prometheus проверьте Targets: статус UP означает, что сбор состоялся, но не подтверждает полезность интерпретации. Для рабочего решения сохраните версию SGLang, модель/ревизию, железо, параметры запуска, интервал, параллелизм и набор тестовых запросов. s2 s6
Как подключить Prometheus, не открывая метрики наружу?
Официальный пример examples/monitoring использует prometheus.yaml с target 127.0.0.1:30000 и docker-compose.yaml с network_mode: host, то есть контейнер Prometheus разделяет сетевое пространство хоста. Только при таком устройстве на Linux loopback контейнера указывает на тот же сервер; у обычного bridge-контейнера 127.0.0.1 означает сам контейнер. Убедитесь, что наблюдатель действительно достигает SGLang, прежде чем доверять пустому графику. s6 s7 s8
scrape_configs:
- job_name: sglang
static_configs:
- targets: ['127.0.0.1:30000']
При желании используйте примерный dashboard SGLang, но сначала пересмотрите сетевые настройки образца: его Compose включает host network для Prometheus и Grafana и GF_AUTH_ANONYMOUS_ENABLED=true с viewer-доступом. Не выкладывайте этот Compose на общедоступный узел без ограничения доступа, настройки учётных записей и явного решения по сети. Prometheus и Grafana не обязательны для первого локального curl /metrics. s6 s8
Почему график пуст и когда остановиться?
Если /metrics недоступен, убедитесь, что сервер поднялся, --enable-metrics действительно передан процессу сервера, адрес/порт совпадают, а curl запущен из той же сетевой среды. Если сам endpoint доступен, но Prometheus показывает DOWN, проверьте target и namespace контейнера; если показывает UP, но TTFT пуст, сначала отправьте тестовый запрос и проверьте ответ API. Не путайте нулевое значение gauge после запроса с отсутствием серии и не интерпретируйте мгновенное значение как p95. s1 s2 s3 s7 s8
Не включайте --log-requests или дамп запросов просто ради /metrics: документация рассматривает журналы и request dump как отдельные функции. Они могут захватывать содержимое запросов и требуют отдельного решения о хранении данных. После испытания уберите тестовую нагрузку; чтобы отключить экспорт, перезапустите сервер без --enable-metrics, сохраняя рабочие параметры модели и доступа. s1
Основной следующий шаг: откройте гайд запуска SGLang, поднимите подходящую модель и подтвердите ответ её API, затем соберите собственный снимок /metrics до и после безопасного теста. Сравнение SGLang и vLLM поможет выбрать иной runtime, а оценка видеопамяти — понять аппаратные ограничения; ничто из этого не заменяет измерение на вашем сервере. s2 s3
Источники
- SGLang v0.5.20 — Observability — revision 94602c9c2b7cbdb8efd5c52802dac6a1c180089e. Получено 28.09.2026.
- SGLang v0.5.20 — Production Metrics — revision 94602c9c2b7cbdb8efd5c52802dac6a1c180089e. Получено 28.09.2026.
- SGLang v0.5.20 — Quickstart — revision 94602c9c2b7cbdb8efd5c52802dac6a1c180089e. Получено 28.09.2026.
- SGLang v0.5.20 — OpenAI-compatible Completions API — revision 94602c9c2b7cbdb8efd5c52802dac6a1c180089e. Получено 28.09.2026.
- SGLang v0.5.20 — Installation — revision 94602c9c2b7cbdb8efd5c52802dac6a1c180089e. Получено 28.09.2026.
- SGLang v0.5.20 — Monitoring example README — revision 94602c9c2b7cbdb8efd5c52802dac6a1c180089e. Получено 28.09.2026.
- SGLang v0.5.20 — Prometheus scrape configuration — revision 94602c9c2b7cbdb8efd5c52802dac6a1c180089e. Получено 28.09.2026.
- SGLang v0.5.20 — Monitoring Docker Compose configuration — revision 94602c9c2b7cbdb8efd5c52802dac6a1c180089e. Получено 28.09.2026.