Ответ
Мониторинг CI/CD — это не просто отслеживание статусов, а сбор метрик для оптимизации процесса доставки. В моей практике это многоуровневая система.
1. Сбор метрик в Prometheus Инструментирую пайплайны для экспорта ключевых метрик:
Для Jenkins с плагином Prometheus:
pipeline {
agent any
options {
timestamps()
}
stages {
stage('Build') {
steps {
script {
def startTime = System.currentTimeMillis()
// Шаги сборки
sh 'mvn clean package'
def duration = System.currentTimeMillis() - startTime
// Экспорт метрики
prometheusMetric(
name: 'jenkins_build_duration_seconds',
type: 'GAUGE',
labels: [
project: env.JOB_NAME,
branch: env.GIT_BRANCH
],
value: duration / 1000
)
}
}
}
}
post {
always {
// Метрика успешности
prometheusMetric(
name: 'jenkins_build_status',
type: 'GAUGE',
labels: [
project: env.JOB_NAME,
status: currentBuild.currentResult
],
value: currentBuild.currentResult == 'SUCCESS' ? 1 : 0
)
}
}
}
Для GitLab CI с текстовым форматом Prometheus:
build_job:
script:
- start=$(date +%s)
- mvn clean package
- end=$(date +%s)
- duration=$((end - start))
- echo "gitlab_ci_job_duration_seconds{job="$CI_JOB_NAME", pipeline="$CI_PIPELINE_ID"} $duration" > metrics.txt
artifacts:
reports:
metrics: metrics.txt
2. Дашборды в Grafana Создаю дашборды с ключевыми метриками:
- Скорость доставки: Lead Time, Deployment Frequency
- Качество: Success Rate, Failure Rate по причинам
- Производительность: Среднее время выполнения этапов
- Ресурсы: Использование агентов, очередь задач
3. Централизованные логи в ELK Stack Настраиваю сбор и парсинг логов:
# Filebeat конфигурация для Jenkins
filebeat.inputs:
- type: log
paths:
- /var/jenkins_home/jobs/*/builds/*/log
fields:
source: jenkins
json.keys_under_root: true
json.add_error_key: true
4. Алертинг через Alertmanager Настраиваю алерты на:
- Повторяющиеся фейлы (3 failures in 1 hour)
- Долгие выполнения (build > 30 minutes)
- Высокую нагрузку (queue > 10 jobs)
- Проблемы с агентами (agent offline > 5 min)
5. Интеграции для уведомлений
- Slack: Статусы пайплайнов + алерты в отдельные каналы
- Jira: Автоматическое создание тикетов при фейлах
- PagerDuty: Критические алерты для on-call инженеров
6. Отчеты и аналитика Еженедельно анализирую DORA-метрики:
- Deployment Frequency
- Lead Time for Changes
- Change Failure Rate
- Mean Time to Recovery
Пример запроса для расчета Lead Time:
-- Из базы данных GitLab
SELECT
EXTRACT(EPOCH FROM (merged_at - created_at)) / 3600 as lead_time_hours,
COUNT(*) as merge_count
FROM merge_requests
WHERE merged_at > NOW() - INTERVAL '30 days'
GROUP BY 1
ORDER BY 1; Ответ 18+ 🔞
Давай я тебе на пальцах объясню, как за мониторинг CI/CD браться, а то иначе можно в дебри уйти, как слепой крот. Это ж не просто посмотреть, зелёный пайплайн или красный — это целая наука, чтобы понять, где у тебя бутылочное горлышло и почему всё тормозит, как черепаха в патруле.
1. Сбор метрик — основа основ, без них ты слепой Нужно всё инструментировать, чтобы Prometheus мог эти данные хавать. Без цифр — ты просто гадаешь на кофейной гуще.
Вот как в Jenkins это прикрутить:
pipeline {
agent any
options {
timestamps()
}
stages {
stage('Build') {
steps {
script {
def startTime = System.currentTimeMillis()
// Шаги сборки
sh 'mvn clean package'
def duration = System.currentTimeMillis() - startTime
// Экспорт метрики
prometheusMetric(
name: 'jenkins_build_duration_seconds',
type: 'GAUGE',
labels: [
project: env.JOB_NAME,
branch: env.GIT_BRANCH
],
value: duration / 1000
)
}
}
}
}
post {
always {
// Метрика успешности
prometheusMetric(
name: 'jenkins_build_status',
type: 'GAUGE',
labels: [
project: env.JOB_NAME,
status: currentBuild.currentResult
],
value: currentBuild.currentResult == 'SUCCESS' ? 1 : 0
)
}
}
}
Суть в чём? Ты засекаешь, сколько сборка жрёт времени, и выплевываешь это в метрики. Потом смотришь — о, этот проект собирается 20 минут, ёпта, это же пиздец какой-то, надо разбираться.
В GitLab CI попроще, там текстовый формат:
build_job:
script:
- start=$(date +%s)
- mvn clean package
- end=$(date +%s)
- duration=$((end - start))
- echo "gitlab_ci_job_duration_seconds{job="$CI_JOB_NAME", pipeline="$CI_PIPELINE_ID"} $duration" > metrics.txt
artifacts:
reports:
metrics: metrics.txt
Записал время в файлик — и всё, GitLab сам его подхватит. Красота.
2. Дашборды в Grafana — тут твои глаза и уши Накидал панелек, чтобы одним взглядом видеть всю картину. Что смотреть в первую очередь?
- Скорость: За сколько фича от коммита до продакшена доезжает. Если месяц — это пизда.
- Качество: Сколько сборок падает и главное — почему. Если из-за тестов — одно дело, а если из-за того, что кто-то криво код залил — другое.
- Производительность: Какие этапы самые долгие. Может, тесты по 40 минут бегут, а может, артефакты на Nexus полчаса грузятся.
- Ресурсы: Все ли воркеры живы, или половина легла, и задачи в очереди висят, как говно в проруби.
3. Логи в ELK — чтобы когда всё ебнулось, понять, кто виноват
Настроил Filebeat на сбор логов с Jenkins, чтобы не лазить по сервакам и не гонять tail -f.
# Filebeat конфигурация для Jenkins
filebeat.inputs:
- type: log
paths:
- /var/jenkins_home/jobs/*/builds/*/log
fields:
source: jenkins
json.keys_under_root: true
json.add_error_key: true
Теперь все ошибки в одном месте, можно искать, фильтровать. Упала сборка — зашел в Kibana, нашёл по ID, и сразу видно, на каком шаге и какая ошибка вылезла. Волшебно, а не жизнь.
4. Алертинг — чтобы не проебать критическую проблему Настроил Alertmanager на вменяемые алерты, а не на каждый чих. Иначе заспамит так, что все уведомления в игнор улетят.
- Три фейла подряд за час — это уже не случайность, а закономерность, пора бить в колокола.
- Сборка дольше 30 минут — что-то пошло не так, возможно, зависло или утекло.
- Очередь из 10 задач — воркеров не хватает, пора масштабироваться.
- Агент офлайн 5 минут — возможно, он просто перезагружается, а возможно, сдох окончательно.
5. Уведомления — чтобы нужные люди знали в нужное время
- Slack: Зелёный пайплайн — в общий канал, для позитива. Красный — в канал команды, чтобы быстро среагировали. Критический алерт — лично в личку ответственным. Идеально.
- Jira: Если сборка упала из-за бага в тикете — автоматом создаётся подзадача или комментарий. Чтобы не потерялось.
- PagerDuty: Если всё совсем плохо и продакшн лежит — пусть дежурный инженер просыпается в три ночи. Зато быстро починят.
6. Отчеты и аналитика — для начальства и саморазвития Раз в неделю/месяц смотрю на эти ваши модные DORA-метрики. Не для галочки, а чтобы тренды видеть.
- Стали деплоить реже? Почему?
- Lead Time вырос? Где затык?
- Failure Rate подскочил? Что сломали?
Вот пример, как посчитать, сколько в среднем мерж-реквест висит:
-- Из базы данных GitLab
SELECT
EXTRACT(EPOCH FROM (merged_at - created_at)) / 3600 as lead_time_hours,
COUNT(*) as merge_count
FROM merge_requests
WHERE merged_at > NOW() - INTERVAL '30 days'
GROUP BY 1
ORDER BY 1;
Если цифра большая — значит, код ревью тормозит, или тесты долгие, или просто разработчики забили хуй. В любом случае, повод копнуть.
Короче, смысл всего этого — не просто наблюдать, а понимать и улучшать. Чтобы процесс летал, а не ползал, как рак по шерсти. Иначе зачем всё это, если в итоге всё равно всё через жопу работает?