Docker 컨테이너를 효과적으로 모니터링하는 것은 애플리케이션의 안정성과 원활한 운영을 보장하는 데 필수적입니다. Docker 로그는 컨테이너 내부 작동 방식에 대한 통찰력을 제공하여 성능 추적, 오류 발견, 문제 해결을 더욱 효율적으로 지원하는 중요한 역할을 합니다.이 포괄적인 가이드는 Docker 로그를 검색하고 해석하는 과정을 안내하며, 일반적인 컨테이너 문제를 해결하는 데 필요한 지식을 제공합니다.
Docker 로그 이해
Docker 로그는 실행 중인 Docker 컨테이너 내에서 발생하는 모든 활동에 대한 자세한 기록으로 구성됩니다.여기에는 표준 출력(stdout)과 표준 오류 메시지(stderr)가 모두 포함되어 있어 컨테이너 성능을 모니터링하고 잠재적인 문제를 진단할 수 있습니다.
기본적으로 Docker 로그는 호스트 시스템의 “/var/lib/docker/containers” 디렉터리에 JSON 파일로 저장됩니다.각 컨테이너는 “[container_id]-json.log” 형식의 자체 로그 파일을 생성합니다.이 로그에 직접 접근하거나 docker logs터미널에서 해당 명령을 사용하여 쉽게 확인할 수 있습니다.
이러한 로그에는 문제 해결에 도움이 되는 필수 애플리케이션 메시지, 경고 및 오류 정보가 포함되어 있습니다.또한 시작 이벤트 및 리소스 사용량 메트릭과 같은 시스템 관련 정보도 제공될 수 있습니다.
Docker는 더 나은 로그 관리를 위해 로깅 드라이버를 사용합니다.로깅 드라이버는 로그가 저장되거나 전송되는 방식과 위치를 지정합니다.기본 로깅 드라이버인 json-file 은 로컬 머신의 로그를 JSON 형식으로 캡처하지만, 관리 및 분석 기능을 향상시키기 위해 로그를 외부 시스템으로 전송하는 다른 드라이버를 선택할 수 있습니다.
Docker 로그에 액세스하기
“json-file” 또는 journald 로깅 드라이버를 사용하는 실행 중인 컨테이너의 로그를 보려면 다음 명령을 실행하면 됩니다.
docker logs [OPTIONS] CONTAINER_NAME_OR_ID
을 대상 컨테이너의 해당 이름 또는 ID로 바꾸세요 CONTAINER_NAME_OR_ID.실행 중인 모든 컨테이너 목록을 보려면 다음 명령을 사용하세요.
docker ps
이 명령을 실행하면 활성 컨테이너와 해당 컨테이너의 ID, 이름, 상태 및 추가 관련 정보가 표시됩니다.

예를 들어 Docker가 openwebui 와 ollama 라는 두 개의 컨테이너를 실행하여 openwebui 컨테이너 의 로그에 액세스하는 경우 다음을 실행합니다.
docker logs openwebui

아래와 같이 이름 대신 컨테이너 ID를 사용하여 로그를 볼 수도 있습니다.
docker logs 1f351684ae30

Docker 로그 옵션 및 플래그
이 docker logs명령은 로그 표시를 사용자 정의하는 다양한 옵션을 지원합니다.다음은 몇 가지 중요한 매개변수입니다.
| 옵션 | 설명 | 예제 명령 |
|---|---|---|
| -세부 | 로그에 추가 세부 정보를 표시합니다. | docker logs –details container_name |
| –팔로우, -f | 실시간으로 새로운 로그 항목을 지속적으로 표시합니다. | docker logs -f container_name |
| -부터 | 설정된 시간이나 기간(예: 2024-07-08T13:42:13Z 또는 10m) 이후에 생성된 로그를 표시합니다. | docker logs –since 10m container_name |
| –꼬리, -n | 로그 끝에서부터 지정된 수의 줄을 표시합니다. | docker logs –tail 50 container_name |
| –타임스탬프, -t | 각 로그 항목에 타임스탬프를 추가합니다. | docker logs -t container_name |
| -까지 | 지정된 시간 이전에 생성된 로그를 표시합니다. | docker logs –until 2024-07-08T14:00:00Z container_name |
예를 들어, 특정 컨테이너의 마지막 50개 로그 항목을 보려면 다음을 실행합니다.
docker logs --tail 50 openwebui

