Перейти к содержанию
modelium.
Начать с задачи
←

SGLang и Prometheus: метрики очереди локального сервера

Для мониторинга 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 — текущие запросы в работе. Сопоставляйте обе серии с потоком запросов во времени, а не с единственным снимком. s2
  • sglang:time_to_first_token_seconds — histogram времени до первого токена (TTFT); sglang:e2e_request_latency_seconds — полная задержка запроса. Сравнивайте одну и ту же модель/маршрут и одинаковый тип нагрузки. _sum и _count являются составными частями гистограммы: отношение их скоростей изменения за одинаковый интервал показывает среднее по наблюдениям, не p95 и не задержку одного пользователя. s2
  • sglang: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

Источники

  1. SGLang v0.5.20 — Observability — revision 94602c9c2b7cbdb8efd5c52802dac6a1c180089e. Получено 28.09.2026.
  2. SGLang v0.5.20 — Production Metrics — revision 94602c9c2b7cbdb8efd5c52802dac6a1c180089e. Получено 28.09.2026.
  3. SGLang v0.5.20 — Quickstart — revision 94602c9c2b7cbdb8efd5c52802dac6a1c180089e. Получено 28.09.2026.
  4. SGLang v0.5.20 — OpenAI-compatible Completions API — revision 94602c9c2b7cbdb8efd5c52802dac6a1c180089e. Получено 28.09.2026.
  5. SGLang v0.5.20 — Installation — revision 94602c9c2b7cbdb8efd5c52802dac6a1c180089e. Получено 28.09.2026.
  6. SGLang v0.5.20 — Monitoring example README — revision 94602c9c2b7cbdb8efd5c52802dac6a1c180089e. Получено 28.09.2026.
  7. SGLang v0.5.20 — Prometheus scrape configuration — revision 94602c9c2b7cbdb8efd5c52802dac6a1c180089e. Получено 28.09.2026.
  8. SGLang v0.5.20 — Monitoring Docker Compose configuration — revision 94602c9c2b7cbdb8efd5c52802dac6a1c180089e. Получено 28.09.2026.