diff --git a/discovery/scaleway/instance.go b/discovery/scaleway/instance.go
index 6a62730ef..b67296541 100644
--- a/discovery/scaleway/instance.go
+++ b/discovery/scaleway/instance.go
@@ -34,17 +34,28 @@ import (
const (
instanceLabelPrefix = metaLabelPrefix + "instance_"
- instanceIDLabel = instanceLabelPrefix + "id"
- instancePrivateIPv4 = instanceLabelPrefix + "private_ipv4"
- instancePublicIPv4 = instanceLabelPrefix + "public_ipv4"
- instancePublicIPv6 = instanceLabelPrefix + "public_ipv6"
- instanceImageNameLabel = instanceLabelPrefix + "image_name"
- instanceNameLabel = instanceLabelPrefix + "name"
- instanceProjectLabel = instanceLabelPrefix + "project_id"
- instanceStateLabel = instanceLabelPrefix + "status"
- instanceTagsLabel = instanceLabelPrefix + "tags"
- instanceTypeLabel = instanceLabelPrefix + "type"
- instanceZoneLabel = instanceLabelPrefix + "zone"
+ instanceBootTypeLabel = instanceLabelPrefix + "boot_type"
+ instanceHostnameLabel = instanceLabelPrefix + "hostname"
+ instanceIDLabel = instanceLabelPrefix + "id"
+ instanceImageArchLabel = instanceLabelPrefix + "image_arch"
+ instanceImageIDLabel = instanceLabelPrefix + "image_id"
+ instanceImageNameLabel = instanceLabelPrefix + "image_name"
+ instanceLocationClusterID = instanceLabelPrefix + "location_cluster_id"
+ instanceLocationHypervisorID = instanceLabelPrefix + "location_hypervisor_id"
+ instanceLocationNodeID = instanceLabelPrefix + "location_node_id"
+ instanceNameLabel = instanceLabelPrefix + "name"
+ instanceOrganizationLabel = instanceLabelPrefix + "organization"
+ instancePrivateIPv4Label = instanceLabelPrefix + "private_ipv4"
+ instanceProjectLabel = instanceLabelPrefix + "project_id"
+ instancePublicIPv4Label = instanceLabelPrefix + "public_ipv4"
+ instancePublicIPv6Label = instanceLabelPrefix + "public_ipv6"
+ instanceSecurityGroupIDLabel = instanceLabelPrefix + "security_group_id"
+ instanceSecurityGroupNameLabel = instanceLabelPrefix + "security_group_name"
+ instanceStateLabel = instanceLabelPrefix + "status"
+ instanceTagsLabel = instanceLabelPrefix + "tags"
+ instanceTypeLabel = instanceLabelPrefix + "type"
+ instanceZoneLabel = instanceLabelPrefix + "zone"
+ instanceRegionLabel = instanceLabelPrefix + "region"
)
type instanceDiscovery struct {
@@ -116,13 +127,27 @@ func (d *instanceDiscovery) refresh(ctx context.Context) ([]*targetgroup.Group,
var targets []model.LabelSet
for _, server := range servers.Servers {
labels := model.LabelSet{
- instanceIDLabel: model.LabelValue(server.ID),
- instanceImageNameLabel: model.LabelValue(server.Image.Name),
- instanceNameLabel: model.LabelValue(server.Name),
- instanceProjectLabel: model.LabelValue(server.Project),
- instanceStateLabel: model.LabelValue(server.State),
- instanceTypeLabel: model.LabelValue(server.CommercialType),
- instanceZoneLabel: model.LabelValue(server.Zone.String()),
+ instanceBootTypeLabel: model.LabelValue(server.BootType),
+ instanceHostnameLabel: model.LabelValue(server.Hostname),
+ instanceIDLabel: model.LabelValue(server.ID),
+ instanceImageArchLabel: model.LabelValue(server.Image.Arch),
+ instanceImageIDLabel: model.LabelValue(server.Image.ID),
+ instanceImageNameLabel: model.LabelValue(server.Image.Name),
+ instanceLocationClusterID: model.LabelValue(server.Location.ClusterID),
+ instanceLocationHypervisorID: model.LabelValue(server.Location.HypervisorID),
+ instanceLocationNodeID: model.LabelValue(server.Location.NodeID),
+ instanceNameLabel: model.LabelValue(server.Name),
+ instanceOrganizationLabel: model.LabelValue(server.Organization),
+ instanceProjectLabel: model.LabelValue(server.Project),
+ instanceSecurityGroupIDLabel: model.LabelValue(server.SecurityGroup.ID),
+ instanceSecurityGroupNameLabel: model.LabelValue(server.SecurityGroup.Name),
+ instanceStateLabel: model.LabelValue(server.State),
+ instanceTypeLabel: model.LabelValue(server.CommercialType),
+ instanceZoneLabel: model.LabelValue(server.Zone.String()),
+ }
+
+ if region, err := server.Zone.Region(); err == nil {
+ labels[instanceRegionLabel] = model.LabelValue(region.String())
}
if len(server.Tags) > 0 {
@@ -133,15 +158,15 @@ func (d *instanceDiscovery) refresh(ctx context.Context) ([]*targetgroup.Group,
}
if server.IPv6 != nil {
- labels[instancePublicIPv6] = model.LabelValue(server.IPv6.Address.String())
+ labels[instancePublicIPv6Label] = model.LabelValue(server.IPv6.Address.String())
}
if server.PublicIP != nil {
- labels[instancePublicIPv4] = model.LabelValue(server.PublicIP.Address.String())
+ labels[instancePublicIPv4Label] = model.LabelValue(server.PublicIP.Address.String())
}
if server.PrivateIP != nil {
- labels[instancePrivateIPv4] = model.LabelValue(*server.PrivateIP)
+ labels[instancePrivateIPv4Label] = model.LabelValue(*server.PrivateIP)
addr := net.JoinHostPort(*server.PrivateIP, strconv.FormatUint(uint64(d.port), 10))
labels[model.AddressLabel] = model.LabelValue(addr)
diff --git a/discovery/scaleway/instance_test.go b/discovery/scaleway/instance_test.go
index b920e2baf..15fdb495e 100644
--- a/discovery/scaleway/instance_test.go
+++ b/discovery/scaleway/instance_test.go
@@ -63,29 +63,51 @@ api_url: %s
for i, lbls := range []model.LabelSet{
{
- "__address__": "10.70.60.57:80",
- "__meta_scaleway_instance_id": "93c18a61-b681-49d0-a1cc-62b43883ae89",
- "__meta_scaleway_instance_image_name": "Ubuntu 18.04 Bionic Beaver",
- "__meta_scaleway_instance_name": "scw-nervous-shirley",
- "__meta_scaleway_instance_private_ipv4": "10.70.60.57",
- "__meta_scaleway_instance_project_id": "cb334986-b054-4725-9d5a-30850fdc6015",
- "__meta_scaleway_instance_public_ipv6": "2001:bc8:630:1e1c::1",
- "__meta_scaleway_instance_status": "running",
- "__meta_scaleway_instance_type": "DEV1-S",
- "__meta_scaleway_instance_zone": "fr-par-1",
+ "__address__": "10.70.60.57:80",
+ "__meta_scaleway_instance_boot_type": "local",
+ "__meta_scaleway_instance_hostname": "scw-nervous-shirley",
+ "__meta_scaleway_instance_id": "93c18a61-b681-49d0-a1cc-62b43883ae89",
+ "__meta_scaleway_instance_image_arch": "x86_64",
+ "__meta_scaleway_instance_image_id": "45a86b35-eca6-4055-9b34-ca69845da146",
+ "__meta_scaleway_instance_image_name": "Ubuntu 18.04 Bionic Beaver",
+ "__meta_scaleway_instance_location_cluster_id": "40",
+ "__meta_scaleway_instance_location_hypervisor_id": "1601",
+ "__meta_scaleway_instance_location_node_id": "29",
+ "__meta_scaleway_instance_name": "scw-nervous-shirley",
+ "__meta_scaleway_instance_organization": "cb334986-b054-4725-9d3a-40850fdc6015",
+ "__meta_scaleway_instance_private_ipv4": "10.70.60.57",
+ "__meta_scaleway_instance_project_id": "cb334986-b054-4725-9d5a-30850fdc6015",
+ "__meta_scaleway_instance_public_ipv6": "2001:bc8:630:1e1c::1",
+ "__meta_scaleway_instance_region": "fr-par",
+ "__meta_scaleway_instance_security_group_id": "a6a794b7-c05b-4b20-b9fe-e17a9bb85cf0",
+ "__meta_scaleway_instance_security_group_name": "Default security group",
+ "__meta_scaleway_instance_status": "running",
+ "__meta_scaleway_instance_type": "DEV1-S",
+ "__meta_scaleway_instance_zone": "fr-par-1",
},
{
- "__address__": "10.193.162.9:80",
- "__meta_scaleway_instance_id": "5b6198b4-c677-41b5-9c05-04557264ae1f",
- "__meta_scaleway_instance_image_name": "Debian Buster",
- "__meta_scaleway_instance_name": "scw-quizzical-feistel",
- "__meta_scaleway_instance_private_ipv4": "10.193.162.9",
- "__meta_scaleway_instance_project_id": "cb334986-b054-4725-9d5a-30850fdc6015",
- "__meta_scaleway_instance_public_ipv4": "151.115.45.127",
- "__meta_scaleway_instance_public_ipv6": "2001:bc8:1e00:6204::1",
- "__meta_scaleway_instance_status": "running",
- "__meta_scaleway_instance_type": "DEV1-S",
- "__meta_scaleway_instance_zone": "fr-par-1",
+ "__address__": "10.193.162.9:80",
+ "__meta_scaleway_instance_boot_type": "local",
+ "__meta_scaleway_instance_hostname": "scw-quizzical-feistel",
+ "__meta_scaleway_instance_id": "5b6198b4-c677-41b5-9c05-04557264ae1f",
+ "__meta_scaleway_instance_image_arch": "x86_64",
+ "__meta_scaleway_instance_image_id": "71733b74-260f-4d0d-8f18-f37dcfa56d6f",
+ "__meta_scaleway_instance_image_name": "Debian Buster",
+ "__meta_scaleway_instance_location_cluster_id": "4",
+ "__meta_scaleway_instance_location_hypervisor_id": "201",
+ "__meta_scaleway_instance_location_node_id": "5",
+ "__meta_scaleway_instance_name": "scw-quizzical-feistel",
+ "__meta_scaleway_instance_organization": "cb334986-b054-4725-9d3a-40850fdc6015",
+ "__meta_scaleway_instance_private_ipv4": "10.193.162.9",
+ "__meta_scaleway_instance_project_id": "cb334986-b054-4725-9d5a-30850fdc6015",
+ "__meta_scaleway_instance_public_ipv4": "151.115.45.127",
+ "__meta_scaleway_instance_public_ipv6": "2001:bc8:1e00:6204::1",
+ "__meta_scaleway_instance_region": "fr-par",
+ "__meta_scaleway_instance_security_group_id": "d35dd210-8392-44dc-8854-121e419a0f56",
+ "__meta_scaleway_instance_security_group_name": "Default security group",
+ "__meta_scaleway_instance_status": "running",
+ "__meta_scaleway_instance_type": "DEV1-S",
+ "__meta_scaleway_instance_zone": "fr-par-1",
},
} {
t.Run(fmt.Sprintf("item %d", i), func(t *testing.T) {
diff --git a/docs/configuration/configuration.md b/docs/configuration/configuration.md
index 8f5073d31..30acedc85 100644
--- a/docs/configuration/configuration.md
+++ b/docs/configuration/configuration.md
@@ -1535,17 +1535,29 @@ The following meta labels are available on targets during [relabeling](#relabel_
#### Instance role
-* `__meta_scaleway_instance_id`: the id of the instance
-* `__meta_scaleway_instance_private_ipv4`: the private ipv4 address of the instance
-* `__meta_scaleway_instance_public_ipv4`: the public ipv4 address of the instance
-* `__meta_scaleway_instance_public_ipv6`: the public ipv6 address of the instance
-* `__meta_scaleway_instance_image_name`: name of the server image
+
+* `__meta_scaleway_instance_boot_type`: the boot type of the server
+* `__meta_scaleway_instance_hostname`: the hostname of the server
+* `__meta_scaleway_instance_id`: the ID of the server
+* `__meta_scaleway_instance_image_arch`: the arch of the server image
+* `__meta_scaleway_instance_image_id`: the ID of the server image
+* `__meta_scaleway_instance_image_name`: the name of the server image
+* `__meta_scaleway_instance_location_cluster_id`: the cluster ID of the server location
+* `__meta_scaleway_instance_location_hypervisor_id`: the hypervisor ID of the server location
+* `__meta_scaleway_instance_location_node_id`: the node ID of the server location
* `__meta_scaleway_instance_name`: name of the server
+* `__meta_scaleway_instance_organization`: the organization of the server
+* `__meta_scaleway_instance_private_ipv4`: the private IPv4 address of the server
* `__meta_scaleway_instance_project_id`: project id of the server
+* `__meta_scaleway_instance_public_ipv4`: the public IPv4 address of the server
+* `__meta_scaleway_instance_public_ipv6`: the public IPv6 address of the server
+* `__meta_scaleway_instance_region`: the region of the server
+* `__meta_scaleway_instance_security_group_id`: the ID of the security group of the server
+* `__meta_scaleway_instance_security_group_name`: the name of the security group of the server
* `__meta_scaleway_instance_status`: status of the server
-* `__meta_scaleway_instance_tags`: the list of tags of the target joined by the tag separator
+* `__meta_scaleway_instance_tags`: the list of tags of the server joined by the tag separator
* `__meta_scaleway_instance_type`: commercial type of the server
-* `__meta_scaleway_instance_zone`: zone of the instance (ex: `fr-par-1`, complete list on )
+* `__meta_scaleway_instance_zone`: the zone of the server (ex: `fr-par-1`, complete list [here](https://developers.scaleway.com/en/products/instance/api/#introduction))
This role uses the private IPv4 address by default. This can be
changed with relabelling, as demonstrated in [the Prometheus scaleway-sd
@@ -1553,18 +1565,17 @@ configuration file](/documentation/examples/prometheus-scaleway.yml).
#### Baremetal role
-* `__meta_scaleway_baremetal_id`: the id of the server
-* `__meta_scaleway_baremetal_public_ipv4`: the public ipv4 address of the server
-* `__meta_scaleway_baremetal_public_ipv6`: the public ipv6 address of the server
-* `__meta_scaleway_baremetal_ipaddress_order`: zero-based order of the address in the server
-* `__meta_scaleway_baremetal_name`: name of the server
-* `__meta_scaleway_baremetal_os_name`: name of the os used
-* `__meta_scaleway_baremetal_os_version`: version of the os used
-* `__meta_scaleway_baremetal_project_id`: project id of the server
-* `__meta_scaleway_baremetal_status`: status of the server
-* `__meta_scaleway_baremetal_tags`: tag list of the server
-* `__meta_scaleway_baremetal_type`: commercial type of the server
-* `__meta_scaleway_baremetal_zone`: zone of the server (ex: `fr-par-1`, complete list on )
+* `__meta_scaleway_baremetal_id`: the ID of the server
+* `__meta_scaleway_baremetal_public_ipv4`: the public IPv4 address of the server
+* `__meta_scaleway_baremetal_public_ipv6`: the public IPv6 address of the server
+* `__meta_scaleway_baremetal_name`: the name of the server
+* `__meta_scaleway_baremetal_os_name`: the name of the operating system of the server
+* `__meta_scaleway_baremetal_os_version`: the version of the operating system of the server
+* `__meta_scaleway_baremetal_project_id`: the project ID of the server
+* `__meta_scaleway_baremetal_status`: the status of the server
+* `__meta_scaleway_baremetal_tags`: the list of tags of the server joined by the tag separator
+* `__meta_scaleway_baremetal_type`: the commercial type of the server
+* `__meta_scaleway_baremetal_zone`: the zone of the server (ex: `fr-par-1`, complete list [here](https://developers.scaleway.com/en/products/instance/api/#introduction))
This role uses the public IPv4 address by default. This can be
changed with relabelling, as demonstrated in [the Prometheus scaleway-sd