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를 참고
[참고] 레퍼런스
'DevOps BootCamp > 모니터링' 카테고리의 다른 글
서비스 수준 목표 (0) | 2023.06.06 |
---|---|
모니터링 시스템 구축 - kub prometheus (0) | 2023.06.05 |
서비스 수준 목표(Service-level objective) (0) | 2023.06.05 |
모니터링 시스템의 메트릭 수집 방식 (0) | 2023.06.05 |
Prometheus + Grafana (0) | 2023.06.02 |