2016-09-07 5 views
0

나는 docker-compose를 사용하고 있으며 'gelf'로깅 드라이버를 사용하여 개별 컨테이너 로깅을 동일한 작성에서 정의 된 logstash 컨테이너로 보내려합니다.작성자가 특정 도커 컨테이너에 도커 로그를 수집하는 방법은 무엇입니까?

'gelf-address'의 '논리적'호스트 이름 중 하나를 사용하면 정의되지 않은 오류가 발생하고 'ipv4_address'를 사용하는 (최적이 아닌) 솔루션이 작동하지 않는 것 같습니다.

이 방법을 사용하면 시작 시퀀싱으로 인해 초기 로깅 메시지가 느슨하게 될 수 있지만 그 점은 잘 알고 있습니다. 특정 설정에 대한 로깅을 포함하고 있기 때문에 쉽게 테스트 할 수 있습니다.

어떻게 접근 할 수 있는지에 대한 현명한 해결책은 무엇입니까?

+0

했다. 절대 겔프에 대해 들어 본 적이 없다. –

답변

0

@cricket_007 님의 의견은 logspout을 참조하여 올바른 길을 찾아 왔습니다. 그것은 /var/run/docker.sock에 직접 연결하고 거기에서 로그를 가져오고 일반 컨테이너에서 실행 중이므로 사용 가능한 모든 라우팅 정보를 갖습니다.

유일한 문제는 로그가 활성화 될 때부터 로그를 가져 와서 정말 초기 로그를 놓친 것입니다. 그러나 그것은 내가 지불하고자하는 가격입니다. logstash에 연결하는 것도 고통 스럽습니다. 올라 오기까지 오랜 시간이 걸리는 것처럼 보입니다.

또 다른 좋은 참고 내가 logspout 성공을 했어 Gary A. Stafford's"Containerized Microservice Log Aggregation and Visualization using ELK Stack and Logspout"

0

호스트 이름 조회가 까다로울 수 있습니다. 서비스 이름은 Docker 내부 DNS 확인 프로그램에 보관됩니다. 컨테이너를 실행중인 Docker 호스트는 해당 주소를 확인할 수 없으므로 로깅 컨테이너에 정적 IP를 사용해야 할 수도 있습니다.

호스트가 .1 주소를 브리지 인터페이스에 할당하므로 Docker 호스트가 사용자 정의 브리지 네트워크를 통해 ipv4_address 컨테이너에 연결할 수 있어야합니다. 그게 오버레이 네트워크에 해당되는지 확실하지 않습니다.

로그 컨테이너에 다른 서비스 depends_on을 만들 수도 있습니다. 그러면 최소한 첫 번째 메시지가 오게됩니다.

누구든지 fluentd을 사용하고 있다면 fluentd-async-connect 옵션이 필요하므로 컨테이너가 로깅 컨테이너에 대한 연결을 열려고하면 차단하지 않습니다.

관련 문제