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)
- InfluxDB Line Protocol 입력 포맷에서 InfluxDB 데이터를 Druid로 수집하는 쪽도 살펴볼 수 있어요.
- 다른 메트릭 emitter로 Prometheus Emitter와 Graphite Emitter를 참고해 보세요.