Study_note
[kubernetes] Prometheus 및 모니터링 룰 추가 본문
k8s에서는 기본적으로 kubelet에 있는 cAdvisor를 사용하여 메트릭을 수집한 후 Metrics-server를 통해 메트릭을 전달한다.
Metrics-server 확인 : kubelet으로부터 수집한 리소스 메트릭을 수집 및 집계하는 클러스터 애드온 구성 요소
cAdvisor : kubelet에 포함된 컨테이너 메트릭을 수집, 집계, 노출하는 데몬
기본적으로 제공하는 Metrics-server를 제외하면 쿠버는 대체로 시계열 데이터를 관리하며 pull 방식의 Prometheus를 사용하여 메트릭을 전달한다
Prometheus란?
Kubernetes에서 널리 사용되는 오픈 소스 모니터링 시스템
다양한 소스에서 메트릭을 수집하고 저장, 데이터를 분석하고 시각화하기 위한 강력한 쿼리 언어 제공
다차원 데이터 모델
시계열 수집을 위한 HTTP 풀 모델
다양한 그래프 및 대시보드 지원 모드(그라파나 연동 가능)
Prometheus의 작동 원리
https://prometheus.io/docs/introduction/overview/
각 서비스들은 각 웹서버의 특정 디렉토리에 프로메테우스가 관리하는 각종 메트릭 값을 저장한다.
해당 디렉토리 /metric의 정보들은 프로메테우스에 의해 Pull 되어 수집된다.
Helm을 이용하여 프로메테우스 설치
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
대표적인 헬름 차트로 kube-prometheus-stack가 있는데 해당 차트 사용하면 그라파나까지 쉽게 설치 가능
변수 파일 생성
vi ~/monitor-values.yaml
alertmanager:
ingress:
enabled: true
ingressClassName: alb
annotations:
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]'
alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN
alb.ingress.kubernetes.io/success-codes: 200-399
alb.ingress.kubernetes.io/group.name: "monitoring"
hosts:
- alertmanager.$KOPS_CLUSTER_NAME
paths:
- /*
grafana:
defaultDashboardsTimezone: Asia/Seoul
adminPassword: prom-operator
ingress:
enabled: true
ingressClassName: alb
annotations:
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]'
alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN
alb.ingress.kubernetes.io/success-codes: 200-399
alb.ingress.kubernetes.io/group.name: "monitoring"
hosts:
- grafana.$KOPS_CLUSTER_NAME
paths:
- /*
prometheus:
ingress:
enabled: true
ingressClassName: alb
annotations:
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]'
alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN
alb.ingress.kubernetes.io/success-codes: 200-399
alb.ingress.kubernetes.io/group.name: "monitoring"
hosts:
- prometheus.$KOPS_CLUSTER_NAME
paths:
- /*
prometheusSpec:
serviceMonitorSelectorNilUsesHelmValues: false
retention: 5d
retentionSize: "10GiB"
변수 파일 사용하여 차트 생성
helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack --version 45.0.0 -f monitor-values.yaml --namespace monitoring
정상적으로 접근 가능 확인
전체 클러스터 노드의 CPU 사용량 합계를 나타내는 PromQL 명령어를 입력하여 그래프 형태로 자료를 확인도 가능
이렇게 Prometheus에서도 그래프를 확인하여 메트릭을 확인할 수 있지만 보다 제한적이여서 시각화 데쉬보드인 그라파나를 자주 사용한다.
Grafana란?
데이터 시각화 툴로서 보통 프로메테우스와 같이 사용하는 경우가 많다
Helm의 프로메테우스 스택을 설치하면 데이터 시각화 툴로서 Grafana가 자동으로 설치된다
헬름 변수 파일에 설정했던 계정 및 비밀번호( admin / prom-operator )로 접근 가능
접속 후 테스트 파드 3개를 설치하고 Dashboard -> Browse -> General/Kubernetes / Compute Resources /로 이동하면 정상적으로 모니터링되고 있는 것을 확인
여기서 기본적으로 제공하는 데시보드 외에 추가로 데시보드를 설치할 수 있다.
아래 사이트로 들어가면 헬름 artifact처럼 사람들이 커스텀한 데시보드를 확인 가능하다.
https://grafana.com/grafana/dashboards/?pg=docs-grafana-latest-dashboards
원하는 데시보드 클릭 후 id copied 클릭 시 아래 처럼 ID 확인 가능하다.
다시 그라파나로 돌아와 Dashboard -> Import -> load에 코드 입력
필자는 기존에 생성해서 중복이 안되기 때문에 에러가 뜨지만 load 후 data source를 프로메테우스로 선택 하면 된다.
방금 생성한 커스텀 데시보드로 접속한것을 확인 가능하다.
---
추가적으로 ServiceMonitor를 사용하여 메트릭을 받을 수도 있다
ServiceMonitor란 CRD방식으로 Operator를 이용하여 Metric을 관리하는 방법으로 헬름 prometheus.yml 파일에 수동으로 추가하는 것이 아니고 별도의 ServiceMonitor 리소스로 이용.
이렇게 서비스 모니터링이 연결되고 이를 통해 메트릭이 전송되다.
보면 nginx라는 서비스 모니터링이 있는데 이는 helm을 통해 nginx를 생성할때 서비스 모니터링을 추가했다.
cat <<EOT > ~/nginx-values.yaml
metrics:
enabled: true
service:
port: 9113
serviceMonitor:
enabled: true
namespace: monitoring
interval: 10s
EOT
생성한 서비스 모니터링을 yaml로 추출하면 아래와 같다
ServiceMonitor를 이용하면 손쉽게 Prometheus Metric 추가 하며 Prometheus 재기동 없이 자동 추가할 수 있으며 metric 설정 빠르게 확인이 가능하다.
참조
https://jerryljh.medium.com/prometheus-servicemonitor-98ccca35a13e
'Kubernetes' 카테고리의 다른 글
[kubernetes] Loki, PLG 로그 관리 (0) | 2023.02.28 |
---|---|
[kubernetes] Alertmanager 프로메테우스에서 슬랙으로 알람 및 알람 무시 (0) | 2023.02.27 |
[kubernetes] Serviceaccount, context를 사용한 개발자 계정 생성 (0) | 2022.12.07 |
[kubernetes] Multi Cluster 환경 구성 및 플러그인 kubectx 사용 (0) | 2022.12.02 |
[kubernetes] 쿠버네티스 플러그인 패키지 관리자 Krew 및 자주 사용하는 플러그인 tree, neat 사용 (0) | 2022.12.01 |