Splunk 로깅 드라이버

Splunk 로깅 드라이버 (Splunk logging driver)

splunk 로깅 드라이버는 Splunk Enterprise와 Splunk Cloud의 HTTP Event Collector로 컨테이너 로그를 보내요.

출처: 문서

본문

사용법 (Usage)

Docker 로깅이 기본으로 또는 컨테이너별로 splunk 드라이버를 사용하도록 구성할 수 있어요.

splunk 드라이버를 기본 로깅 드라이버로 사용하려면 daemon.json 구성 파일에서 log-driverlog-opts 키를 적절한 값으로 설정하고 Docker를 재시작해요. 예를 들어:

{
  "log-driver": "splunk",
  "log-opts": {
    "splunk-token": "",
    "splunk-url": "",
    ...
  }
}

daemon.json으로 Docker를 구성하는 것에 대한 자세한 내용은 daemon.json을 참고하세요.

Note Docker Desktop을 사용한다면 Docker Desktop Dashboard를 통해 데몬 구성을 편집해요. Settings를 열고 Docker Engine을 선택해요. 자세한 내용은 Docker Engine 설정을 참고하세요.

Note daemon.json 구성 파일의 log-opts 구성 옵션은 문자열로 제공해야 해요. 따라서 부울 및 숫자 값(splunk-gzip 또는 splunk-gzip-level 값 등)은 따옴표(")로 감싸야 해요.

특정 컨테이너에 splunk 드라이버를 사용하려면 docker run과 함께 명령줄 플래그 --log-driverlog-opt를 사용해요:

$ docker run --log-driver=splunk --log-opt splunk-token=VALUE --log-opt splunk-url=VALUE ...

Splunk 옵션 (Splunk options)

다음 속성들을 사용해 Splunk 로깅 드라이버를 구성해요.

  • Docker 환경 전체에서 splunk 드라이버를 구성하려면 "log-opts": {"NAME": "VALUE", ...} 키로 daemon.json을 편집해요.
  • 개별 컨테이너에 splunk 드라이버를 구성하려면 --log-opt NAME=VALUE ... 플래그로 docker run을 사용해요.
Option Required Description
splunk-token required Splunk HTTP Event Collector 토큰.
splunk-url required Splunk Enterprise, 셀프 서비스 Splunk Cloud 인스턴스 또는 Splunk Cloud 관리형 클러스터로 가는 경로(HTTP Event Collector가 사용하는 포트와 scheme 포함). 다음 형식 중 하나: https://your_splunk_instance:8088, https://input-prd-p-XXXXXXX.cloud.splunk.com:8088, 또는 https://http-inputs-XXXXXXXX.splunkcloud.com.
splunk-source optional 이벤트 소스.
splunk-sourcetype optional 이벤트 소스 유형.
splunk-index optional 이벤트 인덱스.
splunk-capath optional 루트 인증서 경로.
splunk-caname optional 서버 인증서 검증에 사용할 이름; 기본적으로 splunk-url의 호스트 이름이 사용돼요.
splunk-insecureskipverify optional 서버 인증서 검증 무시.
splunk-format optional 메시지 형식. inline, json 또는 raw일 수 있어요. 기본값은 inline이에요.
splunk-verify-connection optional 시작 시 Docker가 Splunk 서버에 연결할 수 있는지 확인. 기본값은 true예요.
splunk-gzip optional Splunk Enterprise 또는 Splunk Cloud 인스턴스로 이벤트를 보낼 때 gzip 압축 활성화/비활성화. 기본값은 false예요.
splunk-gzip-level optional gzip 압축 수준 설정. 유효한 값은 -1(기본값), 0(압축 없음), 1(최고 속도) ... 9(최고 압축)이에요. 기본값은 DefaultCompression이에요.
tag optional 일부 마크업을 해석하는 메시지 태그 지정. 기본값은 {{.ID}}(컨테이너 ID의 12자)이에요. 로그 태그 형식 사용자 지정은 log tag option documentation 참고.
labels optional 컨테이너에 지정된 경우 메시지에 포함해야 하는 라벨 키의 쉼표 구분 목록.
labels-regex optional labels와 유사하고 호환됨. 로깅 관련 라벨을 일치시키는 정규식. 고급 log tag options에서 사용.
env optional 컨테이너에 지정된 경우 메시지에 포함해야 하는 환경 변수 키의 쉼표 구분 목록.
env-regex optional env와 유사하고 호환됨. 로깅 관련 환경 변수를 일치시키는 정규식. 고급 log tag options에서 사용.

labelenv 키 사이에 충돌이 있으면 env 값이 우선해요. 두 옵션 모두 로깅 메시지의 속성에 추가 필드를 더해요.

아래는 Splunk Enterprise 인스턴스에 대해 지정된 로깅 옵션의 예시예요. 인스턴스는 Docker 데몬이 실행 중인 것과 같은 머신에 로컬로 설치돼 있어요. 루트 인증서 경로와 Common Name은 HTTPS scheme을 사용해 지정돼요. 이는 검증에 사용돼요. SplunkServerDefaultCert는 Splunk 인증서에 의해 자동 생성돼요.

$ docker run \
    --log-driver=splunk \
    --log-opt splunk-token=176FCEBF-4CF5-4EDF-91BC-703796522D20 \
    --log-opt splunk-url=https://splunkhost:8088 \
    --log-opt splunk-capath=/path/to/cert/cacert.pem \
    --log-opt splunk-caname=SplunkServerDefaultCert \
    --log-opt tag="{{.Name}}/{{.FullID}}" \
    --log-opt labels=location \
    --log-opt env=TEST \
    --env "TEST=false" \
    --label location=west \
    your/application

Splunk Cloud에 호스팅된 Splunk 인스턴스의 splunk-urlhttps://http-inputs-XXXXXXXX.splunkcloud.com 같은 형식이며 포트 지정자를 포함하지 않아요.

메시지 형식 (Message formats)

inline(기본값), json, raw의 세 가지 로깅 드라이버 메시징 형식이 있어요.

기본 형식은 각 로그 메시지가 문자열로 임베드되는 inline이에요. 예를 들어:

{
  "attrs": {
    "env1": "val1",
    "label1": "label1"
  },
  "tag": "MyImage/MyContainer",
  "source": "stdout",
  "line": "my message"
}
{
  "attrs": {
    "env1": "val1",
    "label1": "label1"
  },
  "tag": "MyImage/MyContainer",
  "source": "stdout",
  "line": "{\"foo\": \"bar\"}"
}

메시지를 json 객체로 형식화하려면 --log-opt splunk-format=json을 설정해요. 드라이버는 모든 줄을 JSON 객체로 파싱하려 시도하고 이를 임베드된 객체로 보내요. 메시지를 파싱할 수 없으면 inline으로 보내요. 예를 들어:

{
  "attrs": {
    "env1": "val1",
    "label1": "label1"
  },
  "tag": "MyImage/MyContainer",
  "source": "stdout",
  "line": "my message"
}
{
  "attrs": {
    "env1": "val1",
    "label1": "label1"
  },
  "tag": "MyImage/MyContainer",
  "source": "stdout",
  "line": {
    "foo": "bar"
  }
}

메시지를 raw로 형식화하려면 --log-opt splunk-format=raw를 설정해요. 속성(환경 변수와 라벨)과 태그가 메시지 앞에 붙어요. 예를 들어:

MyImage/MyContainer env1=val1 label1=label1 my message
MyImage/MyContainer env1=val1 label1=label1 {"foo": "bar"}

고급 옵션 (Advanced options)

Splunk 로깅 드라이버를 사용하면 Docker 데몬용 환경 변수를 설정해 몇 가지 고급 옵션을 구성할 수 있어요.

Environment variable name Default value Description
SPLUNK_LOGGING_DRIVER_POST_MESSAGES_FREQUENCY 5s 더 많은 메시지를 배치로 모으기 위해 기다리는 시간.
SPLUNK_LOGGING_DRIVER_POST_MESSAGES_BATCH_SIZE 1000 한 배치로 보내기 전에 누적해야 하는 메시지 수.
SPLUNK_LOGGING_DRIVER_BUFFER_MAX 10 * 1000 재시도를 위해 버퍼에 보관하는 최대 메시지 수.
SPLUNK_LOGGING_DRIVER_CHANNEL_SIZE 4 * 1000 메시지를 배치 처리하는 백그라운드 로거 워커로 보내는 채널에 있을 수 있는 보류 메시지의 최대 수.

더 알아보기 (Learn more)