diff --git a/discovery/gce/gce.go b/discovery/gce/gce.go index 53ee9943d5..e17c60f71d 100644 --- a/discovery/gce/gce.go +++ b/discovery/gce/gce.go @@ -178,6 +178,12 @@ func (d *Discovery) refresh(ctx context.Context) ([]*targetgroup.Group, error) { addr := fmt.Sprintf("%s:%d", priIface.NetworkIP, d.port) labels[model.AddressLabel] = model.LabelValue(addr) + // Append named interface metadata for all interfaces + for _, iface := range inst.NetworkInterfaces { + gceLabelNetAddress := model.LabelName(fmt.Sprintf("%sinterface_ipv4_%s", gceLabel, strutil.SanitizeLabelName(iface.Name))) + labels[gceLabelNetAddress] = model.LabelValue(iface.NetworkIP) + } + // Tags in GCE are usually only used for networking rules. if inst.Tags != nil && len(inst.Tags.Items) > 0 { // We surround the separated list with the separator as well. This way regular expressions diff --git a/docs/configuration/configuration.md b/docs/configuration/configuration.md index c0393c6552..ffd790ff07 100644 --- a/docs/configuration/configuration.md +++ b/docs/configuration/configuration.md @@ -1136,6 +1136,7 @@ The following meta labels are available on targets during [relabeling](#relabel_ * `__meta_gce_metadata_`: each metadata item of the instance * `__meta_gce_network`: the network URL of the instance * `__meta_gce_private_ip`: the private IP address of the instance +* `__meta_gce_interface_ipv4_`: IPv4 address of each named interface * `__meta_gce_project`: the GCP project in which the instance is running * `__meta_gce_public_ip`: the public IP address of the instance, if present * `__meta_gce_subnetwork`: the subnetwork URL of the instance