모니터링 시스템 구축
카테고리: Sprint
Getting Started
1. nginx 인그레스 컨트롤러 설치
-
minikube start
명령어 실행1
minikube start
- Helm을 이용해서 설치합니다.
1
2
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
- Version 명령어로 설치 확인
1
helm version
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"
helm ls
명령어로 리스트 확인 가능
- 포트포워드 명령어로 프로메테우스 노출
1
kubectl --namespace monitoring port-forward svc/prometheus-k8s 9090
- localhost:9090으로 접속 확인
- 프로메테우스 웹 UI에 타겟으로 잡힌 모습 확인.
2. 인그레스 생성
레퍼런스를 참고해서, 인그레스를 만들고 적용합니다.
cozserver (v2)의 디플로이먼트 및 서비스를 배포하고, 인그레스를 만들어서 nginx를 통해 서비스에 접근하게 합니다.
kubectl apply -f [myname].yml
배포 명령어로 k8s yaml 파일 배포
kubectl get
명령어를 사용하여 배포 상태 확인
1 2 kubectl get pods kubectl get svc
- 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: /
- 내용 수정 후 재 배포
- 정상적으로 배포 생성 된 모습이다.
3. 인그레스 접속 로그가 찍히는지 프로메테우스를 통해 확인
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)
4. Grafana의 대시보드 살펴보기
그라파나에 접속하고 로그인을 완료하면, 다양한 대시보드가 미리 준비되어 있습니다. 각 Panel에서 사용하는 메트릭을 살펴보고, 어떤 PromQL을 통해 쿼리하는지 알아보세요.
Panel의 제목을 클릭하고 Edit 버튼을 누르면, 다음과 같이 쿼리문을 확인할 수 있습니다.
또한 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
댓글남기기