DevOps/Kubernetes

[Kubernetes] k8s Monitoring : Helm으로 Prometheus, Grafana 설치하기

nayoungs 2022. 5. 29. 20:40
728x90

📌Index

  • Prometheus란?
  • Prometheus 및 Grafana 설치



✔️ Prometheus란?

Prometheus란 SoundCloud가 개발한 솔루션으로, 오픈소스 모니터링이다.

 

Prometheus Architecture

빨간색으로 표시된 것이 프로메테우스의 컴포넌트이다.

 

 

  • Retrieval : Pushgateway 혹은 Targets으로부터 metrics를 pulling한다.
    • Short-lived jobs : 생명주기가 짧은 것들은 Pushgateway가 받아둔다.
    • Service Discovery : k8s apiserver에게 질의하면 수집 대상을 가지고 온다.
  • TSDB: 시계열(Time Series) DB는 시간대별로 데이터(시계열 데이터)를 저장하기에 최적화된 DB로, Prometheus는 TSDB를 통해 데이터를 로컬(HDD/SSD)에 저장한다.
  • HTTP Server : Dashboard로, 일반적으로 잘 사용하지는 않는다
  • Promethues web UI : 웹 브라우저를 통해서 HTTP server에 접속하여 값들을 볼 수 있다. 일반적으로 테스트 용도로 사용한다.
  • Alertmanager : 알람 서비스로, 여러가지가 있지만 최근에는 일반적으로 Slack을 많이 사용한다.
  • Grafana : Promethues는 시각화 도구가 부족하여,  대게 별도로 모니터링을 위해 Data Visualization tool인 Grafana 오픈소스를 사용한다.



✔️ Prometheus 및 Grafana 설치

Helm Chart를 이용하여 Prometheus를 설치할 예정이다. Helm이 뭔지 모른다면 Heml이란?을 참조하자.

GitHub URL 👉 prometheus-community/helm-charts: Prometheus community Helm charts

 

먼저 레포지토리를 추가하고,

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

인덱스를 업데이트한다.

helm repo update

다음으로 아래와 같이 value를 수정(사용자화)하는 yaml 파일을 작성한다.

Service Type을 LoadBalancer로 설정한다.

 

prom-values.yaml

grafana:
  service:
    type: LoadBalancer

이때, 별도의 네임스페이스로 분리해주는 것이 좋다.

kubectl create ns monitor

다음 명령을 실행하면 prometheus와 더불어 grafana까지 함께 설치된다.

helm install prom prometheus-community/kube-prometheus-stack -f prom-values.yaml -n monitor
NAME: prom
LAST DEPLOYED: Fri May 27 05:58:16 2022
NAMESPACE: monitor
STATUS: deployed
REVISION: 1
NOTES:
kube-prometheus-stack has been installed. Check its status by running:
  kubectl --namespace monitor get pods -l "release=prom"

Visit https://github.com/prometheus-operator/kube-prometheus for instructions on how to create & configure Alertmanager and Prometheus instances using the Operator.
$ helm list -n monitor
NAME    NAMESPACE       REVISION        UPDATED                                 STATUS       CHART                    APP VERSION
prom    monitor         1               2022-05-27 05:50:25.628854911 +0000 UTC deployed     prometheus-15.9.0        2.34.0

매번 네임스페이스를 지정해주는 것이 번거로우므로 kubens를 이용하여 네임스페이스를 변경하자.

$ kubens monitor           
Context "kubernetes-admin@cluster.local" modified.
Active namespace is "monitor".

모두 정상적으로 실행되고 있는 것을 확인할 수 있다.

$ kubectl get all
NAME                                                         READY   STATUS    RESTARTS   AGE
pod/alertmanager-prom-kube-prometheus-stack-alertmanager-0   2/2     Running   0          3m46
s
pod/prom-grafana-955fd56dd-86cjv                             3/3     Running   0          4m7s
pod/prom-kube-prometheus-stack-operator-f568c9fd4-t6cjp      1/1     Running   0          4m7s
pod/prom-kube-state-metrics-5c54c5d749-gjnks                 1/1     Running   0          4m7s
pod/prom-prometheus-node-exporter-bqz66                      1/1     Running   0          4m7s
pod/prom-prometheus-node-exporter-sbjkq                      1/1     Running   0          4m7s
pod/prom-prometheus-node-exporter-vgzls                      1/1     Running   0          4m7s
pod/prometheus-prom-kube-prometheus-stack-prometheus-0       2/2     Running   0          3m46
s

NAME                                              TYPE           CLUSTER-IP      EXTERNAL-IP
     PORT(S)                      AGE
service/alertmanager-operated                     ClusterIP      None            <none>
     9093/TCP,9094/TCP,9094/UDP   3m46s
service/prom-grafana                              LoadBalancer   10.233.13.77    192.168.100.2
40   80:31355/TCP                 4m7s
service/prom-kube-prometheus-stack-alertmanager   ClusterIP      10.233.50.157   <none>
     9093/TCP                     4m7s
service/prom-kube-prometheus-stack-operator       ClusterIP      10.233.62.80    <none>
     443/TCP                      4m7s
service/prom-kube-prometheus-stack-prometheus     ClusterIP      10.233.6.159    <none>
     9090/TCP                     4m7s
service/prom-kube-state-metrics                   ClusterIP      10.233.53.165   <none>
     8080/TCP                     4m7s
service/prom-prometheus-node-exporter             ClusterIP      10.233.26.62    <none>
     9100/TCP                     4m7s
service/prometheus-operated                       ClusterIP      None            <none>
     9090/TCP                     3m46s

NAME                                           DESIRED   CURRENT   READY   UP-TO-DATE   AVAILA
BLE   NODE SELECTOR   AGE
daemonset.apps/prom-prometheus-node-exporter   3         3         3       3            3
      <none>          4m7s

NAME                                                  READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/prom-grafana                          1/1     1            1           4m7s
deployment.apps/prom-kube-prometheus-stack-operator   1/1     1            1           4m7s
deployment.apps/prom-kube-state-metrics               1/1     1            1           4m7s

prom-grafana 로드밸런서의 EXTERNAL-IP로 접속하면 다음과 같은 화면을 확인할 수 있다.

 

패스워드는 values.yaml에서 확인할 수 있다.

  • ID: admin
  • PWD: prom-operator

 

로그인 후 다음과 같이 클러스터의 CPU 사용량 등을 확인할 수 있다.

 

 

또한 다음과 같이 특정 네임스페이스를 선택하여 확인하는 것도 가능하다.

 

 

 

 

728x90