kok202
쿠버네티스 입문 - 11 - 로깅과 모니터링

2020. 4. 8. 23:54[정리] 기능별 개념 정리/Kubernetes

컨테이너의 로그 수집

컨테이너 로그 수집은 보통 컨테이너 런타임인 도커가 담당한다.

앱컨테이너가 stdout, stderr 스트림을 이용해 로그를 출력하면 로그 드라이버로 리다이렉트하여 출력하게 설정되어있다.

 

 

 

파드의 로그 확인하기

kubectl logs -f 파드이름

명령어를 이용하면 파드가 떠있는 노드에 접근하지 않아도 파드의 로그를 확인할 수 있다.

-f 옵션은 로그를 지속해서 수집하는 테일링 옵션이다.

실시간으로 여러개 파드의 로그를 지켜보고 싶을 때는 실시간 로그모니터링 도구인 스턴을 사용할 수 있다.

 

 

 

전통적인 어플리케이션 운영 환경에서의 로깅

  1. 로컬 파일 시스템의 지정된 위치에 로그를 저장한다.
  2. 로그로테이트를 이용해 로그를 일정 기간만 보관한다.

이런 방식은 항상 지정된 장비에서만 실행된다는 것이 전제이다.

하지만 운영중인 장비가 많아지면 모든 장비의 로그를 확인하는 것이 힘들다.

컨테이너 오케스트레이터 환경에서는 더더욱 힘들다.

 

 

 

클러스터 레벨의 로깅

컨테이너가 비정상 종료되거나 노드에 장애가 있더라도 앱 컨테이너의 로그를 확인할 수 있으려면 분리된 스토리지를 구축해야한다.

쿠버네티스 오브젝트의 생명주기와 다른 스토리지를 구축하는 아키텍처를 클러스터 레벨 로깅이라고한다.

쿠버네티스 자체는 클러스터 레벨 로깅 도구를 지원하지 않는다.

아래에 나오는 모니터링 도구들 힙스터, 메트릭 서버, 프로메테우스… 설치가 필요하다.

 

 

 

쿠버네티스 클러스터의 메트릭 모니터링

쿠버네티스 클러스터에서 모니터링 대상이 되는 주요 메트릭은 시스템, 서비스 메트릭이다.

시스템 메트릭

CPU, 메모리 사용량 같은 시스템 메트릭

크게 아래 두가지 메트릭으로 나뉜다.

코어 메트릭 : 쿠버네티스 내부 컴포넌트들이 사용하는 매트릭. kubectl top 같은 명령이 보여주는 코어 메트릭 값이다.

비코어 메트릭 : 쿠버네티스가 직접 사용하지 않는 다른 시스템 메트릭

 

서비스 메트릭

어플리케이션을 모니터링 할 때 필요한 메트릭.

크게 아래 두가지 메트릭으로 나뉜다.

쿠버네티스 인프라용 컨테이너에서 수집하는 메트릭

사용자 어플리케이션에서 수집하는 메트릭

 

 

 

코어 메트릭 파이프라인

kubelet 에 내장된 cAdvisor 가 노드/파드/컨테이너의 사용량 정보를 수집한다.

메트릭 서버는 이 정보를 kubelet 에서 불러와서 메모리에 저장한다.

이렇게 저장된 메트릭은 마스터의 메트릭 APU 를 이용해 다른 시스템 컴포넌트가 조회할 수 있다.

 

 

 

모니터링 파이프라인

모니터링을 위한 도구 조합은 cAdvisor + 힙스터 + 인플럭스DB 조합이 가장 많이 쓰인다.

하지만 최근에는 cAdvisor + 프로메테우스 가 가장 핫하다.

 

 

 

힙스터

힙스터는 시스템 메트릭 모니터링을 위한 쿠버네티스의 기본 모니터링 도구였지만 앞으로의 사용을 권하지 않는다.

힙스터는 쿠버네티스 클러스터에서 파드로 실행된다.

 

cAdvisor + 힙스터 + 인플럭스DB 조합의 동작 방식

  1. 힙스터가 kube-apiserver 와 통신해서 전체 클러스터의 노드와 파드를 알아내고 모니터링 데이터를 수집한다.
  2. 모니터링 데이터를 수집할 때 노드의 kubelet 에 접근해서 cAdvisor 로 데이터를 불러온다.
  3. 이를 인플럭스 DB 에 저장한다.
  4. 그라파나를 이용해 차트를 그린다.

 

 

 

메트릭 서버

힙스터의 간소화 버전이다.

코어 메트릭 파이프 라인을 효율적으로 사용하고자 힙스터 대신 모니터링 표준으로 도입한 것.

메트릭 서버는 kubelet으로 데이터를 수집해서 메모리에 저장한다.

메모리에 저장한 파드/노드의 메트릭 데이터를 조회 할 수 있도록 kube-apiserver 에 메트릭 API 를 제공한다.

 

쿠버네티스에 필요한 핵심 데이터는 etcd 에 저장되는 반면 부하상의 문제로 메트릭 데이터는 메모리에 저장된다. 

따라서 메트릭 서버용으로 실행한 파드를 재시작하면 수집된 데이터가 사라진다.

그러므로 데이터 보관주기를 길게하고 싶다면 외부 스토리지를 사용해야한다.

 

 

 

프로메테우스

최근에 가장 주목을 많이 받는 모니터링 도구다.

기본적인 모니터링 데이터 수집은 프로메테우스 서버가 수집하려는 대상에서 데이터를 가져오는(Pull) 구조다.

외부에서 직접 보낸 (Push) 모니터링 데이터를 푸시 게이트웨이에서 받아서 저장하게 할 수도 있다.

수집하려는 대상은 정적으로 설정할 수도 있고 동적으로 찾을 수 있게 설정할 수도 있다.