Skip to content

Commit d4774e5

Browse files
Adding support for custom metricDimensions.json for statsd metrics emitter (#250)
* Adding support for custom metricDimensions.json. * Addressing Adheip's comments. * Fixing test failure.
1 parent 5038357 commit d4774e5

File tree

8 files changed

+193
-2
lines changed

8 files changed

+193
-2
lines changed

apis/druid/v1alpha1/druid_types.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,9 @@ type DruidSpec struct {
143143
Zookeeper *ZookeeperSpec `json:"zookeeper,omitempty"`
144144
MetadataStore *MetadataStoreSpec `json:"metadataStore,omitempty"`
145145
DeepStorage *DeepStorageSpec `json:"deepStorage,omitempty"`
146+
147+
// Optional: Custom Dimension Map Path for statsd emitter
148+
DimensionsMapPath string `json:"metricDimensions.json,omitempty"`
146149
}
147150

148151
type DruidNodeSpec struct {

chart/templates/crds/druid.apache.org_druids.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -641,6 +641,8 @@ spec:
641641
- spec
642642
- type
643643
type: object
644+
metricDimensions.json:
645+
type: string
644646
nodeSelector:
645647
additionalProperties:
646648
type: string

controllers/druid/handler.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -954,11 +954,19 @@ func makeCommonConfigMap(m *v1alpha1.Druid, ls map[string]string) (*v1.ConfigMap
954954
}
955955
}
956956

957+
data := map[string]string{
958+
"common.runtime.properties": prop,
959+
}
960+
961+
if m.Spec.DimensionsMapPath != "" {
962+
data["metricDimensions.json"] = m.Spec.DimensionsMapPath
963+
}
964+
957965
cfg, err := makeConfigMap(
958966
fmt.Sprintf("%s-druid-common-config", m.ObjectMeta.Name),
959967
m.Namespace,
960968
ls,
961-
map[string]string{"common.runtime.properties": prop})
969+
data)
962970
return cfg, err
963971
}
964972

controllers/druid/testdata/common-config-map.yaml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ data:
5252
druid.storage.baseKey=druid/segments
5353
druid.s3.accessKey=accesskey
5454
druid.s3.secretKey=secretkey
55+
metricDimensions.json: |-
56+
{
57+
"query/time" : { "dimensions" : ["dataSource", "type"], "type" : "timer"}
58+
}
5559
kind: ConfigMap
5660
metadata:
5761
labels:
@@ -60,4 +64,4 @@ metadata:
6064
name: druid-test-druid-common-config
6165
namespace: test-namespace
6266
annotations:
63-
druidOpResourceHash: +30qwQo2Inbc9o49vF664RAPMMQ=
67+
druidOpResourceHash: 1/BkoZEvfj+rB80LzeQeu6T7mhs=

controllers/druid/testdata/druid-smoke-test-cluster.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,10 @@ spec:
8282
druid.indexer.logs.type=file
8383
druid.indexer.logs.directory=/druid/data/indexing-logs
8484
druid.lookup.enableLookupSyncOnStartup=false
85+
metricDimensions.json: |-
86+
{
87+
"query/time" : { "dimensions" : ["dataSource", "type"], "type" : "timer"}
88+
}
8589
volumeMounts:
8690
- mountPath: /druid/data
8791
name: data-volume

controllers/druid/testdata/druid-test-cr.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,10 @@ spec:
100100
# Storage type of double columns
101101
# ommiting this will lead to index double as float at the storage layer
102102
druid.indexing.doubleStorage=double
103+
metricDimensions.json: |-
104+
{
105+
"query/time" : { "dimensions" : ["dataSource", "type"], "type" : "timer"}
106+
}
103107
nodes:
104108
brokers:
105109
nodeType: "broker"

deploy/crds/druid.apache.org_druids.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -641,6 +641,8 @@ spec:
641641
- spec
642642
- type
643643
type: object
644+
metricDimensions.json:
645+
type: string
644646
nodeSelector:
645647
additionalProperties:
646648
type: string

