에러 원인
라벨 설정 시 설정했던 라벨이 존재하지 않음.
이는 로키는 제대로 연결되었지만, 로그 파일을 제대로 프롬테일에서 받아오지 못했음을 의미한다.
본인의 경우는 프로젝트의 도커컴포즈 볼륨 설정에서, 경로가 제대로 작성되지 않아 망운트가 제대로 되지 않았음.
걸린 시간
3시간 남짓
에러 해결
프로젝트의 로그생성
docker exec -it containerName /bin/sh
프로젝트 내부에서는, 루트 경로에 logs폴더 내부에서 날짜, 에러레벨에 맞게 분기처리를 하여 로그를 생성했다.
호스트 서버에서,
위 명령어를 통해 컨테이너 내부로 진입하는데, 진입하자마자 logs경로에 로그가 잘 들어오고 있길래 당연히 잘 동작할거라 생각했지만
그라파나에서 로키의 ip:port로 커넥션을 연결하는 과정에서 계속해서 아래 에러가 발생했다.
"Data source connected, but no labels received. Verify that Loki and Promtails is configured properly"
라벨을 가져올 수 없는 상황인 것 같았고, 결국 라벨은 로키까지 도달되려면 프로젝트 로그에서 출발한 데이터가 프롬테일을 통해 로키로 전달이 되어야하기 때문에, 프롬테일에서 로그를 받아오기까지의 과정을 확인해볼 수 밖에 없었다.
프롬테일은 로그를 잘 받아오고 있는가?
프롬테일의 로그를보면, 경로는 정확히 추적하고 있는 것으로 보였다.
로그 파일의 바인드 마운트
프로젝트 내부의 로그는 정상적으로 생성되지만, 호스트 내부의 경로에는 로그파일이 정상적으로 생성되지 않았다.
결과론적으로, 프로젝트의 compose설정에서, 볼륨의 마운트 설정이 잘못되어서 해당 위치에 로그파일이 생성되지 않았다.
컨테이너 내부로 접속했을 때, 바로 logs디렉토리가 있어서 compose 설정을 다음과 같이 작성했기 때문에 마운트가 되지 않았다.
version: '3.7'
services:
api:
image: api
container_name: api
build: .
privileged: true
ports:
- '45001:5001'
volumes:
- /var/log/api:/logs
environment:
- PORT=5001
- NODE_ENV=production
다른 곳에서 삽질을 많이 했다. 괜히 프롬테일 설정파일, 로키 설정파일도 뜯어보고.
아예 호스트서버에서 프롬테일 로키를 삭제했다 재설치도 해보고.
영문으로된 자료들을 많이 찾아봤다가
볼륨 경로가 이상하다는 것을 3시간만에 겨우 파악했고... 볼륨경로를 정확히 지정해주었더니 해결되었다.
volumes:
- /var/log/api:/app/logs
참고
2023.04 ~ 백엔드 개발자의 기록
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!