Перейти к содержимому

GitLab (self-managed)

Обслуживает ли запросы самостоятельно развёрнутый экземпляр GitLab и справляются ли части, которые незаметно несут на себе всё остальное: очереди Sidekiq, раннеры CI/CD, миграции базы данных, оставшиеся после обновления, и — для GitLab Enterprise Edition — лицензия.

DumbMonit читает /api/v4/version с помощью персонального токена доступа — это единственный вызов, который обязан завершиться успешно: он доказывает, что GitLab отвечает и токен действителен. Всё остальное — Sidekiq, раннеры, миграции, статистика экземпляра, настройки регистрации и двухфакторной аутентификации, лицензия и подробная проверка готовности — читается через эндпоинты, которые GitLab резервирует для учётных записей администраторов, и пропускается без сбоя опроса, если токен принадлежит обычной учётной записи.

Сбой, за которым стоит следить: отставание Sidekiq. GitLab продолжает отдавать страницы, пока очередь его фоновых воркеров растёт, и ничто на странице об этом не говорит, пока уведомление, вебхук или обновление конвейера CI не опоздает на минуты или часы.

Все метрики имеют префикс dumbmonit_gitlab_.

МетрикаЧтоМетки
version_infoзначение 1version, revision
readiness_check1, когда компонент проверки готовности (база данных, кэш, очереди, общее состояние, Gitaly) не в состоянии ok; отсутствует, если GitLab не предоставляет её DumbMonit (см. ниже)check
sidekiq_queue_backlog, sidekiq_queue_latency_secondsожидающие задания и их возраст, по очередям Sidekiqqueue
runners_total, runners_online, runners_offlineраннеры CI/CD, известные экземпляру
runner_offlineзначение 1 для каждого отключённого раннера (не более 32)runner
migrations_pendingмиграции базы данных, которые осталось применить
migration_pendingзначение 1 для каждой ожидающей миграции (не более 32)migration
projects, users, groups, forks, issues, merge_requestsсчётчики по всему экземпляру
signup_enabled1, пока открыта публичная регистрация
two_factor_required1, пока каждый пользователь обязан настроить двухфакторную аутентификацию
license_infoзначение 1 (только Enterprise Edition)plan
license_expired, license_expiry_secondsистекла ли лицензия и сколько времени осталось
pipelines_failed_recent, pipelines_pendingнеудавшиеся конвейеры за окно просмотра и конвейеры, ожидающие или выполняющиеся сейчас — только для проектов, перечисленных в параметре “Projects watched for CI health”project
scrape_errorsвызовы, доступные только администратору, которые завершились неудачей при последнем опросе (0 при обычном токене, для которого они не выполнялись)

Применяются встроенные правила: все раннеры GitLab отключены, высокий backlog Sidekiq в GitLab, ожидающие миграции GitLab, истекающая лицензия GitLab, а также Монитор недоступен. Оценка безопасности проверяет настройки двухфакторной аутентификации и регистрации, а также ожидающие миграции: см. Обновления вендора и другие проверки.

В собственном REST API GitLab нет эндпоинта, который сообщал бы «доступен более новый релиз GitLab»: в отличие от Nextcloud или Paperless-ngx, нет самостоятельно сообщаемого флага обновления, который можно было бы прочитать, поэтому DumbMonit его не заявляет. Сравнивайте версию выше со страницей релизов GitLab вручную или следите за уведомлением GitLab о проверке обновлений в области администратора.

Состояние конвейеров CI читается только для перечисленных вами проектов: в API GitLab нет эндпоинта «все неудавшиеся конвейеры» для всего экземпляра, есть только поэкземплярный для каждого проекта.

Панель над графиками показывает то, что сохранил опрос; открытие страницы никогда не обращается к GitLab. Сначала она сообщает, что не так (сбой компонента готовности, все раннеры отключены, большой backlog Sidekiq), затем версию, затем счётчики экземпляра и настройки, прочитанные через API администрирования.

Создание персонального токена доступа в учётной записи администратора

Заголовок раздела «Создание персонального токена доступа в учётной записи администратора»
  1. Создайте персональный токен доступа в учётной записи администратора: аватар → Edit profile → Access tokens → Add new token. Назовите его так, как показано ниже, задайте срок действия, который вам удобно продлевать, и отметьте только область read_api: она читает весь API и ничего не записывает.

    dumbmonit
  2. Очереди Sidekiq, раннеры CI, ожидающие миграции, статистика экземпляра, настройки регистрации и двухфакторной аутентификации и лицензия читаются каждая через эндпоинт только для администратора: более тонкого делегирования для них в GitLab нет. Токен обычной учётной записи всё равно работает; тогда читается только версия, а остальное пропускается без сбоя опроса.

  3. В DumbMonit введите адрес, по которому вы открываете GitLab, например “gitlab.example.com” (HTTPS на 443) или “https://git.example.com” за обратным прокси, и вставьте токен.

  4. Чтобы дополнительно отслеживать конвейеры CI, перечислите числовые ID проектов (они показаны на странице обзора каждого проекта, под его названием) в параметре “Projects watched for CI health” через запятую.

GitLab отвечает на /-/readiness кодом 404 любому клиентскому адресу, которого нет в его списке разрешённых для мониторинга (по умолчанию только 127.0.0.1; за Docker или обратным прокси DumbMonit приходит с другого адреса). DumbMonit считает этот 404 признаком «не предоставляется»: панель готовности остаётся пустой, и это не учитывается в scrape_errors. Чтобы включить её, добавьте адрес DumbMonit в gitlab.rb и выполните gitlab-ctl reconfigure:

gitlab_rails['monitoring_whitelist'] = ['127.0.0.0/8', '::1/128', '192.168.1.10/32']

Эндпоинт лицензии в Community Edition также отвечает 404, что тоже не является ошибкой.

Проверка токена вручную с хоста DumbMonit:

curl --header 'PRIVATE-TOKEN: YOUR-TOKEN' 'https://gitlab.example.com/api/v4/version'
Учётные данныеПоля
Персональный токен доступаОтправляется в заголовке PRIVATE-TOKEN.

Адрес: имя хоста (gitlab.example.com) или host:port. Параметры: протокол (по умолчанию HTTPS), порт (443), проверка сертификата, тайм-аут запроса (15 с), проекты, отслеживаемые для состояния CI (по умолчанию нет), и окно просмотра неудавшихся конвейеров (24 ч).

Проверено на GitLab Enterprise Edition 17.5 (по официальной документации API).