examples/tiny-cluster.yaml

Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,170 @@ spec:
8282
druid.indexer.logs.type=file
8383
druid.indexer.logs.directory=/druid/data/indexing-logs
8484
druid.lookup.enableLookupSyncOnStartup=false
85+
86+
metricDimensions.json: |-
87+
{
88+
"query/time" : { "dimensions" : ["dataSource", "type"], "type" : "timer"},
89+
"query/bytes" : { "dimensions" : ["dataSource", "type"], "type" : "count"},
90+
"query/node/time" : { "dimensions" : ["server"], "type" : "timer"},
91+
"query/node/ttfb" : { "dimensions" : ["server"], "type" : "timer"},
92+
"query/node/bytes" : { "dimensions" : ["server"], "type" : "count"},
93+
"query/node/backpressure": { "dimensions" : ["server"], "type" : "timer"},
94+
"query/intervalChunk/time" : { "dimensions" : [], "type" : "timer"},
95+
96+
"query/segment/time" : { "dimensions" : [], "type" : "timer"},
97+
"query/wait/time" : { "dimensions" : [], "type" : "timer"},
98+
"segment/scan/pending" : { "dimensions" : [], "type" : "gauge"},
99+
"query/segmentAndCache/time" : { "dimensions" : [], "type" : "timer" },
100+
"query/cpu/time" : { "dimensions" : ["dataSource", "type"], "type" : "timer" },
101+
102+
"query/count" : { "dimensions" : [], "type" : "count" },
103+
"query/success/count" : { "dimensions" : [], "type" : "count" },
104+
"query/failed/count" : { "dimensions" : [], "type" : "count" },
105+
"query/interrupted/count" : { "dimensions" : [], "type" : "count" },
106+
"query/timeout/count" : { "dimensions" : [], "type" : "count" },
107+
108+
"query/cache/delta/numEntries" : { "dimensions" : [], "type" : "count" },
109+
"query/cache/delta/sizeBytes" : { "dimensions" : [], "type" : "count" },
110+
"query/cache/delta/hits" : { "dimensions" : [], "type" : "count" },
111+
"query/cache/delta/misses" : { "dimensions" : [], "type" : "count" },
112+
"query/cache/delta/evictions" : { "dimensions" : [], "type" : "count" },
113+
"query/cache/delta/hitRate" : { "dimensions" : [], "type" : "count", "convertRange" : true },
114+
"query/cache/delta/averageBytes" : { "dimensions" : [], "type" : "count" },
115+
"query/cache/delta/timeouts" : { "dimensions" : [], "type" : "count" },
116+
"query/cache/delta/errors" : { "dimensions" : [], "type" : "count" },
117+
118+
"query/cache/total/numEntries" : { "dimensions" : [], "type" : "gauge" },
119+
"query/cache/total/sizeBytes" : { "dimensions" : [], "type" : "gauge" },
120+
"query/cache/total/hits" : { "dimensions" : [], "type" : "gauge" },
121+
"query/cache/total/misses" : { "dimensions" : [], "type" : "gauge" },
122+
"query/cache/total/evictions" : { "dimensions" : [], "type" : "gauge" },
123+
"query/cache/total/hitRate" : { "dimensions" : [], "type" : "gauge", "convertRange" : true },
124+
"query/cache/total/averageBytes" : { "dimensions" : [], "type" : "gauge" },
125+
"query/cache/total/timeouts" : { "dimensions" : [], "type" : "gauge" },
126+
"query/cache/total/errors" : { "dimensions" : [], "type" : "gauge" },
127+
128+
"ingest/events/thrownAway" : { "dimensions" : ["dataSource"], "type" : "count" },
129+
"ingest/events/unparseable" : { "dimensions" : ["dataSource"], "type" : "count" },
130+
"ingest/events/duplicate" : { "dimensions" : ["dataSource"], "type" : "count" },
131+
"ingest/events/processed" : { "dimensions" : ["dataSource", "taskType", "taskId"], "type" : "count" },
132+
"ingest/events/messageGap" : { "dimensions" : ["dataSource"], "type" : "gauge" },
133+
"ingest/rows/output" : { "dimensions" : ["dataSource"], "type" : "count" },
134+
"ingest/persists/count" : { "dimensions" : ["dataSource"], "type" : "count" },
135+
"ingest/persists/time" : { "dimensions" : ["dataSource"], "type" : "timer" },
136+
"ingest/persists/cpu" : { "dimensions" : ["dataSource"], "type" : "timer" },
137+
"ingest/persists/backPressure" : { "dimensions" : ["dataSource"], "type" : "gauge" },
138+
"ingest/persists/failed" : { "dimensions" : ["dataSource"], "type" : "count" },
139+
"ingest/handoff/failed" : { "dimensions" : ["dataSource"], "type" : "count" },
140+
"ingest/merge/time" : { "dimensions" : ["dataSource"], "type" : "timer" },
141+
"ingest/merge/cpu" : { "dimensions" : ["dataSource"], "type" : "timer" },
142+
143+
"ingest/kafka/lag" : { "dimensions" : ["dataSource"], "type" : "gauge" },
144+
"ingest/kafka/maxLag" : { "dimensions" : ["dataSource"], "type" : "gauge" },
145+
"ingest/kafka/avgLag" : { "dimensions" : ["dataSource"], "type" : "gauge" },
146+
147+
"task/success/count" : { "dimensions" : ["dataSource"], "type" : "count" },
148+
"task/failed/count" : { "dimensions" : ["dataSource"], "type" : "count" },
149+
"task/running/count" : { "dimensions" : ["dataSource"], "type" : "gauge" },
150+
"task/pending/count" : { "dimensions" : ["dataSource"], "type" : "gauge" },
151+
"task/waiting/count" : { "dimensions" : ["dataSource"], "type" : "gauge" },
152+
153+
"taskSlot/total/count" : { "dimensions" : [], "type" : "gauge" },
154+
"taskSlot/idle/count" : { "dimensions" : [], "type" : "gauge" },
155+
"taskSlot/busy/count" : { "dimensions" : [], "type" : "gauge" },
156+
"taskSlot/lazy/count" : { "dimensions" : [], "type" : "gauge" },
157+
"taskSlot/blacklisted/count" : { "dimensions" : [], "type" : "gauge" },
158+
159+
"task/run/time" : { "dimensions" : ["dataSource", "taskType"], "type" : "timer" },
160+
"segment/added/bytes" : { "dimensions" : ["dataSource", "taskType"], "type" : "count" },
161+
"segment/moved/bytes" : { "dimensions" : ["dataSource", "taskType"], "type" : "count" },
162+
"segment/nuked/bytes" : { "dimensions" : ["dataSource", "taskType"], "type" : "count" },
163+
164+
"segment/assigned/count" : { "dimensions" : ["tier"], "type" : "count" },
165+
"segment/moved/count" : { "dimensions" : ["tier"], "type" : "count" },
166+
"segment/dropped/count" : { "dimensions" : ["tier"], "type" : "count" },
167+
"segment/deleted/count" : { "dimensions" : ["tier"], "type" : "count" },
168+
"segment/unneeded/count" : { "dimensions" : ["tier"], "type" : "count" },
169+
"segment/unavailable/count" : { "dimensions" : ["dataSource"], "type" : "gauge" },
170+
"segment/underReplicated/count" : { "dimensions" : ["dataSource", "tier"], "type" : "gauge" },
171+
"segment/cost/raw" : { "dimensions" : ["tier"], "type" : "count" },
172+
"segment/cost/normalization" : { "dimensions" : ["tier"], "type" : "count" },
173+
"segment/cost/normalized" : { "dimensions" : ["tier"], "type" : "count" },
174+
"segment/loadQueue/size" : { "dimensions" : ["server"], "type" : "gauge" },
175+
"segment/loadQueue/failed" : { "dimensions" : ["server"], "type" : "gauge" },
176+
"segment/loadQueue/count" : { "dimensions" : ["server"], "type" : "gauge" },
177+
"segment/dropQueue/count" : { "dimensions" : ["server"], "type" : "gauge" },
178+
"segment/size" : { "dimensions" : ["dataSource"], "type" : "gauge" },
179+
"segment/overShadowed/count" : { "dimensions" : [], "type" : "gauge" },
180+
181+
"segment/max" : { "dimensions" : [], "type" : "gauge"},
182+
"segment/used" : { "dimensions" : ["dataSource", "tier", "priority"], "type" : "gauge" },
183+
"segment/usedPercent" : { "dimensions" : ["dataSource", "tier", "priority"], "type" : "gauge", "convertRange" : true },
184+
"segment/pendingDelete" : { "dimensions" : [], "type" : "gauge"},
185+
186+
"jvm/pool/committed" : { "dimensions" : ["poolKind", "poolName"], "type" : "gauge" },
187+
"jvm/pool/init" : { "dimensions" : ["poolKind", "poolName"], "type" : "gauge" },
188+
"jvm/pool/max" : { "dimensions" : ["poolKind", "poolName"], "type" : "gauge" },
189+
"jvm/pool/used" : { "dimensions" : ["poolKind", "poolName"], "type" : "gauge" },
190+
"jvm/bufferpool/count" : { "dimensions" : ["bufferpoolName"], "type" : "gauge" },
191+
"jvm/bufferpool/used" : { "dimensions" : ["bufferpoolName"], "type" : "gauge" },
192+
"jvm/bufferpool/capacity" : { "dimensions" : ["bufferpoolName"], "type" : "gauge" },
193+
"jvm/mem/init" : { "dimensions" : ["memKind"], "type" : "gauge" },
194+
"jvm/mem/max" : { "dimensions" : ["memKind"], "type" : "gauge" },
195+
"jvm/mem/used" : { "dimensions" : ["memKind"], "type" : "gauge" },
196+
"jvm/mem/committed" : { "dimensions" : ["memKind"], "type" : "gauge" },
197+
"jvm/gc/count" : { "dimensions" : ["gcName", "gcGen"], "type" : "count" },
198+
"jvm/gc/cpu" : { "dimensions" : ["gcName", "gcGen"], "type" : "count" },
199+
200+
"ingest/events/buffered" : { "dimensions" : ["serviceName", "bufferCapacity"], "type" : "gauge"},
201+
202+
"sys/swap/free" : { "dimensions" : [], "type" : "gauge"},
203+
"sys/swap/max" : { "dimensions" : [], "type" : "gauge"},
204+
"sys/swap/pageIn" : { "dimensions" : [], "type" : "gauge"},
205+
"sys/swap/pageOut" : { "dimensions" : [], "type" : "gauge"},
206+
"sys/disk/write/count" : { "dimensions" : ["fsDevName"], "type" : "count"},
207+
"sys/disk/read/count" : { "dimensions" : ["fsDevName"], "type" : "count"},
208+
"sys/disk/write/size" : { "dimensions" : ["fsDevName"], "type" : "count"},
209+
"sys/disk/read/size" : { "dimensions" : ["fsDevName"], "type" : "count"},
210+
"sys/net/write/size" : { "dimensions" : [], "type" : "count"},
211+
"sys/net/read/size" : { "dimensions" : [], "type" : "count"},
212+
"sys/fs/used" : { "dimensions" : ["fsDevName", "fsDirName", "fsTypeName", "fsSysTypeName", "fsOptions"], "type" : "gauge"},
213+
"sys/fs/max" : { "dimensions" : ["fsDevName", "fsDirName", "fsTypeName", "fsSysTypeName", "fsOptions"], "type" : "gauge"},
214+
"sys/mem/used" : { "dimensions" : [], "type" : "gauge"},
215+
"sys/mem/max" : { "dimensions" : [], "type" : "gauge"},
216+
"sys/storage/used" : { "dimensions" : ["fsDirName"], "type" : "gauge"},
217+
"sys/cpu" : { "dimensions" : ["cpuName", "cpuTime"], "type" : "gauge"},
218+
219+
"coordinator-segment/count" : { "dimensions" : ["dataSource"], "type" : "gauge" },
220+
"historical-segment/count" : { "dimensions" : ["dataSource", "tier", "priority"], "type" : "gauge" },
221+
222+
"jetty/numOpenConnections" : { "dimensions" : [], "type" : "gauge" },
223+
"query/cache/caffeine/total/requests" : { "dimensions" : [], "type" : "gauge" },
224+
"query/cache/caffeine/total/loadTime" : { "dimensions" : [], "type" : "gauge" },
225+
"query/cache/caffeine/total/evictionBytes" : { "dimensions" : [], "type" : "gauge" },
226+
"query/cache/memcached/total" : { "dimensions" : ["[MEM] Reconnecting Nodes (ReconnectQueue)",
227+
"[MEM] Request Rate: All",
228+
"[MEM] Average Bytes written to OS per write",
229+
"[MEM] Average Bytes read from OS per read",
230+
"[MEM] Response Rate: All (Failure + Success + Retry)",
231+
"[MEM] Response Rate: Retry",
232+
"[MEM] Response Rate: Failure",
233+
"[MEM] Response Rate: Success"],
234+
"type" : "gauge" },
235+
"query/cache/caffeine/delta/requests" : { "dimensions" : [], "type" : "count" },
236+
"query/cache/caffeine/delta/loadTime" : { "dimensions" : [], "type" : "count" },
237+
"query/cache/caffeine/delta/evictionBytes" : { "dimensions" : [], "type" : "count" },
238+
"query/cache/memcached/delta" : { "dimensions" : ["[MEM] Reconnecting Nodes (ReconnectQueue)",
239+
"[MEM] Request Rate: All",
240+
"[MEM] Average Bytes written to OS per write",
241+
"[MEM] Average Bytes read from OS per read",
242+
"[MEM] Response Rate: All (Failure + Success + Retry)",
243+
"[MEM] Response Rate: Retry",
244+
"[MEM] Response Rate: Failure",
245+
"[MEM] Response Rate: Success"],
246+
"type" : "count" }
247+
}
248+
85249
volumeMounts:
86250
- mountPath: /druid/data
87251
name: data-volume

0 commit comments

Comments
 (0)