home..

모니터링

kubernetes monitoring msa mont-kim aws eks kops PKOS gasida CloudNet

5주차 모니터링

5주차 내용은 메트릭 파이프라인으로 사용되는 대표적인 오픈소스인 프로메테우스와 그라파나에 대해 설명한다.

Untitled

프로메테우스는

메트릭 수집 및 조회를 하는 대상이다.

app들의 data를 수집해 grafana에게 export 해준다.

그라파나는

데이터 시각화 도구이다.

프로메테우스, Elasticsearch, Loki 등의 DB부터 데이터를 시각화해주는 도구이다.

프로메테우스에서 다양한 클러스터의 데이터들을 한번에 수집해주는

타노스 등과같은 솔루션들도 존재한다.

프로메테우스

프로메테우스의 구조는 다음과 같다.

Untitled

출처 : 프로메테우스 공식 홈페이지 https://prometheus.io/docs/introduction/overview/

다른 메트릭 파이프라인에서도 시계열 DB를 사용한다는 점은 여타 다른서비스들과 동일하다.

설치는 helm 차트를 이용하면 손쉽게 설치가 가능하다

kubectl create ns monitoring

CERT_ARN=`aws acm list-certificates --query 'CertificateSummaryList[].CertificateArn[]' --output text`
echo "alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN"

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts

cat <<EOT > ~/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"
EOT

helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack --version 45.0.0 -f monitor-values.yaml --namespace monitoring

helm repo add를 진행후, values.yaml 파일에 필요한 정보들을 입력해주면

helm install을 통한 진행이 가능하다.

loadbalancer를 통해 설치되기때문에, 프로비저닝에 시간이 조금 걸린다.

별도로 alb 관련 설정들이 되어있으니, 해당 도메인대로 prometheus.$KOPS_CLUSTER_NAME 주소로 접속하면 확인 할 수 있다.


echo -e "Prometheus Web URL = https://prometheus.$KOPS_CLUSTER_NAME"

그라파나

그라파나는 프로메테우스등의 TSDB (시계열 데이터베이스) 를 시각화해주는 도구이다.

설치는 helm 차트를통해 alert manager, grafana, promethues를 동시에 설치를했다.

echo -e "Grafana Web URL = https://grafana.$KOPS_CLUSTER_NAME"

해당 링크로 접속 할 수 있다.

계정 비밀번호
admin prom-operator

그라파나에 들어가면 돋보기를 클릭해 대시보드들을 검색하거나

새로 import 할 수 있다.

과제 1 Dashboard 추가하기

Untitled

추가할 dashboard는

[Dashboards Grafana Labs](https://grafana.com/grafana/dashboards/)

에서 검색후, json파일을 다운로드후 import 하는 방법과

폐쇄망이 아닌 grafana의경우 dashboard에 업로드 된 ID만으로도 추가가 가능하다.

다음 예시는 ingress nginx controller에 대한 dashboard를 추가한 과정이다.

[NGINX Ingress controller Grafana Labs](https://grafana.com/grafana/dashboards/9614-nginx-ingress-controller/)

Untitled

과제2 : Nginx Pod 추가하기

Nginx 파드를 배포 후 관련 metric 를 프로메테우스 웹에서 확인하고, 그라파나에 nginx 웹서버 대시보드를 추가 후 확인하시고, 관련 스샷 올려주세요

nginx pod 배포를 진행한다.

helm repo add bitnami https://charts.bitnami.com/bitnami

cat <<EOT > ~/nginx-values.yaml
metrics:
  enabled: true

  service:
    port: 9113

  serviceMonitor:
    enabled: true
    namespace: monitoring
    interval: 10s
EOT

helm install nginx bitnami/nginx --version 13.2.23 -f nginx-values.yaml

kubectl annotate service nginx "external-dns.alpha.kubernetes.io/hostname=nginx.$KOPS_CLUSTER_NAME"

echo -e "Nginx WebServer URL = http://nginx.$KOPS_CLUSTER_NAME"

helm repo add를 진행후, values.yaml 파일을 작성해 install을 진행한다.

서비스 생성 후, 프로메테우스 웹서버에서 nginx 서비스 모니터 추가 확인을 진행한다.

Untitled

nginx 웹서버 관련 데이터 수집이 되는지 확인을 진행후, query를 해본다.

Untitled

정상적인 query가 된것을 확인후,

그라파나에서 다음 과정을 진행한다.

그라파나 대시보드인 12708을 추가 후 확인해본다.

Untitled

추가한 서비스와

서비스의 데이터들이 프로메테우스, 그라파나 대시보드에서 정상적으로 조회 되는것을 확인 할 수 있다.

메트릭 파이프라인 학습 후기

메트릭 파이프라인에 대해 학습해본 하루였다.

사실 쿠버네티스 운영자라면 사용안해본적이 없기 힘든 오픈소스 솔루션들이다.

데이터독 같은 고급 서비스들도 있지만 논외로 한다.

AWS KRUG (AWS 한국 사용자 모임)의 컨테이너 소모임을 참석해 데이터독 관련 세미나를 들은적이 있었다.

결론은 해당 솔루션이 좋기때문에 써달라는 이야기였지만, 풀어나가는 과정중에

“모니터링 솔루션에서의 알림빈도가 퇴사율과 직접적인 연관성이 있다” 라고 했던 말이 기억난다.

다음주에 배울 경보 / 로깅 에서 더욱 심도있게 다루겠지만, 다시끔 기본적인 구조부터 배울 수 있어서 좋았다.

사실 이번주에 운영중인 쿠버네티스 클러스터에서 네트워크관련 오류가 발생했었다.

Untitled

확인을해보니 네트워크 대역폭이 사용량 초과였던거같다.

구체적으론 특정노드에서 네트워크 인터페이스에 장애가 생겨 발생했던 문제였던걸로 밝혀졌지만

이런 정보들을 모니터링 할때는 참으로 유용한거같다.

© 2024 mont kim   •  Powered by Soopr   •  Theme  Moonwalk