실습
- prometheus-stack 설치
- grafana 기본 모니터링 페이지 확인
Why Prometheus?
Kube 환경에서는 Prometheus가 모니터링 표준 입니다. (이미 2018년 CNCF Graduated, Kubernetes 이 후 2번째 CNCF 졸업 Project 입니다.) 다른 툴 비교하지 마시고 그냥 사용하시면 됩니다. ^^ 예산이 있다면 상용 툴 사용하는 것도 나쁘지 않습니다.
모니터링은 정말 Custom 영역이 많이 들어가는 부문이라 각 회사 상황에 따라 시간과 노력이 많이 필요 합니다. 운영 하면서 당연히 끊임없이 개선이 필요한 부문이죠. 그 광활한 부문 중 이번 포스팅에서는 설치 방법과 모니터링 페이지 확인까지 다루겠습니다.
Prometheus-stack 설치
다른 모든 application과 동일하게 prometheus도 Helm 으로 설치가 가능합니다. 특히 prometheus는 community에서 prometheus-stack, 즉 stack(쌓아올린 거) 이므로 prometheus 뿐만 아니라 prometheus-operator, grafana, alertmanager까지 한꺼번에 설치 가능한 Helm Chart를 제공합니다.
두 번 특히는 다양한 grafana 모니터링 대쉬보드 및 alertmanager rule 까지 함께 포함되어 별다른 추가 작업 없이도 바로 실 운영 환경에 적용 가능한 수준이라 아주 훌륭합니다. 아마도 1주일 이상 작업이 필요할텐데, 30분 안에 끝낼 수 있습니다.
https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack
Helm Chart 파일을 다운받습니다.
[spkr@erdia22 29.Prometheus (spkn02:redis)]$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
te"prometheus-community" has been added to your repositories
[spkr@erdia22 29.Prometheus (spkn02:redis)]$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "harbor" chart repository
...Successfully got an update from the "helm-openldap" chart repository
(이하 생략)
[spkr@erdia22 29.Prometheus (spkn02:redis)]$ helm pull prometheus-community/kube-prometheus-stack
[spkr@erdia22 29.Prometheus (spkn02:redis)]$ tar xvfz kube-prometheus-stack-16.1.0.tgz
kube-prometheus-stack/Chart.yaml
kube-prometheus-stack/Chart.lock
kube-prometheus-stack/values.yaml
(이하 생략)
향후 관리 편의를 위하여 directory 이름을 버전 이름으로 변경합니다.
[spkr@erdia22 29.Prometheus (spkn02:redis)]$ mv kube-prometheus-stack kube-prometheus-stack-16.1.0
[spkr@erdia22 29.Prometheus (spkn01:prometheus)]$ ls -lrt
total 328
drwxr-xr-x 5 spkr spkr 4096 Apr 30 16:02 kube-prometheus-stack-14.3.0
drwxr-xr-x 5 spkr spkr 4096 May 3 14:56 kube-prometheus-stack-15.3.1
-rw-r--r-- 1 spkr spkr 298958 May 28 02:38 kube-prometheus-stack-16.1.0.tgz
drwxr-xr-x 5 spkr spkr 4096 May 28 02:40 kube-prometheus-stack-16.1.0
(이렇게 디렉토리 별로 관리하면 나중에 시간을 절약할 수 있습니다. ^^)
Helm Chart 수정
향후 히스토리 확인을 위하여 기존 values.yml Copy하여 새로운 my-values.yml 파일을 만듭니다.
[spkr@erdia22 kube-prometheus-stack-16.1.0 (spkn02:redis)]$ cp values.yaml my-values.yml
문제는 my-values.yml 파일이 수정하기에 너무 길다는 것 입니다. ^^ (전체 2494 line…) 전체 내용을 알수는 없지만 인내를 가지고 아는 부문만 조금씩 변경하면 됩니다. ^^ 운영을 하시다 보면 필요에 의하여 하나씩 하나씩 알 수 있는 날이 옵니다.
먼저 alertmanager, prometheus 의 service type을 ClusterIP 에서 NodePort(혹은 LoadBalancer)로 변경 합니다.
Prometheus resources 수정. scrape metric이 많은 경우 resource 문제가 있으므로 resource 여유 상황에 따라 넉넉하게 resource를 할당합니다.
retention period 및 size는 중요합니다. 말 그대로 모니터링 데이터를 유지(retention)하는 기간 및 용량 입니다. 회사의 정책에 맞게 6개월, 1년 등으로 수정합니다.
PVC 관련 설정도 변경 합니다.
전체 파일 내역은 아래 gist 사이트 파일 참조 하시면 됩니다.
https://gist.github.com/junghoon2/158ab7ee3843241e5bd800f5b51fd2e9
변경 내역은 향후 history 관리에 용이하도록 my-values.yml 최상단에 아래와 같이 별도 comment로 저장하시는 걸 추천 드립니다.
만약 기존 설치 내역이 있으시면 아래와 같이 VSCode.Compare Selected 통하여 변경 내역만 빠르게 확인 할 수 있습니다.
그라파나의 경우 별도 chart 디렉토리를 사용합니다. kube-prometheus-stack-16.1.0 - charts - grafana - values.yaml 파일을 수정합니다.
동일하게 Storage Class, Nodeport, Resource limits/requests을 수정 합니다. 상세 values.yml 파일은 아래 링크를 참조 합니다.
https://gist.github.com/junghoon2/db0161e1140c72798a1ee486b0fb03c1
Helm Prometheus-stack 설치
먼저, 설치를 위한 Prometheus namespace 생성하시고 namespace를 변경합니다. (monitoring namespace도 많이 사용합니다.)
[spkr@erdia22 kube-prometheus-stack-16.1.0 (spkn02:prometheus)]$ k create ns prometheus
[spkr@erdia22 kube-prometheus-stack-16.1.0 (spkn02:redis)]$ kns prometheus
Context "spkn02" modified.
Active namespace is "prometheus".
설치를 시작합니다.
[spkr@erdia22 kube-prometheus-stack-16.1.0 (spkn01:prometheus)]$ helm install prometheus -f my-values.yml .
NAME: prometheus
LAST DEPLOYED: Fri May 28 03:58:36 2021
NAMESPACE: prometheus
STATUS: deployed
REVISION: 1
NOTES:
kube-prometheus-stack has been installed. Check its status by running:
kubectl --namespace prometheus get pods -l "release=prometheus"
Visit https://github.com/prometheus-operator/kube-prometheus for instructions on how to create & configure Alertmanager and Prometheus instances using the Operator.
설치가 약 3분 정도 걸립니다. 에러 아니니 쫄지 마시고 기다려 주시면 됩니다. ^^ 다양한 POD가 생성되고 있습니다.
[spkr@erdia22 47.GitLab (spkn01:prometheus)]$ kgpw
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
prometheus-kube-prometheus-admission-create-w662x 0/1 Pending 0 0s <none> <none> <none> <none>
prometheus-kube-prometheus-admission-create-w662x 0/1 Pending 0 0s <none> node3 <none> <none>
prometheus-kube-prometheus-admission-create-w662x 0/1 ContainerCreating 0 0s <none> node3 <none> <none>
prometheus-kube-prometheus-admission-create-w662x 0/1 ContainerCreating 0 1s <none> node3 <none> <none>
(이하 생략)
설치가 완료되면 아래와 같이 전체 POD가 정상 Running 중인 걸 확인 할 수 있습니다.
[spkr@erdia22 diamanti-k8s-bootcamp (spkn01:prometheus)]$ kgp
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
alertmanager-prometheus-kube-prometheus-alertmanager-0 2/2 Running 0 9m17s 10.233.92.44 node3 <none> <none>
prometheus-grafana-84457b89df-2mnkf 2/2 Running 0 9m34s 10.233.92.41 node3 <none> <none>
prometheus-kube-prometheus-operator-5ffb587599-2stt6 1/1 Running 0 9m34s 10.233.92.36 node3 <none> <none>
prometheus-kube-state-metrics-5b8f9bdbbd-msbth 1/1 Running 0 9m34s 10.233.92.40 node3 <none> <none>
prometheus-prometheus-kube-prometheus-prometheus-0 2/2 Running 1 9m17s 10.233.96.67 node2 <none> <none>
prometheus-prometheus-node-exporter-86pjn 1/1 Running 0 3m9s 172.17.16.151 node1 <none> <none>
prometheus-prometheus-node-exporter-fbq69 1/1 Running 0 9m34s 172.17.16.152 node2 <none> <none>
prometheus-prometheus-node-exporter-vl788 1/1 Running 0 9m34s 172.17.16.153 node3 <none> <none>
이제 설치가 완료 되었습니다. 참 간단합니다. ㅎㅎ
Grafana 대쉬보드 확인
이제 모니터링 대쉬보드를 확인 하겠습니다.
먼저 IP, 포트를 확인합니다.
[spkr@erdia22 47.GitLab (spkn01:prometheus)]$ k get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
alertmanager-operated ClusterIP None <none> 9093/TCP,9094/TCP,9094/UDP 40m
prometheus-grafana NodePort 10.233.31.89 <none> 80:30885/TCP 41m
prometheus-kube-prometheus-alertmanager NodePort 10.233.45.1 <none> 9093:30903/TCP 41m
prometheus-kube-prometheus-operator ClusterIP 10.233.59.179 <none> 443/TCP 41m
prometheus-kube-prometheus-prometheus NodePort 10.233.54.103 <none> 9090:30090/TCP 41m
prometheus-kube-state-metrics ClusterIP 10.233.52.131 <none> 8080/TCP 41m
prometheus-operated ClusterIP None <none> 9090/TCP 40m
prometheus-prometheus-node-exporter ClusterIP 10.233.34.205 <none> 9100/TCP 41m
grafana 서비스의 port는 30885 입니다. 참고로 node ip는 아래와 같이 nodes -o wide로 확인 가능합니다.
[spkr@erdia22 47.GitLab (spkn01:prometheus)]$ k get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
node1 Ready master 112d v1.19.7 172.17.16.151 <none> CentOS Linux 7 (Core) 3.10.0-1062.12.1.el7.x86_64 docker://19.3.14
node2 Ready master 112d v1.19.7 172.17.16.152 <none> CentOS Linux 7 (Core) 3.10.0-1062.12.1.el7.x86_64 docker://19.3.14
node3 Ready <none> 112d v1.19.7 172.17.16.153 <none> CentOS Linux 7 (Core) 3.10.0-1062.12.1.el7.x86_64 docker://19.3.14
브라우저에서 해당 IP, Port로 접속하시면 정상적으로 페이지 확인 할 수 있습니다.
password는 my-values.yml 파일에 설정하신 걸 사용합니다.
다음으로 grafana 설정 관련입니다. prometheus-stack 이 좋은 게 이미 필요한 설정을 default로 포함되어 있습니다.
Data Sources를 확인해 보면 (화면 왼편)
이미 Prometheus가 등록되어 있습니다. (prometheus service 이름입니다.)
그뿐만 아니라 (정말 좋은게) 기본 모니터링 페이지도 같이 포함되어 있습니다. 화면 왼편 대쉬보드 - Manage를 확인해 보겠습니다.
확인해보면 아래와 같이 많은 dashboards가 기본으로 포함되어 있습니다. 물론 기본 dashboards라 회사 상황에 맞지 않을 수 있습니다. 하지만 대쉬 보드 생성 시 기존 풍부한 대쉬보드를 참조 할 수 있어서 작업 시간을 엄청 절약 할 수 있습니다.
각 대시보드를 선택하시면 다양한 Metric 확인이 가능합니다. (이걸 전부 일일이 만들기는 불가능했을 것 같습니다.)
사례로 실 운영 중인 Service 사용 현황 대시보드 몇가지 공유해 드립니다.
다음 포스팅에서 Custom 그라파나 대쉬보드 생성 및 Alertmanager 설정 등에 대하여 다루어 보겠습니다.
감사합니다.
Kubernetes 교육, 컨설팅, 기술 지원 문의 : leejunghoon@spkr.co.kr
'쿠버네티스 교육' 카테고리의 다른 글
17. Kube 교육 - AlertManager 설정 (2) | 2021.06.04 |
---|---|
16. Kube 교육 - Grafana Custom 대시보드 생성 (0) | 2021.06.04 |
11. Kube 교육 - OpenEBS LocalPV (0) | 2021.06.04 |
10. Kube 교육 - Kube Storage(PV PVC SC) (0) | 2021.06.04 |
09. Kube 교육 - MetalLB (2) | 2021.06.04 |