InfluxDB Emitter

InfluxDB Emitter

druid-influxdb-emitter 확장은 Druid 메트릭을 HTTP를 통해 InfluxDB로 보내요. 메트릭 이벤트는 InfluxDB의 line protocol로 변환된 뒤 InfluxDB HTTP API로 POST돼요.

출처: 문서

본문

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

druid-influxdb-emitter

Introduction

이 확장은 HTTP를 통해 druid 메트릭을 InfluxDB로 보내요. 현재 이 emitter는 서비스 메트릭 이벤트만 InfluxDB로 보내요 (메트릭 목록은 Druid metrics 참고). 메트릭 이벤트가 발생하면 이벤트 큐에 추가돼요. 설정된 시간이 지나면 큐의 이벤트들이 InfluxDB의 line protocol로 변환되고 InfluxDB HTTP API로 POST돼요. 이 시점에 전체 큐가 플러시돼요. emitter가 종료될 때도 큐가 플러시돼요.

InfluxDB 서버에서 인증과 인가(authorization)가 활성화되어 있어야 한다는 점에 유의해 주세요.

Configuration

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

속성 설명 필수 기본값
druid.emitter.influxdb.hostname InfluxDB 서버의 hostname. Yes N/A
druid.emitter.influxdb.port InfluxDB 서버의 port. No 8086
druid.emitter.influxdb.protocol InfluxDB로 메트릭을 보내는 데 사용하는 프로토콜. http/https 중 하나. No http
druid.emitter.influxdb.trustStorePath https에 사용할 trustStore의 경로. No none
druid.emitter.influxdb.trustStoreType https에 사용할 trustStore 타입. No jks
druid.emitter.influxdb.trustStorePassword https에 사용할 trustStore 비밀번호. No none
druid.emitter.influxdb.databaseName InfluxDB에서 데이터베이스의 이름. Yes N/A
druid.emitter.influxdb.maxQueueSize 이벤트를 담는 큐의 크기. No Integer.MAX_VALUE(=2^31-1)
druid.emitter.influxdb.flushPeriod 이벤트 큐가 Line Protocol로 파싱되어 InfluxDB로 POST되는 주기(밀리초). No 60000
druid.emitter.influxdb.flushDelay 스케줄된 메서드가 처음 실행되기까지 기다리는 시간(밀리초). No 60000
druid.emitter.influxdb.influxdbUserName InfluxDB 데이터베이스에 인증하기 위한 사용자 이름. Yes N/A
druid.emitter.influxdb.influxdbPassword 인증된 데이터베이스 사용자의 비밀번호. Yes N/A
druid.emitter.influxdb.dimensionWhitelist tag로 포함할 메트릭 dimension의 화이트리스트. No ["dataSource","type","numMetrics","numDimensions","threshold","dimension","taskType","taskStatus","tier"]

InfluxDB Line Protocol

이 emitter가 Druid 메트릭 이벤트를 InfluxDB의 line protocol로 파싱하는 예시가 여기 있어요.

line protocol의 문법은 다음과 같아요.

<measurement>[,<tag_key>=<tag_value>[,<tag_key>=<tag_value>]] <field_key>=<field_value>[,<field_key>=<field_value>] [<timestamp>]

여기서 timestamp는 epoch 이후의 나노초예요.

Druid의 logging emitter가 기록하는 전형적인 서비스 메트릭 이벤트는 다음과 같아요.

Event [{"feed":"metrics","timestamp":"2017-10-31T09:09:06.857Z","service":"druid/historical","host":"historical001:8083","version":"0.11.0-SNAPSHOT","metric":"query/cache/total/hits","value":34787256}]

이 이벤트는 다음 규칙에 따라 line protocol로 파싱돼요.

  • measurement는 druid_query가 돼요. metric의 첫 번째 부분이 query이기 때문이에요.
  • tags는 service=druid/historical, hostname=historical001, metric=druid_cache_total이 돼요. (metric tag는 druid metric의 중간 부분을 _로 구분하고 앞에 druid_를 붙인 값이에요. 예를 들어 이벤트에 metric=query/time이 있으면 중간 부분이 없으므로 metric tag가 없어요.)
  • field는 druid_hits가 돼요. 이는 metric의 마지막 부분이기 때문이에요.

이렇게 하여 InfluxDB로 POST할 수 있는 다음 String이 만들어져요.

"druid_query,service=druid/historical,hostname=historical001,metric=druid_cache_total druid_hits=34787256 1509440946857000000"

InfluxDB emitter에는 dimension의 화이트리스트가 있어요. 메트릭에 화이트리스트의 dimension이 있으면 line protocol 문자열에 tag로 추가돼요. dimension 값은 정리(sanitized)되어서 점이나 공백의 모든 발생이 _로 바뀌어요.

더 알아보기 (Learn more)