summaryrefslogtreecommitdiffstats
path: root/src/go/collectors/go.d.plugin/modules/k8s_kubeproxy/collect.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/go/collectors/go.d.plugin/modules/k8s_kubeproxy/collect.go146
1 files changed, 146 insertions, 0 deletions
diff --git a/src/go/collectors/go.d.plugin/modules/k8s_kubeproxy/collect.go b/src/go/collectors/go.d.plugin/modules/k8s_kubeproxy/collect.go
new file mode 100644
index 000000000..625713f10
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/k8s_kubeproxy/collect.go
@@ -0,0 +1,146 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package k8s_kubeproxy
+
+import (
+ "math"
+
+ mtx "github.com/netdata/netdata/go/go.d.plugin/pkg/metrics"
+ "github.com/netdata/netdata/go/go.d.plugin/pkg/prometheus"
+ "github.com/netdata/netdata/go/go.d.plugin/pkg/stm"
+
+ "github.com/netdata/netdata/go/go.d.plugin/agent/module"
+)
+
+func (kp *KubeProxy) collect() (map[string]int64, error) {
+ raw, err := kp.prom.ScrapeSeries()
+
+ if err != nil {
+ return nil, err
+ }
+
+ mx := newMetrics()
+
+ kp.collectSyncProxyRules(raw, mx)
+ kp.collectRESTClientHTTPRequests(raw, mx)
+ kp.collectHTTPRequestDuration(raw, mx)
+
+ return stm.ToMap(mx), nil
+}
+
+func (kp *KubeProxy) collectSyncProxyRules(raw prometheus.Series, mx *metrics) {
+ m := raw.FindByName("kubeproxy_sync_proxy_rules_latency_microseconds_count")
+ mx.SyncProxyRules.Count.Set(m.Max())
+ kp.collectSyncProxyRulesLatency(raw, mx)
+}
+
+func (kp *KubeProxy) collectSyncProxyRulesLatency(raw prometheus.Series, mx *metrics) {
+ metricName := "kubeproxy_sync_proxy_rules_latency_microseconds_bucket"
+ latency := &mx.SyncProxyRules.Latency
+
+ for _, metric := range raw.FindByName(metricName) {
+ bucket := metric.Labels.Get("le")
+ value := metric.Value
+ switch bucket {
+ case "1000":
+ latency.LE1000.Set(value)
+ case "2000":
+ latency.LE2000.Set(value)
+ case "4000":
+ latency.LE4000.Set(value)
+ case "8000":
+ latency.LE8000.Set(value)
+ case "16000":
+ latency.LE16000.Set(value)
+ case "32000":
+ latency.LE32000.Set(value)
+ case "64000":
+ latency.LE64000.Set(value)
+ case "128000":
+ latency.LE128000.Set(value)
+ case "256000":
+ latency.LE256000.Set(value)
+ case "512000":
+ latency.LE512000.Set(value)
+ case "1.024e+06":
+ latency.LE1024000.Set(value)
+ case "2.048e+06":
+ latency.LE2048000.Set(value)
+ case "4.096e+06":
+ latency.LE4096000.Set(value)
+ case "8.192e+06":
+ latency.LE8192000.Set(value)
+ case "1.6384e+07":
+ latency.LE16384000.Set(value)
+ case "+Inf":
+ latency.Inf.Set(value)
+ }
+ }
+
+ latency.Inf.Sub(latency.LE16384000.Value())
+ latency.LE16384000.Sub(latency.LE8192000.Value())
+ latency.LE8192000.Sub(latency.LE4096000.Value())
+ latency.LE4096000.Sub(latency.LE2048000.Value())
+ latency.LE2048000.Sub(latency.LE1024000.Value())
+ latency.LE1024000.Sub(latency.LE512000.Value())
+ latency.LE512000.Sub(latency.LE256000.Value())
+ latency.LE256000.Sub(latency.LE128000.Value())
+ latency.LE128000.Sub(latency.LE64000.Value())
+ latency.LE64000.Sub(latency.LE32000.Value())
+ latency.LE32000.Sub(latency.LE16000.Value())
+ latency.LE16000.Sub(latency.LE8000.Value())
+ latency.LE8000.Sub(latency.LE4000.Value())
+ latency.LE4000.Sub(latency.LE2000.Value())
+ latency.LE2000.Sub(latency.LE1000.Value())
+}
+
+func (kp *KubeProxy) collectRESTClientHTTPRequests(raw prometheus.Series, mx *metrics) {
+ metricName := "rest_client_requests_total"
+ chart := kp.charts.Get("rest_client_requests_by_code")
+
+ for _, metric := range raw.FindByName(metricName) {
+ code := metric.Labels.Get("code")
+ if code == "" {
+ continue
+ }
+ dimID := "rest_client_requests_" + code
+ if !chart.HasDim(dimID) {
+ _ = chart.AddDim(&Dim{ID: dimID, Name: code, Algo: module.Incremental})
+ chart.MarkNotCreated()
+ }
+ mx.RESTClient.Requests.ByStatusCode[code] = mtx.Gauge(metric.Value)
+ }
+
+ chart = kp.charts.Get("rest_client_requests_by_method")
+
+ for _, metric := range raw.FindByName(metricName) {
+ method := metric.Labels.Get("method")
+ if method == "" {
+ continue
+ }
+ dimID := "rest_client_requests_" + method
+ if !chart.HasDim(dimID) {
+ _ = chart.AddDim(&Dim{ID: dimID, Name: method, Algo: module.Incremental})
+ chart.MarkNotCreated()
+ }
+ mx.RESTClient.Requests.ByMethod[method] = mtx.Gauge(metric.Value)
+ }
+}
+
+func (kp *KubeProxy) collectHTTPRequestDuration(raw prometheus.Series, mx *metrics) {
+ // Summary
+ for _, metric := range raw.FindByName("http_request_duration_microseconds") {
+ if math.IsNaN(metric.Value) {
+ continue
+ }
+ quantile := metric.Labels.Get("quantile")
+ switch quantile {
+ case "0.5":
+ mx.HTTP.Request.Duration.Quantile05.Set(metric.Value)
+ case "0.9":
+ mx.HTTP.Request.Duration.Quantile09.Set(metric.Value)
+ case "0.99":
+ mx.HTTP.Request.Duration.Quantile099.Set(metric.Value)
+ }
+ }
+}