Observability - Log

쿠버네티스 로그 모니터링

쿠버네티스 로그에는 다음과 같은 종류가 있습니다.

  • 각 컨테이너 내부의 소프트웨어와 애플리케이션이 저장한 로그

  • 쿠버네티스가 관리하는 컨테이너의 표준 출력 (Standard Out) 로그

이러한 로그는 컨테이너의 상태나 메트릭 정보로 확인하기 힘든 모니터링의 사각지대를 보완하는 역할을 합니다.

쿠버네티스의 컨테이너 표준 출력 로그 확인

쿠버네티스는 기본적으로 각 컨테이너의 로그를 확인하기 위한 kubectl logs 명령을 제공합니다.

kubectl logs pod/<Pod명> -n <Namespace명>

만약 Pod 내에 2개 이상의 컨테이너가 존재하면 로그를 확인하려는 컨테이너를 지정해야 합니다.

kubectl logs pod/<Pod명> -c <컨테이너명> -n <Namespace명>

와탭 콘솔에서 직접 컨테이너 로그 확인

와탭을 통해 컨테이너를 모니터링하다가 로그를 확인하기 위해 터미널 화면에 접근하여 커맨드 라인 도구를 실행한다면 여간 불편한 일이 아닐 것입니다. 그래서 와탭은 kubectl logs 명령을 통해 제공되는 로그 정보를 와탭 콘솔 화면에서 동일하게 확인할 수 있는 기능을 제공합니다. 와탭이 사용자 쿠버네티스 클러스터에 저장된 로그를 직접 조회하는 방식입니다.

그런데 생각해봐야 할 점이 있습니다. 컨테이너에서 생성된 로그는 기본적으로 컨테이너 내부에 저장됩니다. 따라서 컨테이너를 종료하면 이 로그는 모두 사라지게 됩니다. 쿠버네티스가 제공하는 컨테이너 표준 출력 로그도 휘발성 정보입니다. 일정 기간 또는 일정 용량만 보관되기 때문입니다.

따라서 로그 데이터를 안정적이고 지속적으로 관리하기 위한 별의 관리 방안이 필수적입니다. 특히 마이크로서비스 아키텍처 도입이 확산되면서 비즈니스를 구성하는 컨테이너 수량이 증가함에 따라 로그의 확인, 관리 방안은 더욱 복잡해지고 있습니다.

좋은 방법이 있을까요?

와탭 로그 서비스를 통해 컨테이너 로그를 저장, 관리하면 됩니다.

와탭은 사용자 쿠버네티스 환경으로부터 컨테이너 내부에 저장되는 각종 애플리케이션 로그와 쿠버네티스의 컨테이너 표준 출력 로그를 안정적으로 수집, 관리하고 특정 대상 별 정보를 제공하거나 상호 연계 분석에 활용할 수 있는 다양한 기능을 제공합니다.

컨테이너 표준 출력 (Standard Output) 로그 저장 설정

와탭 로그 서비스를 통해 컨테이너의 Standard Output 로그 저장 기능을 사용하면 그에 따른 추가 비용이 청구됩니다.

일부 구 버전 에이전트의 경우는 컨테이너 Standard Output 로그 저장 기능을 제공하지 않습니다. 에이전트 업그레이드 방법은 다음과 같습니다.

에이전트 업데이트
kubectl set image daemonset/whatap-node-agent whatap-node-agent=whatap/kube_mon:<에이전트버전> -n whatap-monitoring

와탭 쿠버네티스 에이전트 버전은 https://hub.docker.com/r/whatap/kube_mon/tags 를 통해 확인할 수 있습니다.

컨테이너의 Standard Output을 지속 저장하기 위해서는 와탭 쿠버네티스 노드 에이전트에 logsink_enabled=true 설정 추가 작업이 필요합니다. (와탭 쿠버네티스 노드 에이전트는 DaemonSet 형태입니다)

  • 와탭 콘솔 [에이전트 설정]을 통해 logsink_enabled=true 설정 추가

    • 쿠버네티스 프로젝트 전체 노드를 대상으로 설정을 추가하려면 [프로젝트 디폴트] → [노드] 대상으로 설정 추가

    • 일부 노드를 대상으로 설정을 추가하려면 단일 또는 복수 노드 선택 후 설정 추가

whatap kubernetes container map logsink enabled
Figure 1. 에이전트 설정 > 노드 에이전트 선택 > [+ 옵션 추가 ] > [모든 에이전트에 적용할 옵션 선택] > 적용 대상 노드 선택