쿠버네티스의 로그 관리
쿠버네티스의 로그 관리 : 컨테이너 런타임이 로그를 수집하여 컨테이너를 실행 중인 노드에 파일 형태로 저장
로그 관리시스템은 노드에 쌓인 로그를 수집해서 중앙화된 저장소에 전달하고, 적절한 UI를 통해 이 로그에 대한 필터링 및 검색 기능을 제공함

- 노드는 컨테이너가 출력한 로그를 그대로 저장. 로그 파일의 이름은 표준 명명규칙이 존재함
파드이름_네임스페이스_컨테이너이름-컨테이너식별자.log
형태로 로그 파일이 저장됨
- 대부분의 쿠버네티스 구현체는 노드에 로그 로테이션 기능을 포함하고 있어 로그 파일이 디스크 용량을 모두 차지하는 일을 방지함
- 로그 콜렉터는 각 노드에서 동작하며 로그 파일을 수집하고 저장소로 전달함
- 노드의 저장된 로그 파일들을 보기 위해 노드의
/var/log
경로를 pod에 mount 해서 확인 가능
apiVersion: apps/v1 kind: Deployment metadata: name: sleep labels: kiamol: ch13 spec: selector: matchLabels: app: sleep template: metadata: labels: app: sleep spec: containers: - name: sleep image: kiamol/ch03-sleep volumeMounts: - name: varlog mountPath: /var/log - name: varlibdockercontainers mountPath: /var/lib/docker/containers readOnly: true volumes: - name: varlog hostPath: path: /var/log - name: varlibdockercontainers hostPath: path: /var/lib/docker/containers

플루언트디를 이용한 로그 파일 수집
플루언트 비트를 쿠버네티스에서 구동하는 구조
- 모든 노드에서 콜렉터 파드를 데몬셋 형태로 실행시키고, 이 파드가 로그 파일에 접근할 수 있도록 호스트 경로 마운트를 추가
그 이후 내용은 플루언트디와 플루언트비트를 활용하는 방법에 대한 내용임
수집된 로그를 일래스틱서치에 저장하기
로그 파싱 및 필터링하기
쿠버네티스에 적용할 수 있는 그 외 로그 모델
쿠버네티스는 기본적으로 애플리케이션 로그가 컨테이너의 표준 출력 스트림으로 출력된다고 간주. 따라서 이 스트림에서 출력되는 내용을 수집하고 저장하도록 만들었으며, 우리가 앞서 배운 로그 모델도 이 기반위에 성립
단점
- 애플리케이션이 stdout 으로 로그 출력하지 않는다면 사이드카 컨테이너가 필요함
- 해당 애플리케이션은 자체 로그 파일을 따로 갖고 있으므로 디스크 용량이 중복 사용됨
- 노드가 로그를 파일에 저장하기에 디스크 용량이 중복되며 지연도 발생. 또한 별도의 컴포넌트가 로그 파일이 쌓이지 않도록 파일 삭제해주어야 함
- 플루언트 비트가 기능이 강력하고 효율적이기는 하나, 복잡한 로그 처리 파이프라인에 연산 능력이 소비되며 입력과 출력 사이에 지연이 발생
장점
- 플루언트디 및 플루언트 비트 모델의 장점은 커뮤니티에서 널리 쓰이는 표준 방식을 그대로 사용할 수 있다는 점
- 로그 수집 및 저장 코드를 직접 작성하고 유지 보수하기보다는 정규 표현식을 들고 씨름하는 편이 압도적으로 수고가 적다