DevOps BootCamp/모니터링

모니터링 시스템 구축 - kub prometheus

cloudmaster 2023. 6. 5. 21:26

1. nginx 인그레스 컨트롤러 설치

Helm을 이용해서 설치합니다. (minikube addon을 사용하는 것이 아닙니다) 이때 nginx 인그레스 컨트롤러가 프로메테우스용 메트릭을 노출해야 하므로, helm install 과정에서 반드시 설정해야 하는 옵션이 있습니다.

helm install ingress-nginx ingress-nginx/ingress-nginx \
--set controller.metrics.enabled=true \
--set controller.metrics.serviceMonitor.enabled=true

 

메트릭을 내보내도록 컨트롤러를 구성

controller.metrics.enabled와 controller.metrics.serviceMonitor.enabled 옵션을 true로 설정해야 합니다.

 

1.1 먼저 clone으로 operator를 받아옵니다.

https://github.com/prometheus-operator/prometheus-operator

 

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

 

1.2 프로메테우스 웹 UI에서 ingress-nginx-controller가 타겟으로 설정되어 있는지 확인하기

nginx ingress controller가 성공적으로 설치

 

프로메테우스 웹 UI에 접속하기 위해 프로메테우스 서비스를 포워드

kubectl --namespace monitoring port-forward svc/prometheus-k8s 9090

 

 

2. 인그레스 생성

인그레스 컨트롤러는 일반적으로 로드 밸런서를 사용해서 인그레스를 수행할 책임이 있으며, 트래픽을 처리하는데 도움이 되도록 에지 라우터 또는 추가 프런트 엔드를 구성할 수도 있습니다.

 

 

2.1. 인그레스 리소스

원하는 아키텍처에 따라 Ingress를 설정

 -> 이 Ingress 설정이 작동하려면, cozserver라는 이름의 서비스가 이미 존재해야 하며, 이 서비스는 8055포트에서 수신 대기해야 합니다.

 

cozserver-service.yaml, cozserver-deployment-v1.yaml apply를 이용한 배포 적용

 

 

 

3. 인그레스 접속 로그가 찍히는지 프로메테우스를 통해 확인

위와 같은 아키텍처로 구성을 완료했다면 http://localhost로 접근 시 인그레스를 통해 cozserver에 접속됩니다. 프로메테우스 웹 UI Graph 메뉴를 클릭하고, nginx_ingress_controller_requests라고 입력 후 Execute 버튼을 눌러 쿼리를 보내면, 접속 현황을 조회할 수 있습니다. 오른쪽에 보이는 숫자가 접속 횟수입니다.

SRE의 네 가지의 황금 시그널을 보기 위해 필요한 메트릭의 종류는 다음과 같습니다.

  • 트래픽, 오류
    • nginx_ingress_controller_requests

 

  • 대기 시간
    • nginx_ingress_controller_request_duration_seconds_count
    • nginx_ingress_controller_request_duration_seconds_bucket

 

  • 포화 수준
    • node_cpu_seconds_total

프로메테우스가 지원하는 PromQL을 통해 다음과 같이 복잡한 지표를 표현할 수도 있습니다.

 

예) 1시간 동안 인그레스 컨트롤러를 통해 들어온 요청의 누적 비율

sum(rate(
  nginx_ingress_controller_requests[1h]
)) 
by (ingress)

예) 1시간 동안 모든 요청 중 400번대 에러의 비율

sum(rate(
  nginx_ingress_controller_requests{
    status=~"4.."
  }[1h]
))
by (ingress) /
sum(rate(
  nginx_ingress_controller_requests[1h]
))
by (ingress)

 

 

 

4. Grafana 대시보드 살펴보기

Grafana 노출

kubectl --namespace monitoring port-forward svc/grafana 3000

그라파나에 접속하고 로그인을 완료하면, 다양한 대시보드가 미리 준비되어 있습니다. 각 Panel에서 사용하는 메트릭을 살펴보고, 어떤 PromQL을 통해 쿼리하는지 알아보세요.

 

Panel의 제목을 클릭하고 Edit 버튼을 누르면, 다음과 같이 쿼리문을 확인할 수 있습니다.