1
16
17 package metrics
18
19 import (
20 "sync"
21 "time"
22
23 "k8s.io/component-base/metrics"
24 "k8s.io/component-base/metrics/legacyregistry"
25 )
26
27 const kubeProxySubsystem = "kubeproxy"
28
29 var (
30
31
32 SyncProxyRulesLatency = metrics.NewHistogram(
33 &metrics.HistogramOpts{
34 Subsystem: kubeProxySubsystem,
35 Name: "sync_proxy_rules_duration_seconds",
36 Help: "SyncProxyRules latency in seconds",
37 Buckets: metrics.ExponentialBuckets(0.001, 2, 15),
38 StabilityLevel: metrics.ALPHA,
39 },
40 )
41
42
43 SyncFullProxyRulesLatency = metrics.NewHistogram(
44 &metrics.HistogramOpts{
45 Subsystem: kubeProxySubsystem,
46 Name: "sync_full_proxy_rules_duration_seconds",
47 Help: "SyncProxyRules latency in seconds for full resyncs",
48 Buckets: metrics.ExponentialBuckets(0.001, 2, 15),
49 StabilityLevel: metrics.ALPHA,
50 },
51 )
52
53
54 SyncPartialProxyRulesLatency = metrics.NewHistogram(
55 &metrics.HistogramOpts{
56 Subsystem: kubeProxySubsystem,
57 Name: "sync_partial_proxy_rules_duration_seconds",
58 Help: "SyncProxyRules latency in seconds for partial resyncs",
59 Buckets: metrics.ExponentialBuckets(0.001, 2, 15),
60 StabilityLevel: metrics.ALPHA,
61 },
62 )
63
64
65
66 SyncProxyRulesLastTimestamp = metrics.NewGauge(
67 &metrics.GaugeOpts{
68 Subsystem: kubeProxySubsystem,
69 Name: "sync_proxy_rules_last_timestamp_seconds",
70 Help: "The last time proxy rules were successfully synced",
71 StabilityLevel: metrics.ALPHA,
72 },
73 )
74
75
76
77
78
79
80
81
82 NetworkProgrammingLatency = metrics.NewHistogram(
83 &metrics.HistogramOpts{
84 Subsystem: kubeProxySubsystem,
85 Name: "network_programming_duration_seconds",
86 Help: "In Cluster Network Programming Latency in seconds",
87 Buckets: metrics.MergeBuckets(
88 metrics.LinearBuckets(0.25, 0.25, 2),
89 metrics.LinearBuckets(1, 1, 59),
90 metrics.LinearBuckets(60, 5, 12),
91 metrics.LinearBuckets(120, 30, 7),
92 ),
93 StabilityLevel: metrics.ALPHA,
94 },
95 )
96
97
98
99 EndpointChangesPending = metrics.NewGauge(
100 &metrics.GaugeOpts{
101 Subsystem: kubeProxySubsystem,
102 Name: "sync_proxy_rules_endpoint_changes_pending",
103 Help: "Pending proxy rules Endpoint changes",
104 StabilityLevel: metrics.ALPHA,
105 },
106 )
107
108
109
110 EndpointChangesTotal = metrics.NewCounter(
111 &metrics.CounterOpts{
112 Subsystem: kubeProxySubsystem,
113 Name: "sync_proxy_rules_endpoint_changes_total",
114 Help: "Cumulative proxy rules Endpoint changes",
115 StabilityLevel: metrics.ALPHA,
116 },
117 )
118
119
120
121 ServiceChangesPending = metrics.NewGauge(
122 &metrics.GaugeOpts{
123 Subsystem: kubeProxySubsystem,
124 Name: "sync_proxy_rules_service_changes_pending",
125 Help: "Pending proxy rules Service changes",
126 StabilityLevel: metrics.ALPHA,
127 },
128 )
129
130
131
132 ServiceChangesTotal = metrics.NewCounter(
133 &metrics.CounterOpts{
134 Subsystem: kubeProxySubsystem,
135 Name: "sync_proxy_rules_service_changes_total",
136 Help: "Cumulative proxy rules Service changes",
137 StabilityLevel: metrics.ALPHA,
138 },
139 )
140
141
142
143 IptablesRestoreFailuresTotal = metrics.NewCounter(
144 &metrics.CounterOpts{
145 Subsystem: kubeProxySubsystem,
146 Name: "sync_proxy_rules_iptables_restore_failures_total",
147 Help: "Cumulative proxy iptables restore failures",
148 StabilityLevel: metrics.ALPHA,
149 },
150 )
151
152
153
154 IptablesPartialRestoreFailuresTotal = metrics.NewCounter(
155 &metrics.CounterOpts{
156 Subsystem: kubeProxySubsystem,
157 Name: "sync_proxy_rules_iptables_partial_restore_failures_total",
158 Help: "Cumulative proxy iptables partial restore failures",
159 StabilityLevel: metrics.ALPHA,
160 },
161 )
162
163
164
165 IptablesRulesTotal = metrics.NewGaugeVec(
166 &metrics.GaugeOpts{
167 Subsystem: kubeProxySubsystem,
168 Name: "sync_proxy_rules_iptables_total",
169 Help: "Total number of iptables rules owned by kube-proxy",
170 StabilityLevel: metrics.ALPHA,
171 },
172 []string{"table"},
173 )
174
175
176
177 IptablesRulesLastSync = metrics.NewGaugeVec(
178 &metrics.GaugeOpts{
179 Subsystem: kubeProxySubsystem,
180 Name: "sync_proxy_rules_iptables_last",
181 Help: "Number of iptables rules written by kube-proxy in last sync",
182 StabilityLevel: metrics.ALPHA,
183 },
184 []string{"table"},
185 )
186
187
188
189 ProxyHealthzTotal = metrics.NewCounterVec(
190 &metrics.CounterOpts{
191 Subsystem: kubeProxySubsystem,
192 Name: "proxy_healthz_total",
193 Help: "Cumulative proxy healthz HTTP status",
194 StabilityLevel: metrics.ALPHA,
195 },
196 []string{"code"},
197 )
198
199
200
201 ProxyLivezTotal = metrics.NewCounterVec(
202 &metrics.CounterOpts{
203 Subsystem: kubeProxySubsystem,
204 Name: "proxy_livez_total",
205 Help: "Cumulative proxy livez HTTP status",
206 StabilityLevel: metrics.ALPHA,
207 },
208 []string{"code"},
209 )
210
211
212
213
214 SyncProxyRulesLastQueuedTimestamp = metrics.NewGauge(
215 &metrics.GaugeOpts{
216 Subsystem: kubeProxySubsystem,
217 Name: "sync_proxy_rules_last_queued_timestamp_seconds",
218 Help: "The last time a sync of proxy rules was queued",
219 StabilityLevel: metrics.ALPHA,
220 },
221 )
222
223
224
225
226 SyncProxyRulesNoLocalEndpointsTotal = metrics.NewGaugeVec(
227 &metrics.GaugeOpts{
228 Subsystem: kubeProxySubsystem,
229 Name: "sync_proxy_rules_no_local_endpoints_total",
230 Help: "Number of services with a Local traffic policy and no endpoints",
231 StabilityLevel: metrics.ALPHA,
232 },
233 []string{"traffic_policy"},
234 )
235 )
236
237 var registerMetricsOnce sync.Once
238
239
240 func RegisterMetrics() {
241 registerMetricsOnce.Do(func() {
242 legacyregistry.MustRegister(SyncProxyRulesLatency)
243 legacyregistry.MustRegister(SyncFullProxyRulesLatency)
244 legacyregistry.MustRegister(SyncPartialProxyRulesLatency)
245 legacyregistry.MustRegister(SyncProxyRulesLastTimestamp)
246 legacyregistry.MustRegister(NetworkProgrammingLatency)
247 legacyregistry.MustRegister(EndpointChangesPending)
248 legacyregistry.MustRegister(EndpointChangesTotal)
249 legacyregistry.MustRegister(ServiceChangesPending)
250 legacyregistry.MustRegister(ServiceChangesTotal)
251 legacyregistry.MustRegister(IptablesRulesTotal)
252 legacyregistry.MustRegister(IptablesRulesLastSync)
253 legacyregistry.MustRegister(IptablesRestoreFailuresTotal)
254 legacyregistry.MustRegister(IptablesPartialRestoreFailuresTotal)
255 legacyregistry.MustRegister(SyncProxyRulesLastQueuedTimestamp)
256 legacyregistry.MustRegister(SyncProxyRulesNoLocalEndpointsTotal)
257 legacyregistry.MustRegister(ProxyHealthzTotal)
258 legacyregistry.MustRegister(ProxyLivezTotal)
259
260 })
261 }
262
263
264 func SinceInSeconds(start time.Time) float64 {
265 return time.Since(start).Seconds()
266 }
267
View as plain text