Prometheus Operator란? (현재는 kube-prometheus-stack으로 이름을 변경함) 쿠버네티스 CRD를 사용해 배포와 설정관리를 쉽게 만든 버전이다. prometheus, alertmanager, monitoring기능이 포함되어 있다.
Prometheus operator설정과 rule수정을 통해 google 메일로 알림을 받아볼수 있도록 설정해보자
CRD를 통해 관리되는 리소스
Prometheus : 파드
Alertmanager : 파드
ThanosRuler : 파드
ServiceMonitor : 어떤 방식으로 클러스터를 모니터링할지 명시
PodMonitor : 어떤 방식으로 파드를 모니터링할지 명시
Prebe : 어떤 방식으로 ingress타겟을 모니터링할지 명시
PrometheusRule : AlertmanagerConfig
설치
- helm setup
$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
$ helm repo update
- install kube-prometheus
$ git clone https://github.com/prometheus-community/helm-charts.git
$ cd /charts/kube-prometheus-stack
$ vi values.yaml
$ helm install -n prometheus prom prometheus-community/kube-prometheus-stack --values values.yaml
- rule 추가
- 프로메테우스는 rulesSelector의 라벨을 참조해서 rule을 찾아 등록함
- 이벤트를 트리거하는 주체는 프로메테우스며 rule이 부합되면 트리거가 발생해 해당 이벤트를 alert.alertmanager에 설정된 alertmanager로 전송한다.
=> 즉 alertmanager는 프로메테우스가 전달한 이벤트를 쏴주는 미들웨어라 보면 된다.
$ kubectl edit -n prometheus Prometheus prom-kube-prometheus-stack-prometheus
# 프로메테우스 룰 추가 (rule 추가후 파드 재시작없이 업데이트 됨)
# rule list에서 필요한 오브젝트에 rule 추가
kubectl get PrometheusRule -A
kubectl edit PrometheusRule prom-kube-prometheus-stack-alertmanager.rules
# 테스트를 위한 rule 등록
(spec.groups.rules. 하위)
- alert: InstanceDownFromServer
expr: up == 0
for: 1m
- PVC 관련 룰 등록
kubectl edit PrometheusRule prom-kube-prometheus-stack-kubernetes-storage
kubelet_volume_stats_available_bytes{job="kubelet", namespace=~".*", metrics_path="/metrics"} / kubelet_volume_stats_capacity_bytes{job="kubelet", namespace=~".*", metrics_path="/metrics"} ) > 0.99
=> 이부분을 수정해서 알림 정책을 적용
- smtp정보 등록
알림매니저는 아래 이름의 시크릿 오브젝트를 통해 설정값을 관리한다.
alertmanager-prom-kube-prometheus-stack-alertmanager
#data.alertmanager.yaml 에 아래 설정한 config.yaml 파일을 base64로 인코딩한뒤 입력
$vi config.yaml
global:
resolve_timeout: 5m
route:
group_by: ['job']
group_wait: 30s
group_interval: 5m
repeat_interval: 1h
receiver: 'test'
receivers:
- name: 'test'
email_configs:
- to: '<수신인-메일주소>'
from: '<smtp-mail>'
smarthost: <smtp-address-with-port>
auth_username: "<smtp-mail>"
auth_identity: "<smtp-mail>"
auth_password: "<pwd>"
#config파일 인코딩
$ cat config.yaml | base64 | tr -d '\n' > config-encode.yaml
#시크릿에 새로운값을 넣고 알림매니저 파드 삭제하면 재생성되면서 새로운 시크릿값을 업데이트 한다.
#알림매니저파드 접속
kubectl exec -it -n prometheus alertmanager-prom-kube-prometheus-stack-alertmanager-0 -c alertmanager sh
#config내용 확인
cat /etc/alertmanager/config/alertmanager.yaml
- 프로메테우스 삭제
helm uninstall -n prometheus prom
kubectl delete crd alertmanagerconfigs.monitoring.coreos.com
kubectl delete crd alertmanagers.monitoring.coreos.com
kubectl delete crd podmonitors.monitoring.coreos.com
kubectl delete crd probes.monitoring.coreos.com
kubectl delete crd prometheuses.monitoring.coreos.com
kubectl delete crd prometheusrules.monitoring.coreos.com
kubectl delete crd servicemonitors.monitoring.coreos.com
kubectl delete crd thanosrulers.monitoring.coreos.com
- 구글 메일 보안설정
구글메일로 알림을 받을땐 아래 링크에서 "secure app access" 모드를 꺼줘야한다https://myaccount.google.com/lesssecureapps
[위 내용중 부족한 부분이 있거나 궁금하신 점은 언제든지 댓글 남겨주세요]