--follow마찬가지로, 로그의 실시간 업데이트나 --since시간 필터링된 로그 항목 등 다른 옵션을 사용할 수 있습니다.
Docker 로그를 파일에 저장
Docker 로그를 텍스트 파일에 저장하려면 리디렉션 연산자나 사용 가능한 명령 옵션을 활용하세요.예를 들어, 아래 명령은 지정된 컨테이너의 로그를 “container_logs.txt”에 저장합니다.
docker logs container_name > container_logs.txt

나중에 텍스트 편집기(예: 메모장, Visual Studio Code, nano)를 사용하여 이 파일에 접근하여 저장된 로그를 검토할 수 있습니다.

Docker Compose에서 로그 보기
Docker Compose로 관리되는 컨테이너의 로그에 액세스하려면 다음 docker compose logs명령을 사용하세요. Compose 프로젝트의 모든 컨테이너에 대한 로그를 보려면 다음 명령을 실행하세요.
docker compose logs
특정 서비스의 로그에 관심이 있다면 명령에 서비스 이름을 추가하세요.
docker compose logs service_name
Docker 로그 관리를 위한 팁
Docker는 로깅 드라이버를 사용하여 컨테이너의 출력을 캡처하고 저장합니다.기본 JSON 파일 드라이버는 호스트에 JSON 형식으로 로그를 저장합니다.다른 드라이버로 전환하여 외부 서비스로 로그를 전송하면 로그 관리를 더욱 효율적으로 제어할 수 있습니다.
Docker는 로그 전달을 위해 두 가지 모드를 제공합니다.차단 모드는 로그를 즉시 전송하지만 성능에 약간의 영향을 미칠 수 있습니다.반대로, 비차단 모드는 로그를 전달하기 전에 메모리에 일시적으로 보관합니다.이는 지연 시간을 최소화할 수 있지만, 메모리가 가득 찰 경우 로그가 손실될 위험이 있습니다.
유연성을 높이려면 애플리케이션 내에서 로깅을 관리하는 것을 고려해 보세요.하지만 컨테이너 데이터는 일시적이므로 로그를 영구 저장소에 저장하거나 외부 로그 관리 서비스로 전달하는 것이 좋습니다.
Docker 볼륨을 사용하면 로그를 안전하게 보호할 수 있습니다.볼륨은 호스트에 직접 데이터를 저장하고 컨테이너가 중지되거나 재시작되는 동안에도 가용성을 보장하므로 바인드 마운트보다 장기 저장에 더 적합합니다.
또 다른 효과적인 전략은 전용 로깅 컨테이너를 사용하는 것입니다.이 특수 컨테이너는 다양한 컨테이너의 로그를 수집하고 관리하여 중앙 시스템으로 라우팅합니다.이를 통해 주요 애플리케이션 컨테이너를 가볍고 관리하기 쉽게 유지할 수 있습니다.
결론
결론적으로, Docker 로그는 컨테이너 성능을 모니터링하고 신속한 문제 해결을 지원하는 데 매우 중요합니다.docker logs영구 스토리지 및 효과적인 로깅 드라이버를 포함한 모범 사례를 준수하고 다음과 같은 명령을 활용하면 안정적인 로그 관리를 유지할 수 있습니다.체계적인 로깅 프레임워크는 컨테이너의 안정성을 유지하고 애플리케이션을 효율적으로 실행하는 데 도움이 됩니다.향상된 로그 모니터링 및 분석을 위해 ELK Stack, Fluentd, Prometheus, Grafana와 같은 도구를 통합하는 것을 고려해 보세요.
답글 남기기