유닛별 로그 필터링
이 단계에서는 Docker 컨테이너 로그를 해당 로그를 생성한 "유닛"별로 필터링하는 방법을 배우게 됩니다. Docker 로그의 컨텍스트에서 "유닛"은 일반적으로 컨테이너 자체를 의미합니다. docker logs는 본질적으로 단일 컨테이너 (또는 유닛) 에서 작동하지만, 이 개념을 이해하는 것은 더 발전된 로깅 시스템으로 작업하거나 서로 다른 컨테이너의 로그를 구별해야 할 때 중요합니다.
Docker 에서 유닛별로 로그를 필터링하는 주요 방법은 docker logs 명령을 사용할 때 컨테이너 이름 또는 ID 를 지정하는 것입니다. 우리는 이전 단계에서 이 작업을 수행했습니다.
두 개의 서로 다른 컨테이너를 실행하여 로그가 어떻게 분리되는지 살펴보겠습니다. 두 컨테이너 모두 alpine 이미지를 사용하지만 이름과 명령이 약간 다릅니다.
먼저, 이전 단계의 mylogger 컨테이너가 중지되고 제거되었는지 확인합니다.
docker stop mylogger || true
docker rm mylogger || true
이제 container1이라는 첫 번째 컨테이너를 실행합니다.
docker run -d --name container1 alpine sh -c 'while true; do echo "Container 1 log at $(date)"; sleep 3; done'
이 컨테이너는 3 초마다 로그 메시지를 출력합니다.
다음으로, container2라는 두 번째 컨테이너를 실행합니다.
docker run -d --name container2 alpine sh -c 'while true; do echo "Container 2 log at $(date)"; sleep 5; done'
이 컨테이너는 5 초마다 로그 메시지를 출력합니다.
이제 container1에서만 로그를 보려면 다음을 사용합니다.
docker logs container1
container1에서 생성된 로그 메시지만 표시됩니다.
container2에서만 로그를 보려면 다음을 사용합니다.
docker logs container2
container2에서 생성된 로그 메시지만 표시됩니다.
이는 docker logs가 지정된 컨테이너 ("유닛") 별로 어떻게 본질적으로 필터링하는지 보여줍니다. 여러 컨테이너에서 로그를 수집하는 중앙 집중식 로깅 시스템을 사용하는 경우, 일반적으로 각 로그 항목과 관련된 메타데이터 (컨테이너 이름 또는 ID) 를 사용하여 유닛별로 필터링합니다.
docker logs 자체에는 일부 시스템 로깅 도구와 같은 별도의 --unit 플래그가 없지만, 로그의 소스 (컨테이너) 별로 필터링하는 기본 개념은 컨테이너 이름 또는 ID 를 지정하여 달성됩니다.
마지막으로, 두 컨테이너를 모두 중지하고 제거합니다.
docker stop container1 container2
docker rm container1 container2