github.com/netdata/go.d.plugin@v0.58.1/modules/cassandra/charts.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package cassandra 4 5 import ( 6 "fmt" 7 8 "github.com/netdata/go.d.plugin/agent/module" 9 ) 10 11 const ( 12 prioClientRequestsRate = module.Priority + iota 13 14 prioClientRequestReadLatency 15 prioClientRequestWriteLatency 16 prioClientRequestsLatency 17 18 prioKeyCacheHitRatio 19 prioRowCacheHitRatio 20 prioKeyCacheHitRate 21 prioRowCacheHitRate 22 prioKeyCacheUtilization 23 prioRowCacheUtilization 24 prioKeyCacheSize 25 prioRowCacheSize 26 27 prioStorageLiveDiskSpaceUsed 28 29 prioCompactionCompletedTasksRate 30 prioCompactionPendingTasksCount 31 prioCompactionBytesCompactedRate 32 33 prioThreadPoolActiveTasksCount 34 prioThreadPoolPendingTasksCount 35 prioThreadPoolBlockedTasksCount 36 prioThreadPoolBlockedTasksRate 37 38 prioJVMMemoryUsed 39 prioJVMGCCount 40 prioJVMGCTime 41 42 prioDroppedMessagesRate 43 prioRequestsTimeoutsRate 44 prioRequestsUnavailablesRate 45 prioRequestsFailuresRate 46 prioStorageExceptionsRate 47 ) 48 49 var baseCharts = module.Charts{ 50 chartClientRequestsRate.Copy(), 51 52 chartClientRequestsLatency.Copy(), 53 chartClientRequestReadLatencyHistogram.Copy(), 54 chartClientRequestWriteLatencyHistogram.Copy(), 55 56 chartKeyCacheHitRatio.Copy(), 57 chartRowCacheHitRatio.Copy(), 58 chartKeyCacheHitRate.Copy(), 59 chartRowCacheHitRate.Copy(), 60 chartKeyCacheUtilization.Copy(), 61 chartRowCacheUtilization.Copy(), 62 chartKeyCacheSize.Copy(), 63 chartRowCacheSize.Copy(), 64 65 chartStorageLiveDiskSpaceUsed.Copy(), 66 67 chartCompactionCompletedTasksRate.Copy(), 68 chartCompactionPendingTasksCount.Copy(), 69 chartCompactionBytesCompactedRate.Copy(), 70 71 chartJVMMemoryUsed.Copy(), 72 chartJVMGCRate.Copy(), 73 chartJVMGCTime.Copy(), 74 75 chartDroppedMessagesRate.Copy(), 76 chartClientRequestTimeoutsRate.Copy(), 77 chartClientRequestUnavailablesRate.Copy(), 78 chartClientRequestFailuresRate.Copy(), 79 chartStorageExceptionsRate.Copy(), 80 } 81 82 var ( 83 chartClientRequestsRate = module.Chart{ 84 ID: "client_requests_rate", 85 Title: "Client requests rate", 86 Units: "requests/s", 87 Fam: "throughput", 88 Ctx: "cassandra.client_requests_rate", 89 Priority: prioClientRequestsRate, 90 Dims: module.Dims{ 91 {ID: "client_request_latency_reads", Name: "read", Algo: module.Incremental}, 92 {ID: "client_request_latency_writes", Name: "write", Algo: module.Incremental, Mul: -1}, 93 }, 94 } 95 ) 96 97 var ( 98 chartClientRequestReadLatencyHistogram = module.Chart{ 99 ID: "client_request_read_latency_histogram", 100 Title: "Client request read latency histogram", 101 Units: "seconds", 102 Fam: "latency", 103 Ctx: "cassandra.client_request_read_latency_histogram", 104 Priority: prioClientRequestReadLatency, 105 Dims: module.Dims{ 106 {ID: "client_request_read_latency_p50", Name: "p50", Div: 1e6}, 107 {ID: "client_request_read_latency_p75", Name: "p75", Div: 1e6}, 108 {ID: "client_request_read_latency_p95", Name: "p95", Div: 1e6}, 109 {ID: "client_request_read_latency_p98", Name: "p98", Div: 1e6}, 110 {ID: "client_request_read_latency_p99", Name: "p99", Div: 1e6}, 111 {ID: "client_request_read_latency_p999", Name: "p999", Div: 1e6}, 112 }, 113 } 114 chartClientRequestWriteLatencyHistogram = module.Chart{ 115 ID: "client_request_write_latency_histogram", 116 Title: "Client request write latency histogram", 117 Units: "seconds", 118 Fam: "latency", 119 Ctx: "cassandra.client_request_write_latency_histogram", 120 Priority: prioClientRequestWriteLatency, 121 Dims: module.Dims{ 122 {ID: "client_request_write_latency_p50", Name: "p50", Div: 1e6}, 123 {ID: "client_request_write_latency_p75", Name: "p75", Div: 1e6}, 124 {ID: "client_request_write_latency_p95", Name: "p95", Div: 1e6}, 125 {ID: "client_request_write_latency_p98", Name: "p98", Div: 1e6}, 126 {ID: "client_request_write_latency_p99", Name: "p99", Div: 1e6}, 127 {ID: "client_request_write_latency_p999", Name: "p999", Div: 1e6}, 128 }, 129 } 130 chartClientRequestsLatency = module.Chart{ 131 ID: "client_requests_latency", 132 Title: "Client requests total latency", 133 Units: "seconds", 134 Fam: "latency", 135 Ctx: "cassandra.client_requests_latency", 136 Priority: prioClientRequestsLatency, 137 Dims: module.Dims{ 138 {ID: "client_request_total_latency_reads", Name: "read", Algo: module.Incremental, Div: 1e6}, 139 {ID: "client_request_total_latency_writes", Name: "write", Algo: module.Incremental, Div: 1e6}, 140 }, 141 } 142 ) 143 144 var ( 145 chartKeyCacheHitRatio = module.Chart{ 146 ID: "key_cache_hit_ratio", 147 Title: "Key cache hit ratio", 148 Units: "percentage", 149 Fam: "cache", 150 Ctx: "cassandra.key_cache_hit_ratio", 151 Priority: prioKeyCacheHitRatio, 152 Dims: module.Dims{ 153 {ID: "key_cache_hit_ratio", Name: "hit_ratio", Div: 1000}, 154 }, 155 } 156 chartKeyCacheHitRate = module.Chart{ 157 ID: "key_cache_hit_rate", 158 Title: "Key cache hit rate", 159 Units: "events/s", 160 Fam: "cache", 161 Ctx: "cassandra.key_cache_hit_rate", 162 Priority: prioKeyCacheHitRate, 163 Type: module.Stacked, 164 Dims: module.Dims{ 165 {ID: "key_cache_hits", Name: "hits", Algo: module.Incremental}, 166 {ID: "key_cache_misses", Name: "misses", Algo: module.Incremental}, 167 }, 168 } 169 chartKeyCacheUtilization = module.Chart{ 170 ID: "key_cache_utilization", 171 Title: "Key cache utilization", 172 Units: "percentage", 173 Fam: "cache", 174 Ctx: "cassandra.key_cache_utilization", 175 Priority: prioKeyCacheUtilization, 176 Dims: module.Dims{ 177 {ID: "key_cache_utilization", Name: "used", Div: 1000}, 178 }, 179 } 180 chartKeyCacheSize = module.Chart{ 181 ID: "key_cache_size", 182 Title: "Key cache size", 183 Units: "bytes", 184 Fam: "cache", 185 Ctx: "cassandra.key_cache_size", 186 Priority: prioKeyCacheSize, 187 Dims: module.Dims{ 188 {ID: "key_cache_size", Name: "size"}, 189 }, 190 } 191 192 chartRowCacheHitRatio = module.Chart{ 193 ID: "row_cache_hit_ratio", 194 Title: "Row cache hit ratio", 195 Units: "percentage", 196 Fam: "cache", 197 Ctx: "cassandra.row_cache_hit_ratio", 198 Priority: prioRowCacheHitRatio, 199 Dims: module.Dims{ 200 {ID: "row_cache_hit_ratio", Name: "hit_ratio", Div: 1000}, 201 }, 202 } 203 chartRowCacheHitRate = module.Chart{ 204 ID: "row_cache_hit_rate", 205 Title: "Row cache hit rate", 206 Units: "events/s", 207 Fam: "cache", 208 Ctx: "cassandra.row_cache_hit_rate", 209 Priority: prioRowCacheHitRate, 210 Type: module.Stacked, 211 Dims: module.Dims{ 212 {ID: "row_cache_hits", Name: "hits", Algo: module.Incremental}, 213 {ID: "row_cache_misses", Name: "misses", Algo: module.Incremental}, 214 }, 215 } 216 chartRowCacheUtilization = module.Chart{ 217 ID: "row_cache_utilization", 218 Title: "Row cache utilization", 219 Units: "percentage", 220 Fam: "cache", 221 Ctx: "cassandra.row_cache_utilization", 222 Priority: prioRowCacheUtilization, 223 Dims: module.Dims{ 224 {ID: "row_cache_utilization", Name: "used", Div: 1000}, 225 }, 226 } 227 chartRowCacheSize = module.Chart{ 228 ID: "row_cache_size", 229 Title: "Row cache size", 230 Units: "bytes", 231 Fam: "cache", 232 Ctx: "cassandra.row_cache_size", 233 Priority: prioRowCacheSize, 234 Dims: module.Dims{ 235 {ID: "row_cache_size", Name: "size"}, 236 }, 237 } 238 ) 239 240 var ( 241 chartStorageLiveDiskSpaceUsed = module.Chart{ 242 ID: "storage_live_disk_space_used", 243 Title: "Disk space used by live data", 244 Units: "bytes", 245 Fam: "disk usage", 246 Ctx: "cassandra.storage_live_disk_space_used", 247 Priority: prioStorageLiveDiskSpaceUsed, 248 Dims: module.Dims{ 249 {ID: "storage_load", Name: "used"}, 250 }, 251 } 252 ) 253 254 var ( 255 chartCompactionCompletedTasksRate = module.Chart{ 256 ID: "compaction_completed_tasks_rate", 257 Title: "Completed compactions rate", 258 Units: "tasks/s", 259 Fam: "compaction", 260 Ctx: "cassandra.compaction_completed_tasks_rate", 261 Priority: prioCompactionCompletedTasksRate, 262 Dims: module.Dims{ 263 {ID: "compaction_completed_tasks", Name: "completed", Algo: module.Incremental}, 264 }, 265 } 266 chartCompactionPendingTasksCount = module.Chart{ 267 ID: "compaction_pending_tasks_count", 268 Title: "Pending compactions", 269 Units: "tasks", 270 Fam: "compaction", 271 Ctx: "cassandra.compaction_pending_tasks_count", 272 Priority: prioCompactionPendingTasksCount, 273 Dims: module.Dims{ 274 {ID: "compaction_pending_tasks", Name: "pending"}, 275 }, 276 } 277 chartCompactionBytesCompactedRate = module.Chart{ 278 ID: "compaction_compacted_rate", 279 Title: "Compaction data rate", 280 Units: "bytes/s", 281 Fam: "compaction", 282 Ctx: "cassandra.compaction_compacted_rate", 283 Priority: prioCompactionBytesCompactedRate, 284 Dims: module.Dims{ 285 {ID: "compaction_bytes_compacted", Name: "compacted", Algo: module.Incremental}, 286 }, 287 } 288 ) 289 290 var ( 291 chartsTmplThreadPool = module.Charts{ 292 chartTmplThreadPoolActiveTasksCount.Copy(), 293 chartTmplThreadPoolPendingTasksCount.Copy(), 294 chartTmplThreadPoolBlockedTasksCount.Copy(), 295 chartTmplThreadPoolBlockedTasksRate.Copy(), 296 } 297 298 chartTmplThreadPoolActiveTasksCount = module.Chart{ 299 ID: "thread_pool_%s_active_tasks_count", 300 Title: "Active tasks", 301 Units: "tasks", 302 Fam: "thread pools", 303 Ctx: "cassandra.thread_pool_active_tasks_count", 304 Priority: prioThreadPoolActiveTasksCount, 305 Dims: module.Dims{ 306 {ID: "thread_pool_%s_active_tasks", Name: "active"}, 307 }, 308 } 309 chartTmplThreadPoolPendingTasksCount = module.Chart{ 310 ID: "thread_pool_%s_pending_tasks_count", 311 Title: "Pending tasks", 312 Units: "tasks", 313 Fam: "thread pools", 314 Ctx: "cassandra.thread_pool_pending_tasks_count", 315 Priority: prioThreadPoolPendingTasksCount, 316 Dims: module.Dims{ 317 {ID: "thread_pool_%s_pending_tasks", Name: "pending"}, 318 }, 319 } 320 chartTmplThreadPoolBlockedTasksCount = module.Chart{ 321 ID: "thread_pool_%s_blocked_tasks_count", 322 Title: "Blocked tasks", 323 Units: "tasks", 324 Fam: "thread pools", 325 Ctx: "cassandra.thread_pool_blocked_tasks_count", 326 Priority: prioThreadPoolBlockedTasksCount, 327 Dims: module.Dims{ 328 {ID: "thread_pool_%s_blocked_tasks", Name: "blocked"}, 329 }, 330 } 331 chartTmplThreadPoolBlockedTasksRate = module.Chart{ 332 ID: "thread_pool_%s_blocked_tasks_rate", 333 Title: "Blocked tasks rate", 334 Units: "tasks/s", 335 Fam: "thread pools", 336 Ctx: "cassandra.thread_pool_blocked_tasks_rate", 337 Priority: prioThreadPoolBlockedTasksRate, 338 Dims: module.Dims{ 339 {ID: "thread_pool_%s_total_blocked_tasks", Name: "blocked", Algo: module.Incremental}, 340 }, 341 } 342 ) 343 344 var ( 345 chartJVMMemoryUsed = module.Chart{ 346 ID: "jvm_memory_used", 347 Title: "Memory used", 348 Units: "bytes", 349 Fam: "jvm runtime", 350 Ctx: "cassandra.jvm_memory_used", 351 Priority: prioJVMMemoryUsed, 352 Type: module.Stacked, 353 Dims: module.Dims{ 354 {ID: "jvm_memory_heap_used", Name: "heap"}, 355 {ID: "jvm_memory_nonheap_used", Name: "nonheap"}, 356 }, 357 } 358 chartJVMGCRate = module.Chart{ 359 ID: "jvm_gc_rate", 360 Title: "Garbage collections rate", 361 Units: "gc/s", 362 Fam: "jvm runtime", 363 Ctx: "cassandra.jvm_gc_rate", 364 Priority: prioJVMGCCount, 365 Dims: module.Dims{ 366 {ID: "jvm_gc_parnew_count", Name: "parnew", Algo: module.Incremental}, 367 {ID: "jvm_gc_cms_count", Name: "cms", Algo: module.Incremental}, 368 }, 369 } 370 chartJVMGCTime = module.Chart{ 371 ID: "jvm_gc_time", 372 Title: "Garbage collection time", 373 Units: "seconds", 374 Fam: "jvm runtime", 375 Ctx: "cassandra.jvm_gc_time", 376 Priority: prioJVMGCTime, 377 Dims: module.Dims{ 378 {ID: "jvm_gc_parnew_time", Name: "parnew", Algo: module.Incremental, Div: 1e9}, 379 {ID: "jvm_gc_cms_time", Name: "cms", Algo: module.Incremental, Div: 1e9}, 380 }, 381 } 382 ) 383 384 var ( 385 chartDroppedMessagesRate = module.Chart{ 386 ID: "dropped_messages_rate", 387 Title: "Dropped messages rate", 388 Units: "messages/s", 389 Fam: "errors", 390 Ctx: "cassandra.dropped_messages_rate", 391 Priority: prioDroppedMessagesRate, 392 Dims: module.Dims{ 393 {ID: "dropped_messages", Name: "dropped"}, 394 }, 395 } 396 chartClientRequestTimeoutsRate = module.Chart{ 397 ID: "client_requests_timeouts_rate", 398 Title: "Client requests timeouts rate", 399 Units: "timeouts/s", 400 Fam: "errors", 401 Ctx: "cassandra.client_requests_timeouts_rate", 402 Priority: prioRequestsTimeoutsRate, 403 Dims: module.Dims{ 404 {ID: "client_request_timeouts_reads", Name: "read", Algo: module.Incremental}, 405 {ID: "client_request_timeouts_writes", Name: "write", Algo: module.Incremental, Mul: -1}, 406 }, 407 } 408 chartClientRequestUnavailablesRate = module.Chart{ 409 ID: "client_requests_unavailables_rate", 410 Title: "Client requests unavailable exceptions rate", 411 Units: "exceptions/s", 412 Fam: "errors", 413 Ctx: "cassandra.client_requests_unavailables_rate", 414 Priority: prioRequestsUnavailablesRate, 415 Dims: module.Dims{ 416 {ID: "client_request_unavailables_reads", Name: "read", Algo: module.Incremental}, 417 {ID: "client_request_unavailables_writes", Name: "write", Algo: module.Incremental, Mul: -1}, 418 }, 419 } 420 chartClientRequestFailuresRate = module.Chart{ 421 ID: "client_requests_failures_rate", 422 Title: "Client requests failures rate", 423 Units: "failures/s", 424 Fam: "errors", 425 Ctx: "cassandra.client_requests_failures_rate", 426 Priority: prioRequestsFailuresRate, 427 Dims: module.Dims{ 428 {ID: "client_request_failures_reads", Name: "read", Algo: module.Incremental}, 429 {ID: "client_request_failures_writes", Name: "write", Algo: module.Incremental, Mul: -1}, 430 }, 431 } 432 chartStorageExceptionsRate = module.Chart{ 433 ID: "storage_exceptions_rate", 434 Title: "Storage exceptions rate", 435 Units: "exceptions/s", 436 Fam: "errors", 437 Ctx: "cassandra.storage_exceptions_rate", 438 Priority: prioStorageExceptionsRate, 439 Dims: module.Dims{ 440 {ID: "storage_exceptions", Name: "storage", Algo: module.Incremental}, 441 }, 442 } 443 ) 444 445 func (c *Cassandra) addThreadPoolCharts(pool *threadPoolMetrics) { 446 charts := chartsTmplThreadPool.Copy() 447 448 for _, chart := range *charts { 449 chart.ID = fmt.Sprintf(chart.ID, pool.name) 450 chart.Labels = []module.Label{ 451 {Key: "thread_pool", Value: pool.name}, 452 } 453 for _, dim := range chart.Dims { 454 dim.ID = fmt.Sprintf(dim.ID, pool.name) 455 } 456 } 457 458 if err := c.Charts().Add(*charts...); err != nil { 459 c.Warning(err) 460 } 461 }