github.com/netdata/go.d.plugin@v0.58.1/modules/logstash/charts.go (about)

     1  // SPDX-License-Identifier: GPL-3.0-or-later
     2  
     3  package logstash
     4  
     5  import (
     6  	"fmt"
     7  	"strings"
     8  
     9  	"github.com/netdata/go.d.plugin/agent/module"
    10  )
    11  
    12  const (
    13  	prioJVMThreads = module.Priority + iota
    14  	prioJVMMemHeapUsed
    15  	prioJVMMemHeap
    16  	prioJVMMemPoolsEden
    17  	prioJVMMemPoolsSurvivor
    18  	prioJVMMemPoolsOld
    19  	prioJVMGCCollectorCount
    20  	prioJVMGCCollectorTime
    21  	prioOpenFileDescriptors
    22  	prioEvent
    23  	prioEventDuration
    24  	prioPipelineEvent
    25  	prioPipelineEventDurations
    26  	prioUptime
    27  )
    28  
    29  var charts = module.Charts{
    30  	// thread
    31  	{
    32  		ID:       "jvm_threads",
    33  		Title:    "JVM Threads",
    34  		Units:    "count",
    35  		Fam:      "threads",
    36  		Ctx:      "logstash.jvm_threads",
    37  		Priority: prioJVMThreads,
    38  		Dims: module.Dims{
    39  			{ID: "jvm_threads_count", Name: "threads"},
    40  		},
    41  	},
    42  	// memory
    43  	{
    44  		ID:       "jvm_mem_heap_used",
    45  		Title:    "JVM Heap Memory Percentage",
    46  		Units:    "percentage",
    47  		Fam:      "memory",
    48  		Ctx:      "logstash.jvm_mem_heap_used",
    49  		Priority: prioJVMMemHeapUsed,
    50  		Dims: module.Dims{
    51  			{ID: "jvm_mem_heap_used_percent", Name: "in use"},
    52  		},
    53  	},
    54  	{
    55  		ID:       "jvm_mem_heap",
    56  		Title:    "JVM Heap Memory",
    57  		Units:    "KiB",
    58  		Fam:      "memory",
    59  		Ctx:      "logstash.jvm_mem_heap",
    60  		Type:     module.Area,
    61  		Priority: prioJVMMemHeap,
    62  		Dims: module.Dims{
    63  			{ID: "jvm_mem_heap_committed_in_bytes", Name: "committed", Div: 1024},
    64  			{ID: "jvm_mem_heap_used_in_bytes", Name: "used", Div: 1024},
    65  		},
    66  	},
    67  	{
    68  		ID:       "jvm_mem_pools_eden",
    69  		Title:    "JVM Pool Eden Memory",
    70  		Units:    "KiB",
    71  		Fam:      "memory",
    72  		Ctx:      "logstash.jvm_mem_pools_eden",
    73  		Type:     module.Area,
    74  		Priority: prioJVMMemPoolsEden,
    75  		Dims: module.Dims{
    76  			{ID: "jvm_mem_pools_eden_committed_in_bytes", Name: "committed", Div: 1024},
    77  			{ID: "jvm_mem_pools_eden_used_in_bytes", Name: "used", Div: 1024},
    78  		},
    79  	},
    80  	{
    81  		ID:       "jvm_mem_pools_survivor",
    82  		Title:    "JVM Pool Survivor Memory",
    83  		Units:    "KiB",
    84  		Fam:      "memory",
    85  		Ctx:      "logstash.jvm_mem_pools_survivor",
    86  		Type:     module.Area,
    87  		Priority: prioJVMMemPoolsSurvivor,
    88  		Dims: module.Dims{
    89  			{ID: "jvm_mem_pools_survivor_committed_in_bytes", Name: "committed", Div: 1024},
    90  			{ID: "jvm_mem_pools_survivor_used_in_bytes", Name: "used", Div: 1024},
    91  		},
    92  	},
    93  	{
    94  		ID:       "jvm_mem_pools_old",
    95  		Title:    "JVM Pool Old Memory",
    96  		Units:    "KiB",
    97  		Fam:      "memory",
    98  		Ctx:      "logstash.jvm_mem_pools_old",
    99  		Type:     module.Area,
   100  		Priority: prioJVMMemPoolsOld,
   101  		Dims: module.Dims{
   102  			{ID: "jvm_mem_pools_old_committed_in_bytes", Name: "committed", Div: 1024},
   103  			{ID: "jvm_mem_pools_old_used_in_bytes", Name: "used", Div: 1024},
   104  		},
   105  	},
   106  	// garbage collection
   107  	{
   108  		ID:       "jvm_gc_collector_count",
   109  		Title:    "Garbage Collection Count",
   110  		Units:    "counts/s",
   111  		Fam:      "garbage collection",
   112  		Ctx:      "logstash.jvm_gc_collector_count",
   113  		Priority: prioJVMGCCollectorCount,
   114  		Dims: module.Dims{
   115  			{ID: "jvm_gc_collectors_eden_collection_count", Name: "eden", Algo: module.Incremental},
   116  			{ID: "jvm_gc_collectors_old_collection_count", Name: "old", Algo: module.Incremental},
   117  		},
   118  	},
   119  	{
   120  		ID:       "jvm_gc_collector_time",
   121  		Title:    "Time Spent On Garbage Collection",
   122  		Units:    "ms",
   123  		Fam:      "garbage collection",
   124  		Ctx:      "logstash.jvm_gc_collector_time",
   125  		Priority: prioJVMGCCollectorTime,
   126  		Dims: module.Dims{
   127  			{ID: "jvm_gc_collectors_eden_collection_time_in_millis", Name: "eden", Algo: module.Incremental},
   128  			{ID: "jvm_gc_collectors_old_collection_time_in_millis", Name: "old", Algo: module.Incremental},
   129  		},
   130  	},
   131  	// processes
   132  	{
   133  		ID:       "open_file_descriptors",
   134  		Title:    "Open File Descriptors",
   135  		Units:    "fd",
   136  		Fam:      "processes",
   137  		Ctx:      "logstash.open_file_descriptors",
   138  		Priority: prioOpenFileDescriptors,
   139  		Dims: module.Dims{
   140  			{ID: "process_open_file_descriptors", Name: "open"},
   141  		},
   142  	},
   143  	// events
   144  	{
   145  		ID:       "event",
   146  		Title:    "Events Overview",
   147  		Units:    "events/s",
   148  		Fam:      "events",
   149  		Ctx:      "logstash.event",
   150  		Priority: prioEvent,
   151  		Dims: module.Dims{
   152  			{ID: "event_in", Name: "in", Algo: module.Incremental},
   153  			{ID: "event_filtered", Name: "filtered", Algo: module.Incremental},
   154  			{ID: "event_out", Name: "out", Algo: module.Incremental},
   155  		},
   156  	},
   157  	{
   158  		ID:       "event_duration",
   159  		Title:    "Events Duration",
   160  		Units:    "seconds",
   161  		Fam:      "events",
   162  		Ctx:      "logstash.event_duration",
   163  		Priority: prioEventDuration,
   164  		Dims: module.Dims{
   165  			{ID: "event_duration_in_millis", Name: "event", Div: 1000, Algo: module.Incremental},
   166  			{ID: "event_queue_push_duration_in_millis", Name: "queue", Div: 1000, Algo: module.Incremental},
   167  		},
   168  	},
   169  	// uptime
   170  	{
   171  		ID:       "uptime",
   172  		Title:    "Uptime",
   173  		Units:    "seconds",
   174  		Fam:      "uptime",
   175  		Ctx:      "logstash.uptime",
   176  		Priority: prioUptime,
   177  		Dims: module.Dims{
   178  			{ID: "jvm_uptime_in_millis", Name: "uptime", Div: 1000},
   179  		},
   180  	},
   181  }
   182  
   183  var pipelineChartsTmpl = module.Charts{
   184  	{
   185  		ID:       "pipeline_%s_event",
   186  		Title:    "Pipeline Events",
   187  		Units:    "events/s",
   188  		Fam:      "pipeline events",
   189  		Ctx:      "logstash.pipeline_event",
   190  		Priority: prioPipelineEvent,
   191  		Dims: module.Dims{
   192  			{ID: "pipelines_%s_event_in", Name: "in", Algo: module.Incremental},
   193  			{ID: "pipelines_%s_event_filtered", Name: "filtered", Algo: module.Incremental},
   194  			{ID: "pipelines_%s_event_out", Name: "out", Algo: module.Incremental},
   195  		},
   196  	},
   197  	{
   198  		ID:       "pipeline_%s_event_duration",
   199  		Title:    "Pipeline Events Duration",
   200  		Units:    "seconds",
   201  		Fam:      "pipeline events duration",
   202  		Ctx:      "logstash.pipeline_event_duration",
   203  		Priority: prioPipelineEventDurations,
   204  		Dims: module.Dims{
   205  			{ID: "pipelines_%s_event_duration_in_millis", Name: "event", Div: 1000, Algo: module.Incremental},
   206  			{ID: "pipelines_%s_event_queue_push_duration_in_millis", Name: "queue", Div: 1000, Algo: module.Incremental},
   207  		},
   208  	},
   209  }
   210  
   211  func (l *Logstash) addPipelineCharts(id string) {
   212  	charts := pipelineChartsTmpl.Copy()
   213  
   214  	for _, chart := range *charts {
   215  		chart.ID = fmt.Sprintf(chart.ID, id)
   216  		chart.Labels = []module.Label{
   217  			{Key: "pipeline", Value: id},
   218  		}
   219  		for _, dim := range chart.Dims {
   220  			dim.ID = fmt.Sprintf(dim.ID, id)
   221  		}
   222  	}
   223  
   224  	if err := l.Charts().Add(*charts...); err != nil {
   225  		l.Warning(err)
   226  	}
   227  }
   228  
   229  func (l *Logstash) removePipelineCharts(id string) {
   230  	for _, chart := range *l.Charts() {
   231  		if strings.HasPrefix(chart.ID, "pipeline_"+id) {
   232  			chart.MarkRemove()
   233  			chart.MarkNotCreated()
   234  		}
   235  	}
   236  }