master
go 236 lines 6.49 KB
Raw
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/netdata/go/plugins/plugin/framework/collectorapi"
10 )
11
12 const (
13 prioJVMThreads = collectorapi.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 = collectorapi.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: collectorapi.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: collectorapi.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: collectorapi.Area,
61 Priority: prioJVMMemHeap,
62 Dims: collectorapi.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: collectorapi.Area,
74 Priority: prioJVMMemPoolsEden,
75 Dims: collectorapi.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: collectorapi.Area,
87 Priority: prioJVMMemPoolsSurvivor,
88 Dims: collectorapi.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: collectorapi.Area,
100 Priority: prioJVMMemPoolsOld,
101 Dims: collectorapi.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: collectorapi.Dims{
115 {ID: "jvm_gc_collectors_eden_collection_count", Name: "eden", Algo: collectorapi.Incremental},
116 {ID: "jvm_gc_collectors_old_collection_count", Name: "old", Algo: collectorapi.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: collectorapi.Dims{
127 {ID: "jvm_gc_collectors_eden_collection_time_in_millis", Name: "eden", Algo: collectorapi.Incremental},
128 {ID: "jvm_gc_collectors_old_collection_time_in_millis", Name: "old", Algo: collectorapi.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: collectorapi.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: collectorapi.Dims{
152 {ID: "event_in", Name: "in", Algo: collectorapi.Incremental},
153 {ID: "event_filtered", Name: "filtered", Algo: collectorapi.Incremental},
154 {ID: "event_out", Name: "out", Algo: collectorapi.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: collectorapi.Dims{
165 {ID: "event_duration_in_millis", Name: "event", Div: 1000, Algo: collectorapi.Incremental},
166 {ID: "event_queue_push_duration_in_millis", Name: "queue", Div: 1000, Algo: collectorapi.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: collectorapi.Dims{
178 {ID: "jvm_uptime_in_millis", Name: "uptime", Div: 1000},
179 },
180 },
181 }
182
183 var pipelineChartsTmpl = collectorapi.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: collectorapi.Dims{
192 {ID: "pipelines_%s_event_in", Name: "in", Algo: collectorapi.Incremental},
193 {ID: "pipelines_%s_event_filtered", Name: "filtered", Algo: collectorapi.Incremental},
194 {ID: "pipelines_%s_event_out", Name: "out", Algo: collectorapi.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: collectorapi.Dims{
205 {ID: "pipelines_%s_event_duration_in_millis", Name: "event", Div: 1000, Algo: collectorapi.Incremental},
206 {ID: "pipelines_%s_event_queue_push_duration_in_millis", Name: "queue", Div: 1000, Algo: collectorapi.Incremental},
207 },
208 },
209 }
210
211 func (c *Collector) addPipelineCharts(id string) {
212 charts := pipelineChartsTmpl.Copy()
213
214 for _, chart := range *charts {
215 chart.ID = fmt.Sprintf(chart.ID, id)
216 chart.Labels = []collectorapi.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 := c.Charts().Add(*charts...); err != nil {
225 c.Warning(err)
226 }
227 }
228
229 func (c *Collector) removePipelineCharts(id string) {
230 for _, chart := range *c.Charts() {
231 if strings.HasPrefix(chart.ID, "pipeline_"+id) {
232 chart.MarkRemove()
233 chart.MarkNotCreated()
234 }
235 }
236 }