Kubernetes 이야기

Prometheus를 사용하여 Jenkins 모니터링 본문

Kubernetes/모니터링

Prometheus를 사용하여 Jenkins 모니터링

kmaster 2022. 9. 8. 22:39
반응형

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

 

Prometheus-operator를 사용하여 Prometheus 및 Grafana 설치

Kubernetes에서는 다양한 Pod들이 서비스가 되고 있다. 이 때 모니터링은 관리자나 개발자에게 무엇보다 중요한 일이 될 것이다. Kubernetes에서 다양한 모니터링 솔루션들이 있으나, 가장 범용적으로

kmaster.tistory.com

 

Jenkins 설치

https://kmaster.tistory.com/113

 

jenkins 를 활용하여 Kubernetes에 이미지 배포 및 모니터링

Jenkins는 소프트웨어 개발 시 지속적 통합(CI) 서비스를 제공하는 툴로써 대시보드,Pipeline, 다양한 플러그인 등을 지원한다. Jenkins는 Kubernetes환경이 나오기 전부터 사용되던 툴로 PC 또는 VM 환경에

kmaster.tistory.com

 

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"]

상제한 설정 방법은 아래를 참고한다.

https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/additional-scrape-config.md

 

GitHub - prometheus-operator/prometheus-operator: Prometheus Operator creates/configures/manages Prometheus clusters atop Kubern

Prometheus Operator creates/configures/manages Prometheus clusters atop Kubernetes - GitHub - prometheus-operator/prometheus-operator: Prometheus Operator creates/configures/manages Prometheus clus...

github.com

 

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/

 

Jenkins

Edit Delete Confirm Cancel

grafana.com

Grafana도 Prometheus와 마찬가지로 Ingress의 network policy 정책을 알맞게 수정해야 한다.

다운받은 템플릿을 Grafana에서 import 해보자.

[import]

 

[실행현황]
[리소스현황]

 

반응형
Comments