diff --git a/discovery/consul/consul.go b/discovery/consul/consul.go index 8d0a1fea4..c59bd1f5d 100644 --- a/discovery/consul/consul.go +++ b/discovery/consul/consul.go @@ -60,6 +60,8 @@ const ( datacenterLabel = model.MetaLabelPrefix + "consul_dc" // namespaceLabel is the name of the label containing the namespace (Consul Enterprise only). namespaceLabel = model.MetaLabelPrefix + "consul_namespace" + // partitionLabel is the name of the label containing the Admin Partition (Consul Enterprise only). + partitionLabel = model.MetaLabelPrefix + "consul_partition" // taggedAddressesLabel is the prefix for the labels mapping to a target's tagged addresses. taggedAddressesLabel = model.MetaLabelPrefix + "consul_tagged_address_" // serviceIDLabel is the name of the label containing the service ID. @@ -112,6 +114,7 @@ type SDConfig struct { Token config.Secret `yaml:"token,omitempty"` Datacenter string `yaml:"datacenter,omitempty"` Namespace string `yaml:"namespace,omitempty"` + Partition string `yaml:"partition,omitempty"` TagSeparator string `yaml:"tag_separator,omitempty"` Scheme string `yaml:"scheme,omitempty"` Username string `yaml:"username,omitempty"` @@ -183,6 +186,7 @@ type Discovery struct { client *consul.Client clientDatacenter string clientNamespace string + clientPartition string tagSeparator string watchedServices []string // Set of services which will be discovered. watchedTags []string // Tags used to filter instances of a service. @@ -210,6 +214,7 @@ func NewDiscovery(conf *SDConfig, logger log.Logger) (*Discovery, error) { Scheme: conf.Scheme, Datacenter: conf.Datacenter, Namespace: conf.Namespace, + Partition: conf.Partition, Token: string(conf.Token), HttpClient: wrapper, } @@ -227,6 +232,7 @@ func NewDiscovery(conf *SDConfig, logger log.Logger) (*Discovery, error) { refreshInterval: time.Duration(conf.RefreshInterval), clientDatacenter: conf.Datacenter, clientNamespace: conf.Namespace, + clientPartition: conf.Partition, finalizer: wrapper.CloseIdleConnections, logger: logger, } @@ -547,6 +553,7 @@ func (srv *consulService) watch(ctx context.Context, ch chan<- []*targetgroup.Gr addressLabel: model.LabelValue(serviceNode.Node.Address), nodeLabel: model.LabelValue(serviceNode.Node.Node), namespaceLabel: model.LabelValue(serviceNode.Service.Namespace), + partitionLabel: model.LabelValue(serviceNode.Service.Partition), tagsLabel: model.LabelValue(tags), serviceAddressLabel: model.LabelValue(serviceNode.Service.Address), servicePortLabel: model.LabelValue(strconv.Itoa(serviceNode.Service.Port)), diff --git a/docs/configuration/configuration.md b/docs/configuration/configuration.md index 0b75ace8f..dd6fb33f2 100644 --- a/docs/configuration/configuration.md +++ b/docs/configuration/configuration.md @@ -518,6 +518,7 @@ The following meta labels are available on targets during [relabeling](#relabel_ * `__meta_consul_address`: the address of the target * `__meta_consul_dc`: the datacenter name for the target * `__meta_consul_health`: the health status of the service +* `__meta_consul_partition`: the admin partition name where the service is registered * `__meta_consul_metadata_`: each node metadata key value of the target * `__meta_consul_node`: the node name defined for the target * `__meta_consul_service_address`: the service address of the target @@ -536,6 +537,8 @@ The following meta labels are available on targets during [relabeling](#relabel_ [ datacenter: ] # Namespaces are only supported in Consul Enterprise. [ namespace: ] +# Admin Partitions are only supported in Consul Enterprise. +[ partition: ] [ scheme: | default = "http" ] # The username and password fields are deprecated in favor of the basic_auth configuration. [ username: ]