Статический GitLab Runner
Хост
| Параметр | Значение |
|---|---|
| VM | gitlab-runner-build, id fv4d9jn4bkj3cbb7vvkg |
| Folder | stage (b1g0rtnr6jduaog2q06m) |
| Адрес | 84.201.181.3, node_exporter на :9100, job static-gitlab-runner |
| Доступ | ssh -l sarex 84.201.181.3, далее sudo |
| Раннер | gitlab-runner.service, executor docker, concurrent = 4, конфигурация /etc/gitlab-runner/config.toml |
| Docker | 29.x, встроенный BuildKit, данные в /var/lib/docker |
| Своп | /swapfile 8G |
| Управление | вручную, VM не описана в terraform и ansible |
Правила алертов: kube-prometheus-stack/.helm/templates/alerts/staticGitlabRunner.yaml.
Конфигурация раннера содержит токены. Файл целиком не выводить, нужные ключи читать через grep по имени ключа.
Алерты
Заполнение диска разобрано отдельно: StaticGitlabRunnerDiskAlmostFull.
| Алерт | Severity | Условие | Первая проверка |
|---|---|---|---|
StaticGitlabRunnerNodeExporterDown |
critical | up == 0 дольше 2m |
ssh на хост. Нет ответа: VM в консоли Yandex Cloud, serial-лог. Есть ответ: systemctl status node_exporter |
StaticGitlabRunnerInodesUsageCritical |
critical | занято больше 90% inode дольше 10m | df -i /, затем sudo docker system prune по шагам из ранбука диска |
StaticGitlabRunnerCpuUsageCritical |
critical | CPU больше 90% дольше 15m | top, sudo docker stats --no-stream: какая джоба нагружает |
StaticGitlabRunnerMemoryUsageCritical |
critical | занято больше 90% памяти дольше 10m | free -h, sudo docker stats --no-stream |
StaticGitlabRunnerMemoryPressureHigh |
critical | PSI memory waiting больше 20% дольше 10m | то же, что для памяти. Хост близок к зависанию, тяжёлую джобу отменить в GitLab |
StaticGitlabRunnerSwapUsageHigh |
warning | занято больше 50% свопа дольше 10m | free -h, sudo docker stats --no-stream |
StaticGitlabRunnerLoadCritical |
critical | load15 больше 2 на ядро дольше 15m | top, iostat -x 5 3: CPU или ожидание диска |
StaticGitlabRunnerDiskIoSaturationCritical |
critical | диск занят больше 90% времени дольше 15m | iostat -x 5 3, sudo iotop -o |
StaticGitlabRunnerNetworkErrorsWarning |
warning | растут RX/TX errors на внешнем интерфейсе | ip -s link, последние строки dmesg -T |
StaticGitlabRunnerFilesystemReadonly |
critical | ФС смонтирована read-only дольше 2m | dmesg -T, искать строки с ext4 и I/O error. Обычно это ошибка диска, нужен перезапуск VM и fsck |
StaticGitlabRunnerRebooted |
warning | uptime меньше 10 минут | journalctl -b -1 -n 100: причина перезагрузки |
StaticGitlabRunnerRebootLoop |
critical | больше одной перезагрузки за 2h | journalctl --list-boots, journalctl -b -1 -n 200: OOM, kernel panic |
StaticGitlabRunnerServiceDown |
critical | gitlab-runner.service не active дольше 2m |
systemctl status gitlab-runner, journalctl -u gitlab-runner -n 100 |
StaticGitlabRunnerSystemdMetricsMissing |
warning | нет метрики node_systemd_unit_state для gitlab-runner.service дольше 30m |
ps -o args= -C node_exporter: должны быть флаги --collector.systemd --collector.systemd.unit-include=gitlab-runner.service |
Зависание под нагрузкой на память
Джобы не ограничены по памяти. Одна тяжёлая сборка (LTO, npm run build-module) способна занять всю память хоста. До добавления свопа хост полностью переставал отвечать на сеть и SSH. Признаки в журнале перед зависанием: Under memory pressure, flushing caches от systemd-journald и systemd-resolved.
Если хост не отвечает: перезапустить VM из консоли Yandex Cloud, после загрузки найти джобу по journalctl -b -1 и времени зависания.
Критерий закрытия
- Условие алерта не выполняется.
- Алерт перешёл в
inactive.