안녕하세요 대무무입니다.
오늘은 도커 컨테이너 로그 모니터링을 위한 Dozzle 에 대해 소개하려 합니다.
Dozzle?
Home | Dozzle
Dozzle A lightweight, web-based Docker log viewer that provides real-time monitoring and easy troubleshooting.
dozzle.dev
Dozzle 은 오픈 소스 기반 프로젝트이며 Docker Container 의 모니터링과 디버깅을 간편하게 할 수 있는 로그 뷰어입니다. 직관적인 사용자 인터페이스를 통해 실시간 로그를 스트리밍할 수 있으며 로그 필터링, 검색 기능을 제공하는 웹 기반 뷰어입니다. Dozzle 또한 Docker 를 통해 동작 가능하며 로그의 디버깅 수준에 따른 정보를 색상별로 표시 가능하고 JSON 로그를 지원 합니다. MIT 라이센스이며 원격 Docker Container 에 대해서도 로그 뷰잉이 가능하다는 장점을 가지고 있습니다. 계정 기능이 없으므로 로컬 네트워크 내에서만 운영하는 것을 권장합니다.
설치 방법은?
Docker Container 를 통해 동작하므로 docker-compose 를 통해 구축합니다.
Docker-Compose
version: "3"
services:
dozzle:
container_name: dozzle
image: amir20/dozzle:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
ports:
- 8080:8080
environment:
DOZZLE_HOSTNAME: [HOST_NAME_1]
DOZZLE_REMOTE_HOST: tcp://192.168.0.3:2375|[HOST_NAME_2],tcp://192.168.0.4:2375|[HOST_NAME_3]
restart: unless-stopped
networks:
default:
name: dozzle
- /var/run/docker.sock : Docker 데몬과 Docker 클라이언트 간의 소켓 통신을 위해 사용함, Docker Container 정보, Volume 정보 등을 클라이언트와 통신하기 위해 필요, Host 와의 통신이 목적
- DOZZLE_HOSTNAME : 웹 뷰어에서 표시할 Docker 가 설치된 로컬 호스트명
- DOZZLE_REMOTE_HOST : 원격 호스트에 존재하는 Docker 데몬과 통신하여 연결 가능, tcp://[IP]:[PORT] 형태의 URL 을 통해 통신이 가능하며 원격 호스트의 이름은 | 기호 이후 추가할 수 있음, 여러 원격 호스트를 연결하려면 , 로 구분 가능함
Docker 데몬의 HTTP 통신은 기본적으로 비활성화되어 있으며 이를 활성화하는 방법은 2가지인데요. 1번째 방법은 Docker 데몬이 시작될 때 2375 번 포트를 선점하여 HTTP 통신을 활성화하는 방법인데 이는 Docker 데몬을 다시 시작하여야 하는 귀찮음이 있어서 저는 2번째 방법으로 구축했습니다. 2번째 방법은 /var/run/docker.sock 파일을 이용한 Proxy 인데요. docker.sock 파일을 가지고 2375번 포트로 HTTP 통신하는 컨테이너를 하나 실행하는 것입니다. 다음 명령은 원격 호스트에 Proxy Container 를 실행하는 명령입니다.
$ docker container run -d --privileged --name docker-proxy -v /var/run/docker.sock:/var/run/docker.sock -p 2375:2375 -e CONTAINERS=1 tecnativa/docker-socket-proxy
여기서 중요한 점은 --privileged 옵션을 통해 컨테이너의 권한을 올렸다는 것과 CONTAINERS=1 환경 변수 설정으로 현재 실행 중인 컨테이너의 접근할 수 있는 권한을 활성화 시킬 수 있는 최소한의 방법이라는 점입니다. 원격 호스트에 Proxy 컨테이너를 띄워 놓고 Dozzle Docker-Compose 에 설정하면 됩니다.
사용 방법은?
Docker-Compose 파일을 생성한 후 명령을 통해 실행시키고 난 후 호스트의 IP 와 8080 포트를 통해 브라우저에서 접속합니다.
http://[SERVER_IP]:8080
브라우저를 통해 접속하면 다음과 같은 화면이 뜰텐데요. 실행중인 Container의 개수와 CPU, RAM 사용률과 현재 Dozzle 버전이 보이며 Container 별 평균치로 리스팅되어 있는 것을 확인할 수 있습니다. 왼쪽 Container 이름을 클릭하면 로그를 모니터링 할 수 있습니다.
이런식으로 간단하게 컨테이너의 실시간 로그를 빠르게 모니터링하는 것이 가능합니다. 저는 Docker Container 를 여러 서버에 구축해놓고 있어서 이런 통합된 뷰어가 필요했는데 Dozzle 을 통해 로컬 호스트의 Container 뿐만 아니라 원격지의 Container 도 빠르게 확인할 수 있어서 좋았습니다. 여기서 주의할 점은 2375 포트를 통해 HTTP 통신하는 방식은 보안에 취약하므로 외부로 노출되지 않도록 내부 네트워크에만 구성하는 것을 꼭 권장합니다!
Reference
'인프라' 카테고리의 다른 글
[인프라 / Docker] Slack 과 유사한 오픈 소스 협업 도구 Mattermost (0) | 2024.04.03 |
---|---|
[게임 / Docker] 설날 기념! 팰월드 서버 Docker 로 운영하기 (0) | 2024.02.09 |
[인프라 / Docker] MongoDB (with Replica-Set) (0) | 2024.01.08 |
[인프라 / Docker] 나만의 전자 도서관 Calibre-Web (1) | 2024.01.04 |
[인프라 / VPN] Tailscale 유사 Site-to-Site 설정(Subnet Router) (1) | 2024.01.03 |