모니터링 시스템 구축

업데이트:     Updated:

카테고리:

태그:

Getting Started


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

  • minikube start 명령어 실행

    1
    
    minikube start
    

image

  • Helm을 이용해서 설치합니다.
1
2
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update

image

  • Version 명령어로 설치 확인
1
helm version

image


nginx 인그레스 컨트롤러가 프로메테우스용 메트릭을 노출해야 하므로, helm install 과정에서 반드시 설정해야 하는 옵션이 있습니다.

레퍼런스, 레퍼런스2를 참고해서, 어떤 옵션을 설정해 주어야 프로메테우스에서 nginx의 메트릭을 볼 수 있는지 고민해 보세요. 다음과 같이 환경설정을 지정할 수 있습니다.

1
2
3
$ helm install ingress-nginx ingress-nginx/ingress-nginx \
--set 환경설정키=값 \
--set 환경설정키=값

프로메테우스 웹 UI (http://localhost:9090)에서 ingress-nginx-controller가 Target으로 설정되면 성공입니다.


1
2
3
4
5
helm install ingress-nginx ingress-nginx/ingress-nginx \
--namespace monitoring \
--set controller.metrics.enabled=true \
--set controller.metrics.serviceMonitor.enabled=true \
--set controller.metrics.serviceMonitor.additionalLabels.release="prometheus"

image

  • helm ls 명령어로 리스트 확인 가능

image

  • 포트포워드 명령어로 프로메테우스 노출
1
kubectl --namespace monitoring port-forward svc/prometheus-k8s 9090

image

  • localhost:9090으로 접속 확인

image

  • 프로메테우스 웹 UI에 타겟으로 잡힌 모습 확인.


2. 인그레스 생성

레퍼런스를 참고해서, 인그레스를 만들고 적용합니다.

cozserver (v2)의 디플로이먼트 및 서비스를 배포하고, 인그레스를 만들어서 nginx를 통해 서비스에 접근하게 합니다.


kubectl apply -f [myname].yml 배포 명령어로 k8s yaml 파일 배포

imageimage

  • kubectl get 명령어를 사용하여 배포 상태 확인
1
2
kubectl get pods
kubectl get svc

image

  • CLI 입력후 나오는 결과 물중 Ingress 부분만 복사해서 yaml 파일을 따로 만들어준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  apiVersion: networking.k8s.io/v1
  kind: Ingress
  metadata:
    name: cozserver
    namespace: default
  spec:
    ingressClassName: nginx
    rules:
      - host: localhost
        http:
          paths:
            - pathType: Prefix
              backend:
                service:
                  name: cozserver
                  port:
                    number: 80
              path: /
  • 내용 수정 후 재 배포

image

  • 정상적으로 배포 생성 된 모습이다.

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

image image

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시간 동안 인그레스 컨트롤러를 통해 들어온 요청의 누적 비율

1
2
3
4
sum(rate(
  nginx_ingress_controller_requests[1h]
)) 
by (ingress)

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

1
2
3
4
5
6
7
8
9
10
sum(rate(
  nginx_ingress_controller_requests{
    status=~"4.."
  }[1h]
))
by (ingress) /
sum(rate(
  nginx_ingress_controller_requests[1h]
))
by (ingress)

image

4. Grafana의 대시보드 살펴보기

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

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

image-20230605190706804

또한 Create - Import 메뉴를 이용하면, 기존에 커뮤니티에서 만들어놓은 대시보드를 손쉽게 Import 할 수 있습니다.

💡 참고 레퍼런스

그라파나 대쉬보드 : https://github.com/kubernetes/ingress-nginx/tree/main/deploy/grafana/dashboards

오픈 텔레메트리 데모 : https://github.com/open-telemetry/opentelemetry-demo

그라파나 대쉬보드 : https://github.com/prometheus-operator/kube-prometheus/blob/main/manifests/grafana-dashboardDatasources.yaml




Sprint 카테고리 내 다른 글 보러가기 🤠

댓글남기기