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-k8s
up{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초 마다 한번씩 값을 저장하므로...

참고