Graphite Emitter

Graphite Emitter

graphite-emitter 확장은 Druid 메트릭을 Graphite carbon 서버로 보내요. plaintext 또는 pickle 프로토콜을 사용할 수 있고, 설정을 통해 배치 크기나 이벤트 변환 방식을 조절할 수 있어요.

출처: 문서

본문

이 Apache Druid 확장을 사용하려면 extensions load list에 graphite-emitter를 포함해 주세요.

graphite-emitter

Introduction

이 확장은 druid 메트릭을 graphite carbon 서버로 보내요. 메트릭은 plaintext 또는 pickle 프로토콜로 보낼 수 있어요. pickle 프로토콜은 더 효율적이고 한 요청에서 메트릭 배치를 보낼 수 있어요 (plaintext 프로토콜은 메트릭을 하나만 보내요). 배치 크기는 설정할 수 있어요.

Configuration

graphite emitter의 모든 구성 파라미터는 druid.emitter.graphite 아래에 있어요.

속성 설명 필수 기본값
druid.emitter.graphite.hostname graphite 서버의 hostname. yes none
druid.emitter.graphite.port graphite 서버의 port. yes none
druid.emitter.graphite.batchSize 한 배치로 보낼 이벤트 수 (pickle 프로토콜 전용). no 100
druid.emitter.graphite.protocol Graphite 프로토콜. 사용 가능한 프로토콜: pickle, plaintext. no pickle
druid.emitter.graphite.eventConverter druid 이벤트를 graphite 이벤트로 변환하는 필터 및 변환기 (다음 섹션 참고). yes none
druid.emitter.graphite.flushPeriod 큐 플러싱 주기(밀리초). no 1 minute
druid.emitter.graphite.maxQueueSize 이벤트를 버퍼링하는 데 쓰는 큐의 최대 크기. no MAX_INT
druid.emitter.graphite.alertEmitters 알림(alert)이 전달될 emitter들의 목록. emitter 이름의 JSON 리스트예요. 예: ["logging", "http"]. no empty list (no forwarding)
druid.emitter.graphite.requestLogEmitters request log(즉 druid.request.logging.type이 emitter로 설정될 때 emitter로 보내지는 질의 로깅 이벤트)가 전달될 emitter들의 목록. emitter 이름의 JSON 리스트예요. 예: ["logging", "http"]. no empty list (no forwarding)
druid.emitter.graphite.emitWaitTime 이벤트를 보내려고 시도하는 대기 시간(밀리초). 그렇지 않으면 emitter가 이벤트를 버려요(throwing). no 0
druid.emitter.graphite.waitForEventTime 이벤트를 사용할 수 있을 때까지 기다리는 시간(밀리초). no 1000 (1 sec)

Supported event types

graphite emitter는 서비스 메트릭 이벤트만 graphite로 보내요 (메트릭 목록은 Druid Metrics 참고).

알림(alert)과 request log는 graphite로 보내지지 않아요. 이 이벤트 타입은 Graphite에 잘 표현되지 않아요. Graphite는 비숫자 로그 이벤트를 저장하는 것보다 숫자 메트릭의 타임시리즈 뷰에 더 적합하거든요.

대신 알림과 request log는 druid.emitter.graphite.alertEmitters와 druid.emitter.graphite.requestLogEmitters로 지정된 다른 emitter 구현에 선택적으로 전달돼요.

Druid to Graphite Event Converter

Graphite Event Converter는 druid 메트릭 이름과 dimension을 Graphite 메트릭 경로에 매핑해요. Graphite 메트릭 경로는 다음 스키마로 구성돼요.

<namespacePrefix>.[<druid service name>].[<druid hostname>].<druid metrics dimensions>.<druid metrics name>

메트릭 이름을 제대로 짓는 것은 충돌을 피하고, 데이터를 혼동하지 않으며, 나중에 잘못 해석되지 않게 하려면 아주 중요해요.

예시 druid.historical.hist-host1_yahoo_com:8080.MyDataSourceName.GroupBy.query/time:

  • druid -> namespace prefix
  • historical -> service name
  • hist-host1.yahoo.com:8080 -> druid hostname
  • MyDataSourceName -> dimension value
  • GroupBy -> dimension value
  • query/time -> metric name

두 가지 이벤트 변환기 구현이 있어요.

Send-All converter

첫 번째 구현은 all이라고 불러요. 모든 druid 서비스 메트릭 이벤트를 보내요. 경로는 다음 형태예요.

<namespacePrefix>.[<druid service name>].[<druid hostname>].<dimensions values ordered by dimension's name>.<metric>

<namespacePrefix>.[<druid service name>].[<druid hostname>]. 부분은 사용자가 제어할 수 있어요.

ignoreHostname=true로 설정하면 hostname을 생략할 수 있어요.

druid.SERVICE_NAME.dataSourceName.queryType.query/time

ignoreServiceName=true로 설정하면 service name을 생략할 수 있어요.

druid.HOSTNAME.dataSourceName.queryType.query/time

메트릭 이름의 요소는 기본적으로 /로 구분돼요. 그래서 graphite는 모든 메트릭을 한 레벨에 만들게 돼요. 트리 구조로 메트릭을 만들고 싶다면 replaceSlashWithDot=true로 설정해야 해요.

원본:

druid.HOSTNAME.dataSourceName.queryType.query/time

변경:

druid.HOSTNAME.dataSourceName.queryType.query.time
druid.emitter.graphite.eventConverter={"type":"all", "namespacePrefix": "druid.test", "ignoreHostname":true, "ignoreServiceName":true}

White-list based converter

두 번째 구현은 whiteList라고 불러요. 화이트리스트에 있는 메트릭과 dimension만 보내요. all 변환기와 마찬가지로 사용자가 <namespacePrefix>.[<druid service name>].[<druid hostname>]. 부분을 제어해요.

White-list 기반 변환기에는 ./src/main/resources/defaultWhiteListMap.json의 resources 아래에 있는 기본 white list map이 함께 제공돼요.

사용자는 mapPath라는 속성을 제공해 기본 white list map을 덮어쓸 수 있어요. 이 속성은 white list map JSON 오브젝트를 담은 파일의 경로를 포함하는 String이에요. 예를 들어 다음 변환기는 /pathPrefix/fileName.json 파일에서 map을 읽어요.

druid.emitter.graphite.eventConverter={"type":"whiteList", "namespacePrefix": "druid.test", "ignoreHostname":true, "ignoreServiceName":true, "mapPath":"/pathPrefix/fileName.json"}

Druid는 엄청나게 많은 수의 메트릭을 발생시키므로 whiteList 변환기를 사용하는 걸 강력히 권장해요.

더 알아보기 (Learn more)