개발자

[쿠버네티스] 로그 관련

2024년 07월 17일조회 50

애플리케이션이 STDOUT 및 STDERR 대신 파일에 직접 로그를 작성하는 경우 /var/log/containers/에 로그가 남지 않게됩니다. 애플리케이션이 100개이상이라고 가정할 때 파일에 직접 로그를 작성한 경우를 빠르게 찾는 명령어나 알 수 있는 방법 더 나아가 promtail에서 어떻게 설정해야 파일에 직접 로그를 작성한 경우도 수집하는지 알려주세요

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 2

lepffm님의 프로필 사진

k8s는 컨테이너 내부의 디렉토리, 파일 등에대해 외부의 persistent volume을 사용하도록 설정할 수 있습니다. hostPath, ebs, nfs 등이 있지만 가장 일반적으로 사용하는 것은 pvc(https://kubernetes.io/docs/concepts/storage/persistent-volumes/) 입니다.

태기님의 프로필 사진

태기

작성자

팀벨 데브옵스 엔지니어2024년 07월 18일

pvc를 사용하는것도 결국엔 클러스터 서버의 볼륨잡아서 사용하는걸로 알고있는데 외부라면 클러스터서버외엔 타서버를 말씀하시는건가요?

lepffm님의 프로필 사진

Grafana에서 정보를 수집하려는 목적이라면 promtail 대신 애플리케이션 측에서 OTEL Agent 를 구성하고 OTEL Collector 를 통해 로그를 수집할 수도 있습니다. 그러나 애플리케이션을 변경할 수 없고 promtail 방식을 유지해야 한다면 PV를 사용할 수 있습니다. PV중에는 단일 노드일때 유용한 hostPath 가 있습니다. ( 호스트 노드의 파일시스템에 있는 파일이나 디렉터리를 파드에 직접 마운트) 따라서 기존과 같은 방식으로 경로를 명시할 수 있습니다.

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2024년 07월 17일

STDOUT 및 STDERR 대신 파일에 직접 로그를 작성하는 애플리케이션의 경우, 로그를 수집하고 모니터링하려면 다소 복잡해질 수 있습니다. 이런 경우에는 사안을 잘 처리하려면 로깅 에이전트가 해당 파일을 읽을 수 있도록 구성해야 합니다. Promtail은 Loki 스택의 컴포넌트로, 쿠버네티스 클러스터에서 로그파일을 발견하고 추적하여 Loki 서버로 전송합니다. Promtail은 기본적으로 /var/log/pods/* 경로 아래에 있는 모든 *.log 파일을 스캔하지만, 추가 파일 경로를 지정하여 직접 로그를 작성하는 경우에도 로그를 수집할 수 있게 설정할 수 있습니다. 이렇게 하려면 Promtail의 설정에서 `scrape_configs` 섹션을 수정해야 합니다. 예를 들어, `/app/logs/`경로에 애플리케이션이 로그를 작성한다고 가정하면, 다음과 같이 설정할 수 있습니다: ```yaml scrape_configs: - job_name: system ... static_configs: - targets: - localhost labels: job: varlogs __path__: /var/log/*log - job_name: app_logs static_configs: - targets: - localhost labels: job: applogs __path__: /app/logs/*log ``` 이렇게하면 Promtail은 이제 애플리케이션이 `/app/logs/`경로에 작성하는 로그도 수집합니다. 그러나 이 방식은 정적으로 로그파일 경로를 지정해야 하므로, 동적으로 변경되는 로그파일 경로를 추적하기 어려울 수 있습니다. 로그가 남지 않는 애플리케이션을 찾으려면 쿠버네티스 클러스터에서 실행 중인 모든 파드의 로그를 확인하고, 그 중에서 /var/log/containers/에 로그 파일이 없는 파드를 찾아내는 스크립트를 작성할 수 있습니다. 이런 방식은 많은 수동 작업을 필요로 할 수 있으므로, 가능하다면 애플리케이션이 항상 STDOUT 또는 STDERR에 로그를 작성하도록 설정하는 것이 좋습니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!