2021-04-12 Prometheus 설치, Query 및 Grafana dashboard 연동
Prometheus 설치
Prometheus Query
Grafana 연동
Grafana Dashboard 생성
Prometheus 는 OpenSource 기반 Monitoring system으로, Kubernetes node들의 상태를 monitoring 한다. (master node에서 동작.)
간단한 text 형식으로 Metric을 쉽게 노출하고, Grafana 같은 대시보드 시스템에서 graph로 표시 가능하다.
PromQL Query Language를 사용한다.
설치 전 먼저 kubectl get nodes
로 쿠버네티스 클러스터 상태가 정상인지 확인한다.
!참고 kubectl get nodes
에서 ready 안 뜰 경우, 확인하는 법.
1. docker, kubelet restart.
2. 1 해도 안될 경우 config 파일 다시 복사떠와서 설정.(1주차 내용에 존재.)
3. master, worker node로 설정한 node의 호스트명 확인. JOIN 당시의 호스트명을 전달해서 인식하기 때문에 node의 호스트명이 바뀌면 인식하지 못함.
4. calico
문제 => 방화벽 off 로 해결.
5. pod 들이 pending
되는 이유는, 배포할 node가 없다고 판단했기 때문.(master node는 애초에 배포할 node라고 가정하지 않음.) => kubectl get nodes
로 worker node를 ready 상태로 만드는 것이 우선.
Helm 차트는 복잡한 Kubernetes app들을 편리하게 정의하여 설치하거나 upgrade가 가능하게 해 주는 tool이다. 한마디로 Kubernetes Package managing tool.
curl -fsSL -o helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
chmod 777 helm.sh
./helm.sh
helm repo add stable https://charts.helm.sh/stable
helm repo update
yum install -y git
git clone https://github.com/helm/charts.git
cd charts/stable/prometheus/
vi values.yaml
values.yaml 파일에서 persistentVolume: 하위의 enabled: 를 false
로 설정. (3군데 수정필요)
helm install prometheus stable/prometheus -f charts/stable/prometheus/values.yaml
kubectl get pods
로 설치 확인.
yum install -y epel-release
yum install snapd
systemctl enable --now snapd.socket
ln -s /var/lib/snapd/snap /snap #symbolic link 생성.
snap install jq
yum install jq
<Metric 이름>{<Lable key>=<Lable 값>, <Lable key>=<Lable 값> ... }<Metric 값>[<timestamp>]
curl http://[prometheus-server ip]/[end point] -d query="[query]"
curl http://[prometheus-server ip]/api/v1/query -d query="node_cpu_seconds_total"
curl http://[prometheus-server ip]/api/v1/query -d query="node_memory_MemTotal_bytes" | jq
(curl 명령어로 작동이 안된다면 방화벽 문제일 가능성이 큼. 방화벽 off 해버리자.)
(또한, curl로 query를 날리는게 아닌, browser 상에서 대쉬보드로 PromQL을 날리고 싶다면,
kubectl edit svc/prometheus-server
로 서비스를 수정하여 externalIPs 를 추가해주자.)
직접 Prometheus Query 를 날려보기 위해, prometheus-server의 IP를 확인해 보자.
이렇게 pod와 service의 IP를 확인할 수 있는데, 이 중 prometheus-server의 service Cluster-IP인 10.98.162.91
을 사용한다. (이유는 pod의 IP주소는 유동적이고 service는 그러한 유동적인 pod의 IP를 찾을 수 있는 anchor역할을 하기 때문.)
이처럼 확인이 가능하다.
charts/stable/grafana/values.yaml 파일 수정
Grafana 설치
helm install grafana stable/grafana -f charts/stable/grafana/values.yaml
kubectl edit svc/grafana
clusterIP 하위에 externalIPs 추가 후 IP 할당. (자신의 node IP주소 기입.)
port 부분에 원하는 port 설정.
browser에서 externalIP port로 접속.
ID, Passwd를 svc/grafana에서 설정한 ID/PW로 로그인.
Grafana dashboard에서 Configuration - Data Sources - Add data source
Prometheus 선택, URL에 Prometheus server IP 입력.
Save & Test 진행.
https://grafana.com/grafana/dashboards 에서 원하는 dashboard 선택 후, import - url 붙여넣고 Load.
Dashboard 선택 후 확인.