kubernetes monitoring & logging 관련 정리

Keno Kim·2024년 10월 26일

prometheus 에 대해

  • 시계열 데이터베이스: 각 데이터는 메트릭과 레이블로 구분되어 저장됩니다.
  • 경고 및 알림: 조건에 따라 Alertmanager가 경고를 전송해 빠른 대응이 가능합니다.
  • 다양한 Exporter 지원: 서버, 애플리케이션, 데이터베이스 등 다양한 시스템의 메트릭을 수집할 수 있습니다.
  • 클라우드 네이티브에 최적화: 쿠버네티스 같은 환경에서 자동 서비스 탐색을 지원하여 동적 인프라 모니터링이 용이합니다.

kube-prometheus-stack (helm 차트): 구성 요소

  • node-exporter 로 node 의 시스템 메트릭을, kube-state-metrics 로 kubernetes 리소스 메트릭을 prometheus 서버로 수집하여 (pull) grafana 로 시각화한다.

Prometheus

  • 모니터링 데이터 수집: Kubernetes 클러스터 내 모든 노드, 네임스페이스, 파드, 컨테이너의 다양한 메트릭을 수집합니다.
  • Custom Metrics: Kubernetes 오토스케일링 및 기타 사용자 정의 메트릭 수집도 가능합니다.

Alertmanager

  • 알림 관리: 경고를 생성하고, 설정에 따라 이메일, Slack, PagerDuty 등 다양한 채널로 알림을 전송합니다.
  • Alert Rules: 특정 메트릭의 임계값을 넘었을 때 경고를 설정할 수 있습니다. 예를 들어, CPU 사용률이 높은 경우 알림을 보낼 수 있습니다.

Grafana

  • 메트릭 시각화: 수집된 메트릭을 기반으로 대시보드를 구성해 실시간으로 클러스터 상태를 시각화할 수 있습니다.
  • 사전 구성된 대시보드: Kubernetes 모니터링에 유용한 여러 기본 대시보드를 제공하여 빠르게 시작할 수 있습니다.

Node Exporter 및 kube-state-metrics

  • Node Exporter: 노드의 CPU, 메모리, 파일 시스템 등의 리소스 사용량을 Prometheus로 수집합니다.
  • kube-state-metrics: Kubernetes 리소스의 상태(Pod, Service, Deployment 등)를 수집하여 Prometheus에서 모니터링할 수 있도록 합니다.

Prometheus Operator

  • Prometheus와 관련 리소스를 Kubernetes 리소스로 관리할 수 있게 해주는 Operator입니다. 이를 통해 Prometheus 인스턴스, 알림 설정, 대시보드 등을 CRD(Custom Resource Definition)로 정의하고 관리할 수 있습니다.



kube-prometheus-stack 에서 모니터링 하는 대상

node exporter

  • CPU, 메모리, 디스크 사용량: 각 노드의 CPU 및 메모리 사용량, 디스크 I/O 상태
  • 파일 시스템 상태: 파일 시스템별 용량과 사용량, 임계점 도달 여부
  • 네트워크 트래픽: 노드별 네트워크 트래픽, 지연 시간 및 실패율

cAdvisor

  • 기본으로 ServiceMonitor 를 통해 cAdvisor 메트릭을 수집하도록 구성되어 있다.
  • 각 컨테이너의 CPU, 메모리 사용량, 디스크 I/O 상태, 네트워크 메트릭을 수집한다.

kube-state-metrics

  • kube-state-metrics는 Kubernetes API 서버와 통신하여 Kubernetes 리소스의 현재 상태 정보를 수집하고, 이를 Prometheus 형식의 메트릭으로 변환하여 노출합니다.
  • Pod, Node, Deployment, ReplicaSet, DaemonSet, StatefulSet, Service, PersistentVolume 등 다양한 리소스의 상태 정보를 제공합니다.
  • Pod 상태: Pod의 Ready, Running, Pending, Failed와 같은 상태와 함께 각 컨테이너의 상태, 재시작 횟수 등.
  • Node 상태: Node의 가용성(Ready 상태) 및 메모리, CPU 자원의 총량과 할당된 자원, 상태 변화.
  • Deployment 상태: Deployment에서 원하는 복제본 수와 실제 복제본 수, 업데이트 진행 상황, 상태 변화.
  • Service 상태: Service의 엔드포인트와 연결된 Pod 수, 상태 변화.
  • ConfigMap 및 Secret: ConfigMap 및 Secret의 유효성, 사용 상태.
  • PersistentVolume: PersistentVolume(PV)의 상태와 사용 용량, 연결된 PersistentVolumeClaim(PVC) 정보.
  • Namespace 상태: 네임스페이스의 리소스 상태 및 할당된 Resource Quotas.
  • 클러스터 내 리소스(CPU, 메모리) 할당 상태를 메트릭으로 노출하여, 리소스 할당과 사용량을 비교하고 모니터링할 수 있습니다.
  • Resource Quota: 네임스페이스나 프로젝트 단위로 할당된 리소스의 사용 현황을 확인하여, 초과할 가능성이 있는 리소스에 대한 알림 설정에 유용합니다.
  • Horizontal Pod Autoscaler(HPA) 및 Vertical Pod Autoscaler(VPA)와 연계하여, 각 리소스의 스케일링 상태와 기준에 따라 오토스케일링이 잘 이루어지고 있는지 모니터링할 수 있습니다.

별도로 정의한 ServiceMonitor 타입

  • Service 를 별도로 정의하여 애플리케이션 등 엔드포인트를 노출하여 메트릭을 수집할 수 있다.
  • 예를 들어, spring boot actuator, flask prometheus client
  • Kubernetes의 서비스(Service) 리소스를 기반으로 Prometheus가 메트릭을 수집할 수 있게 설정합니다.
  • ServiceMonitor는 특정 네임스페이스, 레이블, 서비스 포트 등을 지정하여 Prometheus가 관심 있는 서비스에서만 메트릭을 수집하도록 합니다.
  • ServiceMonitor를 정의하면 Prometheus Operator가 이를 감지하고 자동으로 Prometheus의 설정을 업데이트하여 지정된 서비스의 엔드포인트에서 메트릭을 수집합니다.
  • 이를 통해 Prometheus의 스크래핑 설정이 자동으로 적용되므로, 매번 Prometheus 설정 파일을 직접 수정할 필요가 없습니다.
  • ServiceMonitor는 다양한 수집 옵션을 제공하여 메트릭 수집 주기, HTTP 경로, 타임아웃 등 세부적인 수집 조건을 설정할 수 있습니다.
  • 예를 들어, 메트릭을 수집할 엔드포인트의 경로(/metrics), 수집 간격(예: 15초), HTTP/S 설정 등을 지정할 수 있습니다.

logging

logging architecture

application container logs

  • 애플리케이션 컨테이너 로그는 여러 가지 방법으로 중앙 저장소로 포워딩할 수 있다.
  1. 모든 애플리케이션 로그를 STDOUT 으로 전달하면, 모니터링 데몬셋이 docker daemon 에서 직접 로그를 수집한다.
  2. Sidecar pattern 으로 애플리케이션 파드에 로그 포워딩용 컨테이너를 붙여 실행시킨다.
  • 이러한 두 가지는 패턴이며, 여러 기술 스택에서 이 구조를 사용한다.
profile
개발자의 생각 로그

0개의 댓글