Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Study_note

[kubernetes] Prometheus 및 모니터링 룰 추가 본문

Kubernetes

[kubernetes] Prometheus 및 모니터링 룰 추가

Study_note 2023. 2. 18. 19:20

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 

 

Dashboards | Grafana Labs

 

grafana.com

 

원하는 데시보드 클릭 후 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

Comments