Ответ
Мониторинг 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;