-
Notifications
You must be signed in to change notification settings - Fork 122
Open
Description
when trying to use the current yaml unmarshal with target labels, users run into templating issues with the helm chart in its current format.
adding a target that has labels, but uses a hostname:
- kubernetes.default:
resolver: k8s
results in the following configmap:
apiVersion: v1
data:
config.yml: |
ping:
history-size: 42
interval: 2s
payload-size: 120
timeout: 3s
dns:
nameserver: 1.1.1.1
refresh: 2m15s
targets:
- 8.8.8.8
- 8.8.4.4
- 2001:4860:4860::8888
- 2001:4860:4860::8844
- google.com
- kubernetes:
default:
resolver: k8s
i have a proposed fix to this issue here config/target.go:
// UnmarshalYAML implements yaml.Unmarshaler interface.
func (t *TargetConfig) UnmarshalYAML(unmarshal func(interface{}) error) error {
// If the input is a string, treat it as the Addr
var s string
if err := unmarshal(&s); err == nil {
t.Addr = s
t.Labels = nil
return nil
}
// Temporary map to capture raw data
raw := make(map[string]string)
if err := unmarshal(&raw); err != nil {
return err
}
// Extract "host" key into Addr
if addr, ok := raw["host"]; ok {
t.Addr = addr
delete(raw, "host") // Remove from labels
}
// Store remaining keys as labels
t.Labels = raw
return nil
}
which would be a breaking change for people who use labels, but would provide better templating ability and IMO be easier to follow and work with. the above config then becomes (or config for using labels in general):
config:
targets:
- 8.8.8.8
- 8.8.4.4
- 2001:4860:4860::8888
- 2001:4860:4860::8844
- google.com
- host: www.facebook.com
mylabel: testlabel
- host: kubernetes.default
resolver: k8s
dns:
refresh: 2m15s
nameserver: 1.1.1.1
ping:
interval: 2s
timeout: 3s
history-size: 42
payload-size: 120
which produces a configmap:
apiVersion: v1
data:
config.yml: |
ping:
history-size: 42
interval: 2s
payload-size: 120
timeout: 3s
dns:
nameserver: 1.1.1.1
refresh: 2m15s
targets:
- 8.8.8.8
- 8.8.4.4
- 2001:4860:4860::8888
- 2001:4860:4860::8844
- google.com
- host: www.facebook.com
mylabel: testlabel
- host: kubernetes.default.svc.cluster.local
resolver: k8s
and successfully parses down to metrics:
# HELP ping_loss_ratio Packet loss from 0.0 to 1.0
# TYPE ping_loss_ratio gauge
ping_loss_ratio{ip="142.250.191.206",ip_version="4",mylabel="",resolver="",target="google.com"} 0
ping_loss_ratio{ip="157.240.254.35",ip_version="4",mylabel="testlabel",resolver="",target="www.facebook.com"} 0
ping_loss_ratio{ip="172.17.0.5",ip_version="4",mylabel="",resolver="k8s",target="kubernetes.default.svc.cluster.local"} 0
ping_loss_ratio{ip="2001:4860:4860::8844",ip_version="6",mylabel="",resolver="",target="2001:4860:4860::8844"} 1
ping_loss_ratio{ip="2001:4860:4860::8888",ip_version="6",mylabel="",resolver="",target="2001:4860:4860::8888"} 1
ping_loss_ratio{ip="2607:f8b0:4009:81c::200e",ip_version="6",mylabel="",resolver="",target="google.com"} 1
ping_loss_ratio{ip="2a03:2880:f356:1:face:b00c:0:25de",ip_version="6",mylabel="testlabel",resolver="",target="www.facebook.com"} 1
ping_loss_ratio{ip="8.8.4.4",ip_version="4",mylabel="",resolver="",target="8.8.4.4"} 0
ping_loss_ratio{ip="8.8.8.8",ip_version="4",mylabel="",resolver="",target="8.8.8.8"} 0
# HELP ping_rtt_best_seconds Best round trip time in seconds
# TYPE ping_rtt_best_seconds gauge
ping_rtt_best_seconds{ip="142.250.191.206",ip_version="4",mylabel="",resolver="",target="google.com"} 0.0021468479633331298
ping_rtt_best_seconds{ip="157.240.254.35",ip_version="4",mylabel="testlabel",resolver="",target="www.facebook.com"} 0.002195908069610596
ping_rtt_best_seconds{ip="172.17.0.5",ip_version="4",mylabel="",resolver="k8s",target="kubernetes.default.svc.cluster.local"} 6.050999835133553e-05
ping_rtt_best_seconds{ip="8.8.4.4",ip_version="4",mylabel="",resolver="",target="8.8.4.4"} 0.0020604650974273683
ping_rtt_best_seconds{ip="8.8.8.8",ip_version="4",mylabel="",resolver="",target="8.8.8.8"} 0.00217268705368042
# HELP ping_rtt_mean_seconds Mean round trip time in seconds
# TYPE ping_rtt_mean_seconds gauge
ping_rtt_mean_seconds{ip="142.250.191.206",ip_version="4",mylabel="",resolver="",target="google.com"} 0.0023349974155426026
ping_rtt_mean_seconds{ip="157.240.254.35",ip_version="4",mylabel="testlabel",resolver="",target="www.facebook.com"} 0.002380847692489624
ping_rtt_mean_seconds{ip="172.17.0.5",ip_version="4",mylabel="",resolver="k8s",target="kubernetes.default.svc.cluster.local"} 0.00011093642562627793
ping_rtt_mean_seconds{ip="8.8.4.4",ip_version="4",mylabel="",resolver="",target="8.8.4.4"} 0.002241145133972168
ping_rtt_mean_seconds{ip="8.8.8.8",ip_version="4",mylabel="",resolver="",target="8.8.8.8"} 0.002362915277481079
# HELP ping_rtt_std_deviation_seconds Standard deviation in seconds
# TYPE ping_rtt_std_deviation_seconds gauge
ping_rtt_std_deviation_seconds{ip="142.250.191.206",ip_version="4",mylabel="",resolver="",target="google.com"} 0.00013656458258628844
ping_rtt_std_deviation_seconds{ip="157.240.254.35",ip_version="4",mylabel="testlabel",resolver="",target="www.facebook.com"} 0.00013933387398719788
ping_rtt_std_deviation_seconds{ip="172.17.0.5",ip_version="4",mylabel="",resolver="k8s",target="kubernetes.default.svc.cluster.local"} 3.0496323481202125e-05
ping_rtt_std_deviation_seconds{ip="8.8.4.4",ip_version="4",mylabel="",resolver="",target="8.8.4.4"} 0.00011795162409543991
ping_rtt_std_deviation_seconds{ip="8.8.8.8",ip_version="4",mylabel="",resolver="",target="8.8.8.8"} 9.476055949926377e-05
# HELP ping_rtt_worst_seconds Worst round trip time in seconds
# TYPE ping_rtt_worst_seconds gauge
ping_rtt_worst_seconds{ip="142.250.191.206",ip_version="4",mylabel="",resolver="",target="google.com"} 0.0027680320739746096
ping_rtt_worst_seconds{ip="157.240.254.35",ip_version="4",mylabel="testlabel",resolver="",target="www.facebook.com"} 0.002882652997970581
ping_rtt_worst_seconds{ip="172.17.0.5",ip_version="4",mylabel="",resolver="k8s",target="kubernetes.default.svc.cluster.local"} 0.00018282100558280945
ping_rtt_worst_seconds{ip="8.8.4.4",ip_version="4",mylabel="",resolver="",target="8.8.4.4"} 0.002826992988586426
ping_rtt_worst_seconds{ip="8.8.8.8",ip_version="4",mylabel="",resolver="",target="8.8.8.8"} 0.0025727999210357665
# HELP ping_up ping_exporter version
# TYPE ping_up gauge
ping_up{version="1.1.3"} 1
would you like me to PR this solution?
Metadata
Metadata
Assignees
Labels
No labels