docker 출력을 stdout/stderr에 데몬으로 쓰는 방법

docker 출력을 stdout/stderr에 데몬으로 쓰는 방법

따라서 도커 컨테이너를 데몬으로 실행할 수 있습니다.

docker run -d --name foo foo

그런 다음 로그를 읽으십시오.

docker logs -f foo

하지만 로그를 splunk나 cloudwatch 등에 보낼 수 있도록 stdout/stderr에만 쓰는 방법이 궁금합니다. 다음과 같습니다.

(
  docker run --name foo foo &|  capture_logs
) & disown

이를 수행하는 공식적인 방법은 무엇입니까?

답변1

@Michael이 지적하고 다음 설명에 따라 로깅 옵션을 사용할 수 있습니다.문서

일반적으로 이를 수행하는 방법에는 최소한 두 가지가 있으며 이에 대해서는 아래에서 간략하게 설명합니다.

  1. 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
  ...
  1. 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",
    ...
  }
}

목록을 확인해보세요지원되는 로깅 드라이버

관련 정보