DevOps BootCamp/모니터링

모니터링 시스템 구축

cloudmaster 2023. 6. 5. 15:16

Bare Minimum Requirement

  • Prometheus Operator가 설치된 환경에서 nginx 인그레스 컨트롤러를 설치합니다.
  • cozserver (v2)의 디플로이먼트 및 서비스를 배포하고, 인그레스를 만들어서 nginx를 통해 서비스에 접근하게 합니다.
  • Prometheus에서 쿼리를 통해 주요 메트릭을 확인합니다.
  • Grafana에 이미 존재하는 대시보드들을 살펴보고, 어떤 쿼리를 사용하는지 확인합니다.

 

1. nginx 인그레스 컨트롤러 설치(레퍼런스 2 참고)

Helm이 있는 경우 다음 명령을 사용하여 수신 컨트롤러를 배포할 수 있음

helm upgrade --install ingress-nginx ingress-nginx \
  --repo https://kubernetes.github.io/ingress-nginx \
  --namespace ingress-nginx --create-namespace

 -> 네임스페이스에 컨트롤러를 설치하고 ingress-nginx아직 존재하지 않는 경우 해당 네임스페이스를 생성

 

Prometheus에서 인식할 수 있도록 ingress 컨트롤러 업데이트

  • 메트릭을 내보내도록 컨트롤러를 구성해야 함. 이렇게 하려면 컨트롤러에 3가지 구성이 필요. 이러한 구성은 다음과 같음.
  • 컨트롤러.메트릭.활성화=true
  • controller.podAnnotations."prometheus.io/scrape"="true"
  • controller.podAnnotations."prometheus.io/port"="10254"
  • helm upgrade ingress-nginx ingress-nginx \
    --repo https://kubernetes.github.io/ingress-nginx \
    --namespace ingress-nginx \
    --set controller.metrics.enabled=true \
    --set-string controller.podAnnotations."prometheus\.io/scrape"="true" \
    --set-string controller.podAnnotations."prometheus\.io/port"="10254"
  • 다음과 같이 설치된 릴리스의 값을 확인하여 컨트롤러가 지표에 대해 구성되었는지 확인할 수 있음
    helm get values ingress-nginx --namespace ingress-nginx
  • 아래 표시된 값을 볼 수 있어야 함
    ..
    controller:
      metrics:
        enabled: true
      podAnnotations:
        prometheus.io/port: "10254"
        prometheus.io/scrape: "true"
    ..
    

 

 

Prometheus 서버 배포 및 구성

kustomize 기반은 GitHub 리포지토리 kubernetes/ingress-nginx의배포 폴더에 저장

 

  • 서비스의 끝점을 검색할 수 있도록 Prometheus 서버를 구성해야 합니다. Prometheus 서버가 클러스터에서 이미 실행 중이고 인그레스 컨트롤러 포드를 찾을 수 있는 방식으로 구성된 경우 추가 구성이 필요하지 않음
  • 다음 명령어를 실행하면 Kubernetes에 prometheus가 배포
kubectl apply --kustomize github.com/kubernetes/ingress-nginx/deploy/prometheus/

 

프로메테우스 대시보드

  • 웹 브라우저에서 Prometheus 대시보드를 엽니다.

 

  • 실행 중인 클러스터에 있는 노드의 IP 주소를 가져옵니다.

 

  • 브라우저를 열고 http://{node IP address}:{prometheus-svc-nodeport} URL을 방문하여 Prometheus 대시보드를 로드

 -> 로드가 안될 경우

 -> 가상 url 부여

 

2. 인그레스 생성

 

clone 한 파일 구성

 

ingress.yaml

 

deployment, service, ingress.yaml 배포

 

다음 명령으로 호스트 PC에서 접근

 

 

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

 

위와 같은 아키텍처로 구성을 완료했다면 http://localhost로 접근 시 인그레스를 통해 cozserver에 접속. 프로메테우스 웹 UI Graph 메뉴를 클릭하고, nginx_ingress_controller_sucess라고 입력 후 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 배포

 

그라파나에 접속하고 로그인을 완료

grafana에 프로메테우스를 추가하는 방법은 , 레퍼런스 2를 참고

 

 

[참고] 레퍼런스