일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- opensearch
- 오퍼레이터
- Kubernetes 인증
- argo rollout
- Continuous Deployment
- gitops
- Argo
- Model Serving
- Kubernetes
- MLflow
- operator
- nginx ingress
- blue/green
- Pulumi
- serving
- gitea
- tekton
- CI/CD
- mlops
- argocd
- keda
- knative
- Litmus
- kubernetes operator
- CANARY
- Kopf
- seldon core
- opentelemetry
- 카오스 엔지니어링
- Kubeflow
- Today
- Total
Kubernetes 이야기
Prometheus를 사용하여 Jenkins 모니터링 본문
Jenkins로 CI/CD 를 구축한 경우에는 빌드 상태나 Jenkins 메모리 사용률, Plugin 상태 등으로 조회하고자 하는 경우가 발생한다.
특히 Namespace (Project) 단위로 여러 대의 Jenkins를 운영한다면 운영팀에서는 전체를 파악할 필요가 있다. 그리고 이러한 문제가 있는 경우 알람은 필수이다.
- Jenkins Worker가 Offline(연결실패)인 경우 알람 발생
- Queue에 대기 중인 Job이 계속 많은 경우 알람 발생
이러한 경우 Prometheus의 데이터를 이용하여 AlertManager 와의 연동 또는 Grafana의 Alarm 기능과 연동할 수 있다.
그럼 설정에 앞서 우선 Prometheus와 Jenkins를 먼저 설치해 보자. 설치 방법은 다음을 참고한다.
Prometheus 설치
https://kmaster.tistory.com/73
Jenkins 설치
https://kmaster.tistory.com/113
Jenkins에서 Prometheus 플러그인 설치
Prometheus metrics 플러그인을 설치한다.
설치 후 jenkins 관리 -> 시스템 설정에 가면 아래와 같이 Prometheus 설정이 자동으로 설정되어 있다.
metrics 정보가 정상적으로 출력되는지 다음과 같이 확인할 수 있다.
# curl 192.168.166.138:8080/prometheus/ ( ip는 pod ip )
# HELP default_jenkins_builds_health_score Health score of a job
# TYPE default_jenkins_builds_health_score gauge
default_jenkins_builds_health_score{jenkins_job="maven-build",repo="NA",buildable="true",} 20.0
# HELP default_jenkins_builds_last_build_result_ordinal Build status of a job.
# TYPE default_jenkins_builds_last_build_result_ordinal gauge
default_jenkins_builds_last_build_result_ordinal{jenkins_job="maven-build",repo="NA",buildable="true",} 0.0
# HELP default_jenkins_builds_last_build_result Build status of a job as a boolean (0 or 1)
# TYPE default_jenkins_builds_last_build_result gauge
default_jenkins_builds_last_build_result{jenkins_job="maven-build",repo="NA",buildable="true",} 1.0
# HELP default_jenkins_builds_last_build_duration_milliseconds Build times in milliseconds of last build
# TYPE default_jenkins_builds_last_build_duration_milliseconds gauge
default_jenkins_builds_last_build_duration_milliseconds{jenkins_job="maven-build",repo="NA",buildable="true",} 124821.0
# HELP default_jenkins_builds_last_build_start_time_milliseconds Last build start timestamp in milliseconds
# TYPE default_jenkins_builds_last_build_start_time_milliseconds gauge
default_jenkins_builds_last_build_start_time_milliseconds{jenkins_job="maven-build",repo="NA",buildable="true",} 1.662636302656E12
# HELP vm_memory_total_used_window_1h Generated from Dropwizard metric import (metric=vm.memory.total.used.window.1h, type=jenkins.metrics.util.AutoSamplingHistogram)
# TYPE vm_memory_total_used_window_1h summary
vm_memory_total_used_window_1h{quantile="0.5",} 7.38570336E8
vm_memory_total_used_window_1h{quantile="0.75",} 7.8836788E8
vm_memory_total_used_window_1h{quantile="0.95",} 8.274569024E8
vm_memory_total_used_window_1h{quantile="0.98",} 8.33052616E8
vm_memory_total_used_window_1h{quantile="0.99",} 8.33052616E8
vm_memory_total_used_window_1h{quantile="0.999",} 8.33052616E8
vm_memory_total_used_window_1h_count 47.0
# HELP jenkins_queue_blocked_history Generated from Dropwizard metric import (metric=jenkins.queue.blocked.history, type=jenkins.metrics.util.AutoSamplingHistogram)
# TYPE jenkins_queue_blocked_history summary
jenkins_queue_blocked_history{quantile="0.5",} 0.0
jenkins_queue_blocked_history{quantile="0.75",} 0.0
jenkins_queue_blocked_history{quantile="0.95",} 0.0
jenkins_queue_blocked_history{quantile="0.98",} 0.0
...
이제 Prometheus에 scrape_configs 설정을 하자.
- job_name: "Jenkins Job"
metrics_path: "/prometheus"
scheme: http
static_configs:
- targets: ["jenkins.jenkins:8080"]
상제한 설정 방법은 아래를 참고한다.
kubectl create secret generic additional-scrape-configs --from-file=prometheus-additional.yaml --dry-run=client -oyaml > additional-scrape-configs.yaml
kubectl apply -f additional-scrape-configs.yaml -n monitoring
prometheus.yaml 에 additionalScrapeConfigs를 추가한다.
# k edit -n monitoring prometheuses.monitoring.coreos.com k8s
...
additionalScrapeConfigs:
name: additional-scrape-configs
key: prometheus-additional.yaml
prometheus의 Target을 보면 정상적으로 scrape 되는 것을 볼 수 있다.
이제 Prometheus 에 쌓여있는 데이터를 Grafana 에서 조회해 보자. 샘플 dashboard를 위해 다음을 설치해 보자.
https://grafana.com/grafana/dashboards/12646-jenkins/
Grafana도 Prometheus와 마찬가지로 Ingress의 network policy 정책을 알맞게 수정해야 한다.
다운받은 템플릿을 Grafana에서 import 해보자.
'Kubernetes > 모니터링' 카테고리의 다른 글
Ingress 지표를 이용하여 SLO를 충족하기 위한 서비스 수준 지표 (SLI) (0) | 2022.12.28 |
---|---|
OpenCost (0) | 2022.11.26 |
Prometheus agent mode (0) | 2022.09.03 |
Cilium - Hubble UI를 이용한 애플리케이션 시각화 (0) | 2022.05.19 |
kind + cilium + hubble 구성하기 ( without kube-proxy ) (0) | 2022.05.16 |