개발자
애플리케이션이 STDOUT 및 STDERR 대신 파일에 직접 로그를 작성하는 경우 /var/log/containers/에 로그가 남지 않게됩니다. 애플리케이션이 100개이상이라고 가정할 때 파일에 직접 로그를 작성한 경우를 빠르게 찾는 명령어나 알 수 있는 방법 더 나아가 promtail에서 어떻게 설정해야 파일에 직접 로그를 작성한 경우도 수집하는지 알려주세요
답변 2
k8s는 컨테이너 내부의 디렉토리, 파일 등에대해 외부의 persistent volume을 사용하도록 설정할 수 있습니다. hostPath, ebs, nfs 등이 있지만 가장 일반적으로 사용하는 것은 pvc(https://kubernetes.io/docs/concepts/storage/persistent-volumes/) 입니다.
태기
작성자
팀벨 데브옵스 엔지니어 • 2024년 07월 18일
pvc를 사용하는것도 결국엔 클러스터 서버의 볼륨잡아서 사용하는걸로 알고있는데 외부라면 클러스터서버외엔 타서버를 말씀하시는건가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 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에 로그를 작성하도록 설정하는 것이 좋습니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!