Prometheus - Kubernetes Monitoring Cheatsheet
쿠버네티스 모니터링
쿠버네티스 클러스터 모니터링은 어떻게하여야 할까
Prometheus : 메인
모니터링 메인툴 도구
- 메트릭 수집
- 데이터베이스(시계열)
- 확인을 위한 웹 UI
Node Exporter(노드 익스포터) : 수집
각 노드 메트릭 정보를 HTTP로 공개
- 대상 : 개별 노드
Kube-state-metrics(쿠버 스테이트 메트릭) : 수집
클러스터의 로우한 메트릭 정보를 수집하여 프로메테우스가 수집할 수 있는 형태로 변환
- 대상 : 전체 클러스터
Alert-Manager : 노티
규칙을 설정하고 이벤트가 발생하면 메세지를 대상에 전달
pushgateway
크론같이 일시적으로 도는 데이터를 모아 저장하고 이를 프로메테우스가 주기적으로 땡겨갈 수 있도록 임시로 저장해 둠
PromQL
프로메테우스에 쌓인 데이터(메트릭 값들) 쿼리 언어
데이터 구조
Element : 이름과 레이블 이름으로 구성
- 이름 : 메트릭의 종류(on/off, memory 사용량 등)
- 레이블 : element의 property로 이해하면 좋음. 메트릭값에 대한 설명. 앱 이름, 인스턴스, 노드 등 Value : 실제 값. ex) 켜져있으면 1, 꺼져있으면 0
프로메테우스 on/off 여부에 대한 실제 데이터
Element# up:온/오프up{app="prometheus",app_kubernetes_io_managed_by="Helm",chart="prometheus-11.6.0",component="node-exporter",heritage="Helm",instance="192.168.1.103:9100",job="kubernetes-service-endpoints",kubernetes_name="prometheus-node-exporter",kubernetes_namespace="default",kubernetes_node="w3-k8s",release="prometheus"}Value # 값1 # 켜져있음
PromQL 예제
프로메테우스에 저장된 데이터를 확인하기 위한 쿼리언어
ex) w3-k8s 노드에서 수행(kubernetes_node="w3-k8s") 중인 앱의 ON/Off(up)여부 확인
up{kubernetes_node="w3-k8s"}
엘레멘트에 대한 쿼리
쿼리
레이블 매처
4종류의 matcher가 있음
- = : 같음
- != : 같지않음
- =~ : 정규식해당
- !~ : 정규식 해당하지 않음
up{kubernetes_node="w3-k8s"} # 노드 이름이 w3-k8sup{kubernetes_node!="w3-k8s"} # 노드 이름이 w3-k8s가 아님up{kubernetes_node~="w.*"} # 노드 이름이 w로 시작.up{kubernetes_node~="w.*"} # 노드 이름이 w로 시작하지 않음.up{instance!~"^(?:[0-9]{1,3}\\.){3}[0-9]{1,3}:.+$"} # IP 주소 거르기
값에 대한 쿼리
값에 대한 연산자
- 비교 연산자 : >, < ...
- 논리 연산자 : and, or ...
- 산술 연산자 : +, -, /, * ...
- 집계 연산자 : avg, by, without ...
값의 데이터 타입
시계열 데이터이므로 레인지 형태로 땡길 수 있음 ex) 시간별 메모리 사용 률.
- 레인지 셀렉터 : 구간에 대한 값을 벡터로 땡김
- ex) node_cpu_seconds_total[5m] : 가장 최근 5개 node_cpu_seconds_total값. 기본 60초 마다 한번씩 값을 저장하므로...
참고
널