From 8bdfa7b33ca81f6c97c5d88ddfd24e0bddf7914a Mon Sep 17 00:00:00 2001 From: Thomas Boerger Date: Mon, 18 Dec 2023 09:40:34 +0100 Subject: [PATCH] feat: add private ips to labels --- changelog/1.1.0_2023-12-18/private-ips.md | 7 +++++ docs/partials/labels.md | 1 + pkg/action/discoverer.go | 31 ++++++++++++++++++++++- 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 changelog/1.1.0_2023-12-18/private-ips.md diff --git a/changelog/1.1.0_2023-12-18/private-ips.md b/changelog/1.1.0_2023-12-18/private-ips.md new file mode 100644 index 0000000..29d5e64 --- /dev/null +++ b/changelog/1.1.0_2023-12-18/private-ips.md @@ -0,0 +1,7 @@ +Enhancement: Add private IPs as labels + +We have added a list of all attached private networks per server, that way you +are now also able to connect optionally through the private address instead of +using the public address. + +https://github.com/promhippie/prometheus-hcloud-sd/pull/261 diff --git a/docs/partials/labels.md b/docs/partials/labels.md index 75cbeb5..3c214fe 100644 --- a/docs/partials/labels.md +++ b/docs/partials/labels.md @@ -7,6 +7,7 @@ * `__meta_hcloud_disk` * `__meta_hcloud_image_name` * `__meta_hcloud_image_type` +* `__meta_hcloud_ipv4_` * `__meta_hcloud_label_` * `__meta_hcloud_location` * `__meta_hcloud_memory` diff --git a/pkg/action/discoverer.go b/pkg/action/discoverer.go index 85137f5..6b6de0a 100644 --- a/pkg/action/discoverer.go +++ b/pkg/action/discoverer.go @@ -31,6 +31,7 @@ var ( "osFlavor": providerPrefix + "os_flavor", "osVersion": providerPrefix + "os_version", "project": providerPrefix + "project", + "privateIPv4": providerPrefix + "ipv4_", "publicIPv4": providerPrefix + "public_ipv4", "publicIPv6": providerPrefix + "public_ipv6", "serverTypeCores": providerPrefix + "cores", @@ -85,8 +86,21 @@ func (d *Discoverer) getTargets(ctx context.Context) ([]*targetgroup.Group, erro for project, client := range d.clients { now := time.Now() + + networks, err := client.Network.All(ctx) + + if err != nil { + level.Warn(d.logger).Log( + "msg", "Failed to fetch networks", + "project", project, + "err", err, + ) + + requestFailures.WithLabelValues(project).Inc() + continue + } + servers, err := client.Server.All(ctx) - requestDuration.WithLabelValues(project).Observe(time.Since(now).Seconds()) if err != nil { level.Warn(d.logger).Log( @@ -99,6 +113,8 @@ func (d *Discoverer) getTargets(ctx context.Context) ([]*targetgroup.Group, erro continue } + requestDuration.WithLabelValues(project).Observe(time.Since(now).Seconds()) + level.Debug(d.logger).Log( "msg", "Requested servers", "project", project, @@ -155,6 +171,15 @@ func (d *Discoverer) getTargets(ctx context.Context) ([]*targetgroup.Group, erro target.Labels[model.LabelName(normalizeLabel(Labels["labelPrefix"]+key))] = model.LabelValue(value) } + for _, priv := range server.PrivateNet { + for _, network := range networks { + if network.ID == priv.Network.ID { + target.Labels[model.LabelName(normalizeNetwork(Labels["privateIPv4"]+network.Name))] = model.LabelValue(priv.IP.String()) + break + } + } + } + level.Debug(d.logger).Log( "msg", "Server added", "project", project, @@ -190,3 +215,7 @@ func (d *Discoverer) getTargets(ctx context.Context) ([]*targetgroup.Group, erro func normalizeLabel(val string) string { return replacer.Replace(val) } + +func normalizeNetwork(val string) string { + return replacer.Replace(val) +}