#Логи сервиса
GET /v1/infra/servers/:id/logs
Возвращает логи BLACKHOLE-сервера через системную утилиту journalctl. Без параметра service читается весь системный журнал (все сервисы и общесистемные сообщения). Для логов конкретного systemd-юнита — передайте service (по умолчанию при деплое создаётся app.service, если не указали другое имя). Поддерживает фильтрацию по количеству строк, временному окну и подстроке.
#Параметры
| Параметр | В | Тип | Обяз. | По умолч. | Описание |
|---|---|---|---|---|---|
id |
path | string (UUID) | да | — | ID BLACKHOLE-сервера |
service |
query | string | нет | — | Имя systemd-юнита: app, crm-dashboard, и т. п. Не указывайте расширение .service. По умолчанию читается весь системный журнал |
lines |
query | number | нет | 50 | Количество строк, 1–500 |
since |
query | string | нет | — | Временная метка в формате утилиты journalctl: "1 hour ago", "2026-04-22 10:00:00", "10 minutes ago" |
grep |
query | string | нет | — | Подстрока для фильтра, до 200 символов |
#Примеры
#curl — личный ключ
# Логи приложения за последний час с фильтром по "error"
curl -H "X-Api-Key: YOUR_API_KEY" \
"https://vibecode.bitrix24.tech/v1/infra/servers/SERVER_ID/logs?service=app&lines=100&since=1%20hour%20ago&grep=error"
# Весь системный журнал, последние 10 строк (для отладки cloud-init)
curl -H "X-Api-Key: YOUR_API_KEY" \
"https://vibecode.bitrix24.tech/v1/infra/servers/SERVER_ID/logs?lines=10"
#curl — OAuth-приложение
curl -H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
"https://vibecode.bitrix24.tech/v1/infra/servers/SERVER_ID/logs?service=app&lines=50"
#JavaScript — личный ключ
const params = new URLSearchParams({
service: 'app',
lines: '100',
since: '30 minutes ago',
})
const res = await fetch(
`https://vibecode.bitrix24.tech/v1/infra/servers/${serverId}/logs?${params}`,
{ headers: { 'X-Api-Key': 'YOUR_API_KEY' } }
)
const { data } = await res.json()
data.logs.forEach(line => console.log(line))
#JavaScript — OAuth-приложение
const res = await fetch(
`https://vibecode.bitrix24.tech/v1/infra/servers/${serverId}/logs?service=app&lines=50`,
{
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
}
)
#Поля ответа
| Поле | Тип | Описание |
|---|---|---|
success |
boolean | Всегда true при успехе |
data.service |
string | null | Эхо параметра ?service=, или null если не передавался |
data.logs |
array<string> | Основное поле. Строки логов в порядке поступления (новые — в конце массива) |
data.lines |
array<string> | Алиас data.logs (тот же массив). Сохранён для backward compat — в новом коде используйте data.logs |
data.requestedLines |
number | Эхо ?lines= параметра (валидировано 1–500, default 50) |
data.returnedLines |
number | Длина data.logs |
data.since |
string | null | Эхо ?since=, или null |
data.grep |
string | null | Эхо ?grep=, или null |
data.hint |
string | Опционально. Диагностика когда data.logs.length === 0 |
#Пример ответа
{
"success": true,
"data": {
"service": null,
"logs": [
"Apr 22 11:17:02 epd65hdv07p8g89c0c06 CRON[1406]: pam_unix(cron:session): session closed for user root",
"Apr 22 11:17:27 epd65hdv07p8g89c0c06 vibe-agent[1098]: 2026/04/22 11:17:27 [exec] id= timeout=10s workdir=\"\" command=\"uname -a\"",
"Apr 22 11:17:28 epd65hdv07p8g89c0c06 cloud-init[975]: Reading package lists..."
],
"lines": [
"Apr 22 11:17:02 epd65hdv07p8g89c0c06 CRON[1406]: pam_unix(cron:session): session closed for user root",
"Apr 22 11:17:27 epd65hdv07p8g89c0c06 vibe-agent[1098]: 2026/04/22 11:17:27 [exec] id= timeout=10s workdir=\"\" command=\"uname -a\"",
"Apr 22 11:17:28 epd65hdv07p8g89c0c06 cloud-init[975]: Reading package lists..."
],
"requestedLines": 50,
"returnedLines": 3,
"since": null,
"grep": null
}
}
#Пример ответа при ошибке
400 — сервер в OPEN-режиме:
{
"success": false,
"error": {
"code": "NOT_BLACKHOLE",
"message": "Deployment API only available for BLACKHOLE servers"
}
}
#Ошибки
| HTTP | Код | Описание |
|---|---|---|
| 400 | VALIDATION_ERROR |
Нарушена схема: lines вне 1–500, grep длиннее 200 символов |
| 400 | NOT_BLACKHOLE |
Сервер в режиме OPEN — Deploy API недоступен |
| 401 | MISSING_API_KEY |
Не передан заголовок X-Api-Key |
| 401 | INVALID_API_KEY |
Неверный или просроченный API-ключ |
| 404 | NOT_FOUND |
Сервер не существует, удалён или принадлежит другому API-ключу |
| 409 | AGENT_NOT_CONNECTED |
Агент туннеля не в статусе CONNECTED |
| 429 | RATE_LIMIT_EXCEEDED |
Превышен лимит 10 операций в минуту на сервер |
| 502 | GATEWAY_ERROR |
Gateway вернул ошибку |
Полный список общих ошибок API — Ошибки.
#Известные особенности
- Формат строк — как выдаёт
journalctl. Каждая строка уже содержит время, имя хоста, имя процесса и его PID — дополнительная обработка на клиенте не нужна, выводите как есть. - Фильтр
grep— простая подстрока, не регулярное выражение. Для сложных паттернов выгружайте больше строк и фильтруйте на клиенте. - Логи агента туннеля видны без
service— под именемvibe-agent. Полезно для диагностики, когда приложение не отвечает через Deploy API. Просто не передавайте параметрservice— увидите весь системный журнал, включаяvibe-agent, cloud-init и другие общесистемные сообщения. - Лимит 500 строк помножен на ограничение 10 вызовов в минуту — за минуту можно прочитать максимум 5000 строк. Для большего объёма логов — несколько вызовов с разными
sinceи аккуратно к лимиту.
#Смотрите также
- Полный деплой — посмотреть, какое имя сервиса создаётся.
- Выполнить команду —
journalctl -u app -fдля потокового чтения логов в реальном времени черезexec. - Метрики туннеля — активность агента и HTTP-соединения.