64 lines
1.3 KiB
Go
64 lines
1.3 KiB
Go
|
package kube_inventory
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"strings"
|
||
|
|
||
|
discoveryv1 "k8s.io/api/discovery/v1"
|
||
|
|
||
|
"github.com/influxdata/telegraf"
|
||
|
)
|
||
|
|
||
|
func collectEndpoints(ctx context.Context, acc telegraf.Accumulator, ki *KubernetesInventory) {
|
||
|
list, err := ki.client.getEndpoints(ctx)
|
||
|
if err != nil {
|
||
|
acc.AddError(err)
|
||
|
return
|
||
|
}
|
||
|
for _, i := range list.Items {
|
||
|
gatherEndpoint(i, acc)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func gatherEndpoint(e discoveryv1.EndpointSlice, acc telegraf.Accumulator) {
|
||
|
creationTS := e.GetCreationTimestamp()
|
||
|
if creationTS.IsZero() {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
fields := map[string]interface{}{
|
||
|
"created": e.GetCreationTimestamp().UnixNano(),
|
||
|
"generation": e.Generation,
|
||
|
}
|
||
|
|
||
|
tags := map[string]string{
|
||
|
"endpoint_name": e.Name,
|
||
|
"namespace": e.Namespace,
|
||
|
}
|
||
|
|
||
|
for _, endpoint := range e.Endpoints {
|
||
|
fields["ready"] = *endpoint.Conditions.Ready
|
||
|
|
||
|
if endpoint.Hostname != nil {
|
||
|
tags["hostname"] = *endpoint.Hostname
|
||
|
}
|
||
|
if endpoint.NodeName != nil {
|
||
|
tags["node_name"] = *endpoint.NodeName
|
||
|
}
|
||
|
if endpoint.TargetRef != nil {
|
||
|
tags[strings.ToLower(endpoint.TargetRef.Kind)] = endpoint.TargetRef.Name
|
||
|
}
|
||
|
|
||
|
for _, port := range e.Ports {
|
||
|
if port.Port != nil {
|
||
|
fields["port"] = *port.Port
|
||
|
}
|
||
|
|
||
|
tags["port_name"] = *port.Name
|
||
|
tags["port_protocol"] = string(*port.Protocol)
|
||
|
|
||
|
acc.AddFields(endpointMeasurement, fields, tags)
|
||
|
}
|
||
|
}
|
||
|
}
|