2017-09-20 13 views
2

그래서 .NET 코어에서 Docker 컨테이너로 실행중인 Microservice를 가지고 있으며, EventHub에서 SQL Server로 많은 양의 데이터를 가져올 때 Azure의 Application Insights에 로깅합니다.Docker 컨테이너를 다시 시작하여 로그를 유지하십시오.

때로는 백그라운드 스레드에서 발생하는 처리되지 않은 SqlException이 발생하여이를 잡아서 처리 할 수 ​​없으며이 버그를 수정할 수 없습니다.

해결 방법은 항상 다시 시작 정책을 설정하고 서비스가 다시 시작되었습니다. 이것은 잘 작동하지만 지금은 Application Insights에서이 예외를 추적 할 수 없습니다.

처리되지 않은 예외가 CLR에 의해 stderr에 기록되어 일부 Grepp과 함께 Docker 로그에 표시 될 수 있다고 가정하지만 시작시이를 확인한 후 Application Insights에 기록하여 발견 할 수 있습니다 Swarm 클러스터에 로깅하지 않고 재시작 정보를 grep하지 않습니까?

+2

호스트 디렉토리를 도커에 마운트하고 해당 디렉토리 (호스트)를 사용하여 로그를 마운트 할 수 있습니다. –

+0

@GirdharSojitra 그게 Docker Log 또는 Log 전체를 의미합니까? 이것은 표준 출력/오류 스트림에 있습니다. 이 답변을 의미하는 경우 답변으로 게시하십시오. –

답변

0

로그를 유지하려면,

접근 호스트 시스템에 1

마운트 고정 표시기 로그 디렉토리.

예 :

고정 표시기 실행 -name Container_1 -v/host_dir/로그/var에/로그/응용 프로그램 docker_image :

도커 용기의/var/로그인/응용 프로그램에서 로그를 작성합니다 버전 directory.Now log는 docker가 다시 시작될 때 호스트의/host_dir/logs 디렉토리에도 유지됩니다.

접근법 2

구성 고정 표시기 시스템 로그 또는 Fluentd에 드라이버 등을 기록. 구성하기 위해 https://docs.docker.com/engine/admin/logging/overview/을 볼 수 있습니다.

+0

불행히도 내 서비스는 AppInsights를 제외하고는 직접 로그를 쓰지 않지만 stdout과 stderr로 로그를 작성합니다. 이것은 사용자가 제안하는 로그 디렉토리에 캡처되지 않으므로이 디렉토리를 Docker 호스트에 마운트 할 필요가 없습니다. Docker 로그를 캡처 할 필요가 있습니다. 기본 드라이버 인 json-file은 문서에 기록 된 것처럼 로그에 기록되지 않습니다. –

+0

응용 프로그램에 로깅 드라이버를 사용해야합니다. https://docs.docker.com/engine/admin/logging/overview/에서 확인할 수 있습니다. –