master
go 328 lines 8.05 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package hdfs
4
5 import "github.com/netdata/netdata/go/plugins/plugin/framework/collectorapi"
6
7 type (
8 Charts = collectorapi.Charts
9 Dims = collectorapi.Dims
10 Vars = collectorapi.Vars
11 )
12
13 var jvmCharts = Charts{
14 {
15 ID: "jvm_heap_memory",
16 Title: "Heap Memory",
17 Units: "MiB",
18 Fam: "jvm",
19 Ctx: "hdfs.heap_memory",
20 Type: collectorapi.Area,
21 Dims: Dims{
22 {ID: "jvm_mem_heap_committed", Name: "committed", Div: 1000},
23 {ID: "jvm_mem_heap_used", Name: "used", Div: 1000},
24 },
25 Vars: Vars{
26 {ID: "jvm_mem_heap_max"},
27 },
28 },
29 {
30 ID: "jvm_gc_count_total",
31 Title: "GC Events",
32 Units: "events/s",
33 Fam: "jvm",
34 Ctx: "hdfs.gc_count_total",
35 Dims: Dims{
36 {ID: "jvm_gc_count", Name: "gc", Algo: collectorapi.Incremental},
37 },
38 },
39 {
40 ID: "jvm_gc_time_total",
41 Title: "GC Time",
42 Units: "ms",
43 Fam: "jvm",
44 Ctx: "hdfs.gc_time_total",
45 Dims: Dims{
46 {ID: "jvm_gc_time_millis", Name: "time", Algo: collectorapi.Incremental},
47 },
48 },
49 {
50 ID: "jvm_gc_threshold",
51 Title: "Number of Times That the GC Threshold is Exceeded",
52 Units: "events/s",
53 Fam: "jvm",
54 Ctx: "hdfs.gc_threshold",
55 Dims: Dims{
56 {ID: "jvm_gc_num_info_threshold_exceeded", Name: "info", Algo: collectorapi.Incremental},
57 {ID: "jvm_gc_num_warn_threshold_exceeded", Name: "warn", Algo: collectorapi.Incremental},
58 },
59 },
60 {
61 ID: "jvm_threads",
62 Title: "Number of Threads",
63 Units: "num",
64 Fam: "jvm",
65 Ctx: "hdfs.threads",
66 Type: collectorapi.Stacked,
67 Dims: Dims{
68 {ID: "jvm_threads_new", Name: "new"},
69 {ID: "jvm_threads_runnable", Name: "runnable"},
70 {ID: "jvm_threads_blocked", Name: "blocked"},
71 {ID: "jvm_threads_waiting", Name: "waiting"},
72 {ID: "jvm_threads_timed_waiting", Name: "timed_waiting"},
73 {ID: "jvm_threads_terminated", Name: "terminated"},
74 },
75 },
76 {
77 ID: "jvm_logs_total",
78 Title: "Number of Logs",
79 Units: "logs/s",
80 Fam: "jvm",
81 Ctx: "hdfs.logs_total",
82 Type: collectorapi.Stacked,
83 Dims: Dims{
84 {ID: "jvm_log_info", Name: "info", Algo: collectorapi.Incremental},
85 {ID: "jvm_log_error", Name: "error", Algo: collectorapi.Incremental},
86 {ID: "jvm_log_warn", Name: "warn", Algo: collectorapi.Incremental},
87 {ID: "jvm_log_fatal", Name: "fatal", Algo: collectorapi.Incremental},
88 },
89 },
90 }
91
92 var rpcActivityCharts = Charts{
93 {
94 ID: "rpc_bandwidth",
95 Title: "RPC Bandwidth",
96 Units: "kilobits/s",
97 Fam: "rpc",
98 Ctx: "hdfs.rpc_bandwidth",
99 Type: collectorapi.Area,
100 Dims: Dims{
101 {ID: "rpc_received_bytes", Name: "received", Div: 1000, Algo: collectorapi.Incremental},
102 {ID: "rpc_sent_bytes", Name: "sent", Div: -1000, Algo: collectorapi.Incremental},
103 },
104 },
105 {
106 ID: "rpc_calls",
107 Title: "RPC Calls",
108 Units: "calls/s",
109 Fam: "rpc",
110 Ctx: "hdfs.rpc_calls",
111 Dims: Dims{
112 {ID: "rpc_queue_time_num_ops", Name: "calls", Algo: collectorapi.Incremental},
113 },
114 },
115 {
116 ID: "rpc_open_connections",
117 Title: "RPC Open Connections",
118 Units: "connections",
119 Fam: "rpc",
120 Ctx: "hdfs.open_connections",
121 Dims: Dims{
122 {ID: "rpc_num_open_connections", Name: "open"},
123 },
124 },
125 {
126 ID: "rpc_call_queue_length",
127 Title: "RPC Call Queue Length",
128 Units: "num",
129 Fam: "rpc",
130 Ctx: "hdfs.call_queue_length",
131 Dims: Dims{
132 {ID: "rpc_call_queue_length", Name: "length"},
133 },
134 },
135 {
136 ID: "rpc_avg_queue_time",
137 Title: "RPC Avg Queue Time",
138 Units: "ms",
139 Fam: "rpc",
140 Ctx: "hdfs.avg_queue_time",
141 Dims: Dims{
142 {ID: "rpc_queue_time_avg_time", Name: "time", Div: 1000},
143 },
144 },
145 {
146 ID: "rpc_avg_processing_time",
147 Title: "RPC Avg Processing Time",
148 Units: "ms",
149 Fam: "rpc",
150 Ctx: "hdfs.avg_processing_time",
151 Dims: Dims{
152 {ID: "rpc_processing_time_avg_time", Name: "time", Div: 1000},
153 },
154 },
155 }
156
157 var fsNameSystemCharts = Charts{
158 {
159 ID: "fs_name_system_capacity",
160 Title: "Capacity Across All Datanodes",
161 Units: "KiB",
162 Fam: "fs name system",
163 Ctx: "hdfs.capacity",
164 Type: collectorapi.Stacked,
165 Dims: Dims{
166 {ID: "fsns_capacity_remaining", Name: "remaining", Div: 1024},
167 {ID: "fsns_capacity_used", Name: "used", Div: 1024},
168 },
169 Vars: Vars{
170 {ID: "fsns_capacity_total"},
171 },
172 },
173 {
174 ID: "fs_name_system_used_capacity",
175 Title: "Used Capacity Across All Datanodes",
176 Units: "KiB",
177 Fam: "fs name system",
178 Ctx: "hdfs.used_capacity",
179 Type: collectorapi.Stacked,
180 Dims: Dims{
181 {ID: "fsns_capacity_used_dfs", Name: "dfs", Div: 1024},
182 {ID: "fsns_capacity_used_non_dfs", Name: "non_dfs", Div: 1024},
183 },
184 },
185 {
186 ID: "fs_name_system_load",
187 Title: "Number of Concurrent File Accesses (read/write) Across All DataNodes",
188 Units: "load",
189 Fam: "fs name system",
190 Ctx: "hdfs.load",
191 Dims: Dims{
192 {ID: "fsns_total_load", Name: "load"},
193 },
194 },
195 {
196 ID: "fs_name_system_volume_failures_total",
197 Title: "Number of Volume Failures Across All Datanodes",
198 Units: "events/s",
199 Fam: "fs name system",
200 Ctx: "hdfs.volume_failures_total",
201 Dims: Dims{
202 {ID: "fsns_volume_failures_total", Name: "failures", Algo: collectorapi.Incremental},
203 },
204 },
205 {
206 ID: "fs_files_total",
207 Title: "Number of Tracked Files",
208 Units: "num",
209 Fam: "fs name system",
210 Ctx: "hdfs.files_total",
211 Dims: Dims{
212 {ID: "fsns_files_total", Name: "files"},
213 },
214 },
215 {
216 ID: "fs_blocks_total",
217 Title: "Number of Allocated Blocks in the System",
218 Units: "num",
219 Fam: "fs name system",
220 Ctx: "hdfs.blocks_total",
221 Dims: Dims{
222 {ID: "fsns_blocks_total", Name: "blocks"},
223 },
224 },
225 {
226 ID: "fs_problem_blocks",
227 Title: "Number of Problem Blocks (can point to an unhealthy cluster)",
228 Units: "num",
229 Fam: "fs name system",
230 Ctx: "hdfs.blocks",
231 Dims: Dims{
232 {ID: "fsns_corrupt_blocks", Name: "corrupt"},
233 {ID: "fsns_missing_blocks", Name: "missing"},
234 {ID: "fsns_under_replicated_blocks", Name: "under_replicated"},
235 },
236 },
237 {
238 ID: "fs_name_system_data_nodes",
239 Title: "Number of Data Nodes By Status",
240 Units: "num",
241 Fam: "fs name system",
242 Ctx: "hdfs.data_nodes",
243 Type: collectorapi.Stacked,
244 Dims: Dims{
245 {ID: "fsns_num_live_data_nodes", Name: "live"},
246 {ID: "fsns_num_dead_data_nodes", Name: "dead"},
247 {ID: "fsns_stale_data_nodes", Name: "stale"},
248 },
249 },
250 }
251
252 var fsDatasetStateCharts = Charts{
253 {
254 ID: "fs_dataset_state_capacity",
255 Title: "Capacity",
256 Units: "KiB",
257 Fam: "fs dataset",
258 Ctx: "hdfs.datanode_capacity",
259 Type: collectorapi.Stacked,
260 Dims: Dims{
261 {ID: "fsds_capacity_remaining", Name: "remaining", Div: 1024},
262 {ID: "fsds_capacity_used", Name: "used", Div: 1024},
263 },
264 Vars: Vars{
265 {ID: "fsds_capacity_total"},
266 },
267 },
268 {
269 ID: "fs_dataset_state_used_capacity",
270 Title: "Used Capacity",
271 Units: "KiB",
272 Fam: "fs dataset",
273 Ctx: "hdfs.datanode_used_capacity",
274 Type: collectorapi.Stacked,
275 Dims: Dims{
276 {ID: "fsds_capacity_used_dfs", Name: "dfs", Div: 1024},
277 {ID: "fsds_capacity_used_non_dfs", Name: "non_dfs", Div: 1024},
278 },
279 },
280 {
281 ID: "fs_dataset_state_num_failed_volumes",
282 Title: "Number of Failed Volumes",
283 Units: "num",
284 Fam: "fs dataset",
285 Ctx: "hdfs.datanode_failed_volumes",
286 Dims: Dims{
287 {ID: "fsds_num_failed_volumes", Name: "failed volumes"},
288 },
289 },
290 }
291
292 var fsDataNodeActivityCharts = Charts{
293 {
294 ID: "dna_bandwidth",
295 Title: "Bandwidth",
296 Units: "KiB/s",
297 Fam: "activity",
298 Ctx: "hdfs.datanode_bandwidth",
299 Type: collectorapi.Area,
300 Dims: Dims{
301 {ID: "dna_bytes_read", Name: "reads", Div: 1024, Algo: collectorapi.Incremental},
302 {ID: "dna_bytes_written", Name: "writes", Div: -1024, Algo: collectorapi.Incremental},
303 },
304 },
305 }
306
307 func dataNodeCharts() *Charts {
308 charts := Charts{}
309 panicIfError(charts.Add(*jvmCharts.Copy()...))
310 panicIfError(charts.Add(*rpcActivityCharts.Copy()...))
311 panicIfError(charts.Add(*fsDatasetStateCharts.Copy()...))
312 panicIfError(charts.Add(*fsDataNodeActivityCharts.Copy()...))
313 return &charts
314 }
315
316 func nameNodeCharts() *Charts {
317 charts := Charts{}
318 panicIfError(charts.Add(*jvmCharts.Copy()...))
319 panicIfError(charts.Add(*rpcActivityCharts.Copy()...))
320 panicIfError(charts.Add(*fsNameSystemCharts.Copy()...))
321 return &charts
322 }
323
324 func panicIfError(err error) {
325 if err != nil {
326 panic(err)
327 }
328 }