master
go 277 lines 11.5 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package elasticsearch
4
5 // https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html
6
7 type esMetrics struct {
8 // https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-nodes-stats.html
9 NodesStats *esNodesStats
10 // https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-health.html
11 ClusterHealth *esClusterHealth
12 // https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-stats.html
13 ClusterStats *esClusterStats
14 // https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-indices.html
15 LocalIndicesStats []esIndexStats
16 }
17
18 func (m esMetrics) empty() bool {
19 switch {
20 case m.hasNodesStats(), m.hasClusterHealth(), m.hasClusterStats(), m.hasLocalIndicesStats():
21 return false
22 }
23 return true
24 }
25
26 func (m esMetrics) hasNodesStats() bool { return m.NodesStats != nil && len(m.NodesStats.Nodes) > 0 }
27 func (m esMetrics) hasClusterHealth() bool { return m.ClusterHealth != nil }
28 func (m esMetrics) hasClusterStats() bool { return m.ClusterStats != nil }
29 func (m esMetrics) hasLocalIndicesStats() bool { return len(m.LocalIndicesStats) > 0 }
30
31 type (
32 esNodesStats struct {
33 ClusterName string `json:"cluster_name"`
34 Nodes map[string]*esNodeStats `json:"nodes"`
35 }
36 esNodeStats struct {
37 Name string
38 Host string
39 Indices struct {
40 Indexing struct {
41 IndexTotal float64 `stm:"index_total" json:"index_total"`
42 IndexCurrent float64 `stm:"index_current" json:"index_current"`
43 IndexTimeInMillis float64 `stm:"index_time_in_millis" json:"index_time_in_millis"`
44 } `stm:"indexing"`
45 Search struct {
46 FetchTotal float64 `stm:"fetch_total" json:"fetch_total"`
47 FetchCurrent float64 `stm:"fetch_current" json:"fetch_current"`
48 FetchTimeInMillis float64 `stm:"fetch_time_in_millis" json:"fetch_time_in_millis"`
49 QueryTotal float64 `stm:"query_total" json:"query_total"`
50 QueryCurrent float64 `stm:"query_current" json:"query_current"`
51 QueryTimeInMillis float64 `stm:"query_time_in_millis" json:"query_time_in_millis"`
52 } `stm:"search"`
53 Refresh struct {
54 Total float64 `stm:"total"`
55 TimeInMillis float64 `stm:"total_time_in_millis" json:"total_time_in_millis"`
56 } `stm:"refresh"`
57 Flush struct {
58 Total float64 `stm:"total"`
59 TimeInMillis float64 `stm:"total_time_in_millis" json:"total_time_in_millis"`
60 } `stm:"flush"`
61 FieldData struct {
62 MemorySizeInBytes float64 `stm:"memory_size_in_bytes" json:"memory_size_in_bytes"`
63 Evictions float64 `stm:"evictions"`
64 } `stm:"fielddata"`
65 Segments struct {
66 Count float64 `stm:"count" json:"count"`
67 MemoryInBytes float64 `stm:"memory_in_bytes" json:"memory_in_bytes"`
68 TermsMemoryInBytes float64 `stm:"terms_memory_in_bytes" json:"terms_memory_in_bytes"`
69 StoredFieldsMemoryInBytes float64 `stm:"stored_fields_memory_in_bytes" json:"stored_fields_memory_in_bytes"`
70 TermVectorsMemoryInBytes float64 `stm:"term_vectors_memory_in_bytes" json:"term_vectors_memory_in_bytes"`
71 NormsMemoryInBytes float64 `stm:"norms_memory_in_bytes" json:"norms_memory_in_bytes"`
72 PointsMemoryInBytes float64 `stm:"points_memory_in_bytes" json:"points_memory_in_bytes"`
73 DocValuesMemoryInBytes float64 `stm:"doc_values_memory_in_bytes" json:"doc_values_memory_in_bytes"`
74 IndexWriterMemoryInBytes float64 `stm:"index_writer_memory_in_bytes" json:"index_writer_memory_in_bytes"`
75 VersionMapMemoryInBytes float64 `stm:"version_map_memory_in_bytes" json:"version_map_memory_in_bytes"`
76 FixedBitSetMemoryInBytes float64 `stm:"fixed_bit_set_memory_in_bytes" json:"fixed_bit_set_memory_in_bytes"`
77 } `stm:"segments"`
78 Translog struct {
79 Operations float64 `stm:"operations"`
80 SizeInBytes float64 `stm:"size_in_bytes" json:"size_in_bytes"`
81 UncommittedOperations float64 `stm:"uncommitted_operations" json:"uncommitted_operations"`
82 UncommittedSizeInBytes float64 `stm:"uncommitted_size_in_bytes" json:"uncommitted_size_in_bytes"`
83 } `stm:"translog"`
84 } `stm:"indices"`
85 Process struct {
86 OpenFileDescriptors float64 `stm:"open_file_descriptors" json:"open_file_descriptors"`
87 MaxFileDescriptors float64 `stm:"max_file_descriptors" json:"max_file_descriptors"`
88 } `stm:"process"`
89 JVM struct {
90 Mem struct {
91 HeapUsedPercent float64 `stm:"heap_used_percent" json:"heap_used_percent"`
92 HeapUsedInBytes float64 `stm:"heap_used_in_bytes" json:"heap_used_in_bytes"`
93 HeapCommittedInBytes float64 `stm:"heap_committed_in_bytes" json:"heap_committed_in_bytes"`
94 } `stm:"mem"`
95 GC struct {
96 Collectors struct {
97 Young struct {
98 CollectionCount float64 `stm:"collection_count" json:"collection_count"`
99 CollectionTimeInMillis float64 `stm:"collection_time_in_millis" json:"collection_time_in_millis"`
100 } `stm:"young"`
101 Old struct {
102 CollectionCount float64 `stm:"collection_count" json:"collection_count"`
103 CollectionTimeInMillis float64 `stm:"collection_time_in_millis" json:"collection_time_in_millis"`
104 } `stm:"old"`
105 } `stm:"collectors"`
106 } `stm:"gc"`
107 BufferPools struct {
108 Mapped struct {
109 Count float64 `stm:"count"`
110 UsedInBytes float64 `stm:"used_in_bytes" json:"used_in_bytes"`
111 TotalCapacityInBytes float64 `stm:"total_capacity_in_bytes" json:"total_capacity_in_bytes"`
112 } `stm:"mapped"`
113 Direct struct {
114 Count float64 `stm:"count"`
115 UsedInBytes float64 `stm:"used_in_bytes" json:"used_in_bytes"`
116 TotalCapacityInBytes float64 `stm:"total_capacity_in_bytes" json:"total_capacity_in_bytes"`
117 } `stm:"direct"`
118 } `stm:"buffer_pools" json:"buffer_pools"`
119 } `stm:"jvm"`
120 // https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-threadpool.html
121 ThreadPool struct {
122 Generic struct {
123 Queue float64 `stm:"queue"`
124 Rejected float64 `stm:"rejected"`
125 } `stm:"generic"`
126 Search struct {
127 Queue float64 `stm:"queue"`
128 Rejected float64 `stm:"rejected"`
129 } `stm:"search"`
130 SearchThrottled struct {
131 Queue float64 `stm:"queue"`
132 Rejected float64 `stm:"rejected"`
133 } `stm:"search_throttled" json:"search_throttled"`
134 Get struct {
135 Queue float64 `stm:"queue"`
136 Rejected float64 `stm:"rejected"`
137 } `stm:"get"`
138 Analyze struct {
139 Queue float64 `stm:"queue"`
140 Rejected float64 `stm:"rejected"`
141 } `stm:"analyze"`
142 Write struct {
143 Queue float64 `stm:"queue"`
144 Rejected float64 `stm:"rejected"`
145 } `stm:"write"`
146 Snapshot struct {
147 Queue float64 `stm:"queue"`
148 Rejected float64 `stm:"rejected"`
149 } `stm:"snapshot"`
150 Warmer struct {
151 Queue float64 `stm:"queue"`
152 Rejected float64 `stm:"rejected"`
153 } `stm:"warmer"`
154 Refresh struct {
155 Queue float64 `stm:"queue"`
156 Rejected float64 `stm:"rejected"`
157 } `stm:"refresh"`
158 Listener struct {
159 Queue float64 `stm:"queue"`
160 Rejected float64 `stm:"rejected"`
161 } `stm:"listener"`
162 FetchShardStarted struct {
163 Queue float64 `stm:"queue"`
164 Rejected float64 `stm:"rejected"`
165 } `stm:"fetch_shard_started" json:"fetch_shard_started"`
166 FetchShardStore struct {
167 Queue float64 `stm:"queue"`
168 Rejected float64 `stm:"rejected"`
169 } `stm:"fetch_shard_store" json:"fetch_shard_store"`
170 Flush struct {
171 Queue float64 `stm:"queue"`
172 Rejected float64 `stm:"rejected"`
173 } `stm:"flush"`
174 ForceMerge struct {
175 Queue float64 `stm:"queue"`
176 Rejected float64 `stm:"rejected"`
177 } `stm:"force_merge" json:"force_merge"`
178 Management struct {
179 Queue float64 `stm:"queue"`
180 Rejected float64 `stm:"rejected"`
181 } `stm:"management"`
182 } `stm:"thread_pool" json:"thread_pool"`
183 Transport struct {
184 RxCount float64 `stm:"rx_count" json:"rx_count"`
185 RxSizeInBytes float64 `stm:"rx_size_in_bytes" json:"rx_size_in_bytes"`
186 TxCount float64 `stm:"tx_count" json:"tx_count"`
187 TxSizeInBytes float64 `stm:"tx_size_in_bytes" json:"tx_size_in_bytes"`
188 } `stm:"transport"`
189 HTTP struct {
190 CurrentOpen float64 `stm:"current_open" json:"current_open"`
191 } `stm:"http"`
192 Breakers struct {
193 Request struct {
194 Tripped float64 `stm:"tripped"`
195 } `stm:"request"`
196 FieldData struct {
197 Tripped float64 `stm:"tripped"`
198 } `stm:"fielddata"`
199 InFlightRequests struct {
200 Tripped float64 `stm:"tripped"`
201 } `stm:"in_flight_requests" json:"in_flight_requests"`
202 ModelInference struct {
203 Tripped float64 `stm:"tripped"`
204 } `stm:"model_inference" json:"model_inference"`
205 Accounting struct {
206 Tripped float64 `stm:"tripped"`
207 } `stm:"accounting"`
208 Parent struct {
209 Tripped float64 `stm:"tripped"`
210 } `stm:"parent"`
211 } `stm:"breakers"`
212 }
213 )
214
215 type esClusterHealth struct {
216 ClusterName string `json:"cluster_name"`
217 Status string
218 NumOfNodes float64 `stm:"number_of_nodes" json:"number_of_nodes"`
219 NumOfDataNodes float64 `stm:"number_of_data_nodes" json:"number_of_data_nodes"`
220 ActivePrimaryShards float64 `stm:"active_primary_shards" json:"active_primary_shards"`
221 ActiveShards float64 `stm:"active_shards" json:"active_shards"`
222 RelocatingShards float64 `stm:"relocating_shards" json:"relocating_shards"`
223 InitializingShards float64 `stm:"initializing_shards" json:"initializing_shards"`
224 UnassignedShards float64 `stm:"unassigned_shards" json:"unassigned_shards"`
225 DelayedUnassignedShards float64 `stm:"delayed_unassigned_shards" json:"delayed_unassigned_shards"`
226 NumOfPendingTasks float64 `stm:"number_of_pending_tasks" json:"number_of_pending_tasks"`
227 NumOfInFlightFetch float64 `stm:"number_of_in_flight_fetch" json:"number_of_in_flight_fetch"`
228 ActiveShardsPercentAsNumber float64 `stm:"active_shards_percent_as_number" json:"active_shards_percent_as_number"`
229 }
230
231 type esClusterStats struct {
232 ClusterName string `json:"cluster_name"`
233 Nodes struct {
234 Count struct {
235 Total float64 `stm:"total"`
236 CoordinatingOnly float64 `stm:"coordinating_only" json:"coordinating_only"`
237 Data float64 `stm:"data"`
238 DataCold float64 `stm:"data_cold" json:"data_cold"`
239 DataContent float64 `stm:"data_content" json:"data_content"`
240 DataFrozen float64 `stm:"data_frozen" json:"data_frozen"`
241 DataHot float64 `stm:"data_hot" json:"data_hot"`
242 DataWarm float64 `stm:"data_warm" json:"data_warm"`
243 Ingest float64 `stm:"ingest"`
244 Master float64 `stm:"master"`
245 ML float64 `stm:"ml"`
246 RemoteClusterClient float64 `stm:"remote_cluster_client" json:"remote_cluster_client"`
247 Transform float64 `stm:"transform"`
248 VotingOnly float64 `stm:"voting_only" json:"voting_only"`
249 } `stm:"count"`
250 } `stm:"nodes"`
251 Indices struct {
252 Count float64 `stm:"count"`
253 Shards struct {
254 Total float64 `stm:"total"`
255 Primaries float64 `stm:"primaries"`
256 Replication float64 `stm:"replication"`
257 } `stm:"shards"`
258 Docs struct {
259 Count float64 `stm:"count"`
260 } `stm:"docs"`
261 Store struct {
262 SizeInBytes float64 `stm:"size_in_bytes" json:"size_in_bytes"`
263 } `stm:"store"`
264 QueryCache struct {
265 HitCount float64 `stm:"hit_count" json:"hit_count"`
266 MissCount float64 `stm:"miss_count" json:"miss_count"`
267 } `stm:"query_cache" json:"query_cache"`
268 } `stm:"indices"`
269 }
270
271 type esIndexStats struct {
272 Index string
273 Health string
274 Rep string
275 DocsCount string `json:"docs.count"`
276 StoreSize string `json:"store.size"`
277 }