mirror of
https://github.com/prometheus/prometheus.git
synced 2025-03-05 20:59:13 -08:00
Add taggedAddress to the labels in ConsulSD (#5001)
Useful when multiple (tagged) addresses for a node are exposed on the catalog API Ref. https://www.consul.io/api/catalog.html#taggedaddresses Signed-off-by: Samuel Alfageme <samuel@alfage.me>
This commit is contained in:
parent
fbadd88ba5
commit
240321acee
|
@ -55,6 +55,8 @@ const (
|
||||||
servicePortLabel = model.MetaLabelPrefix + "consul_service_port"
|
servicePortLabel = model.MetaLabelPrefix + "consul_service_port"
|
||||||
// datacenterLabel is the name of the label containing the datacenter ID.
|
// datacenterLabel is the name of the label containing the datacenter ID.
|
||||||
datacenterLabel = model.MetaLabelPrefix + "consul_dc"
|
datacenterLabel = model.MetaLabelPrefix + "consul_dc"
|
||||||
|
// 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.
|
// serviceIDLabel is the name of the label containing the service ID.
|
||||||
serviceIDLabel = model.MetaLabelPrefix + "consul_service_id"
|
serviceIDLabel = model.MetaLabelPrefix + "consul_service_id"
|
||||||
|
|
||||||
|
@ -487,7 +489,7 @@ func (srv *consulService) watch(ctx context.Context, ch chan<- []*targetgroup.Gr
|
||||||
var tags = srv.tagSeparator + strings.Join(node.ServiceTags, srv.tagSeparator) + srv.tagSeparator
|
var tags = srv.tagSeparator + strings.Join(node.ServiceTags, srv.tagSeparator) + srv.tagSeparator
|
||||||
|
|
||||||
// If the service address is not empty it should be used instead of the node address
|
// If the service address is not empty it should be used instead of the node address
|
||||||
// since the service may be registered remotely through a different node
|
// since the service may be registered remotely through a different node.
|
||||||
var addr string
|
var addr string
|
||||||
if node.ServiceAddress != "" {
|
if node.ServiceAddress != "" {
|
||||||
addr = net.JoinHostPort(node.ServiceAddress, fmt.Sprintf("%d", node.ServicePort))
|
addr = net.JoinHostPort(node.ServiceAddress, fmt.Sprintf("%d", node.ServicePort))
|
||||||
|
@ -505,18 +507,24 @@ func (srv *consulService) watch(ctx context.Context, ch chan<- []*targetgroup.Gr
|
||||||
serviceIDLabel: model.LabelValue(node.ServiceID),
|
serviceIDLabel: model.LabelValue(node.ServiceID),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add all key/value pairs from the node's metadata as their own labels
|
// Add all key/value pairs from the node's metadata as their own labels.
|
||||||
for k, v := range node.NodeMeta {
|
for k, v := range node.NodeMeta {
|
||||||
name := strutil.SanitizeLabelName(k)
|
name := strutil.SanitizeLabelName(k)
|
||||||
labels[metaDataLabel+model.LabelName(name)] = model.LabelValue(v)
|
labels[metaDataLabel+model.LabelName(name)] = model.LabelValue(v)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add all key/value pairs from the service's metadata as their own labels
|
// Add all key/value pairs from the service's metadata as their own labels.
|
||||||
for k, v := range node.ServiceMeta {
|
for k, v := range node.ServiceMeta {
|
||||||
name := strutil.SanitizeLabelName(k)
|
name := strutil.SanitizeLabelName(k)
|
||||||
labels[serviceMetaDataLabel+model.LabelName(name)] = model.LabelValue(v)
|
labels[serviceMetaDataLabel+model.LabelName(name)] = model.LabelValue(v)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add all key/value pairs from the service's tagged addresses as their own labels.
|
||||||
|
for k, v := range node.TaggedAddresses {
|
||||||
|
name := strutil.SanitizeLabelName(k)
|
||||||
|
labels[taggedAddressesLabel+model.LabelName(name)] = model.LabelValue(v)
|
||||||
|
}
|
||||||
|
|
||||||
tgroup.Targets = append(tgroup.Targets, labels)
|
tgroup.Targets = append(tgroup.Targets, labels)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -87,6 +87,7 @@ const (
|
||||||
"Node": "node1",
|
"Node": "node1",
|
||||||
"Address": "1.1.1.1",
|
"Address": "1.1.1.1",
|
||||||
"Datacenter": "test-dc",
|
"Datacenter": "test-dc",
|
||||||
|
"TaggedAddresses": {"lan":"192.168.10.10","wan":"10.0.10.10"},
|
||||||
"NodeMeta": {"rack_name": "2304"},
|
"NodeMeta": {"rack_name": "2304"},
|
||||||
"ServiceID": "test",
|
"ServiceID": "test",
|
||||||
"ServiceName": "test",
|
"ServiceName": "test",
|
||||||
|
|
|
@ -300,6 +300,7 @@ The following meta labels are available on targets during [relabeling](#relabel_
|
||||||
|
|
||||||
* `__meta_consul_address`: the address of the target
|
* `__meta_consul_address`: the address of the target
|
||||||
* `__meta_consul_dc`: the datacenter name for the target
|
* `__meta_consul_dc`: the datacenter name for the target
|
||||||
|
* `__meta_consul_tagged_address_<key>`: each node tagged address key value of the target
|
||||||
* `__meta_consul_metadata_<key>`: each node metadata key value of the target
|
* `__meta_consul_metadata_<key>`: each node metadata key value of the target
|
||||||
* `__meta_consul_node`: the node name defined for the target
|
* `__meta_consul_node`: the node name defined for the target
|
||||||
* `__meta_consul_service_address`: the service address of the target
|
* `__meta_consul_service_address`: the service address of the target
|
||||||
|
|
Loading…
Reference in a new issue