
따라서 도커 컨테이너를 데몬으로 실행할 수 있습니다.
docker run -d --name foo foo
그런 다음 로그를 읽으십시오.
docker logs -f foo
하지만 로그를 splunk나 cloudwatch 등에 보낼 수 있도록 stdout/stderr에만 쓰는 방법이 궁금합니다. 다음과 같습니다.
(
docker run --name foo foo &| capture_logs
) & disown
이를 수행하는 공식적인 방법은 무엇입니까?
답변1
@Michael이 지적하고 다음 설명에 따라 로깅 옵션을 사용할 수 있습니다.문서
일반적으로 이를 수행하는 방법에는 최소한 두 가지가 있으며 이에 대해서는 아래에서 간략하게 설명합니다.
splunk
그림과 같이 드라이버 사용여기.
다음에 설명된 대로 이벤트 수집기 토큰을 생성하여 시작합니다.문서. 토큰은 Splunk 드라이버 구성 내에서 사용됩니다.
도커 CLI 예
docker run -d \
--log-driver=splunk \
--log-opt splunk-token=176FCEBF-4CF5-4EDF-91BC-703796522D20 \
--log-opt splunk-url=https://splunkhost:8088 \
--log-opt tag=foo-logs \
--name foo foo
도커 작성 예
version: '3.7'
services:
foo_app:
...
logging:
driver: splunk
options:
tag: foo-logs
splunk-token: 176FCEBF-4CF5-4EDF-91BC-703796522D20
splunk-url: https://splunkhost:8088
...
syslog
그림과 같이 드라이버 사용여기.
도커 CLI 예:
docker run \
-–log-driver syslog –-log-opt tag=foo-logs \
--name foo foo
도커 작성 예:
version: '3.7'
services:
foo_app:
...
logging:
driver: syslog
options:
tag: foo-logs
...
이렇게 하면 모든 컨테이너 로그가 로컬 syslog로 전송되며, 여기에서 로그를 가져와 splunk가 로그를 수신할 준비가 된 외부 UDP 포트로 전달할 수 있습니다.
따라서 Splunk 서버가 포트에서 로그를 수신한다고 가정 514
하면 이를 구성에 추가한 rsyslogd
다음 rsyslogd 서비스를 다시 시작해야 합니다.
# /etc/rsyslog.d/20-splunk.conf
:syslogtag, contains, "foo-logs" @splunk_url:514;RSYSLOG_SyslogProtocol23Format
또는 모든 컨테이너에 대해 전역으로 만들려는 경우 /etc/docker/daemon.json
아래와 같이 파일 자체를 통해 로깅을 구성할 수 있습니다(그리고 docker 서비스를 다시 시작하는 것을 잊지 마세요).
다음의 경우syslog
{
"log-driver": "syslog"
}
다음의 경우splunk
{
"log-driver": "splunk",
"log-opts": {
"splunk-token": "176FCEBF-4CF5-4EDF-91BC-703796522D20",
"splunk-url": "https://splunkhost:8088",
...
}
}
목록을 확인해보세요지원되는 로깅 드라이버