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  }