mirror of
https://github.com/prometheus/prometheus.git
synced 2024-12-25 05:34:05 -08:00
Merge pull request #13219 from djcode/main
Discovery: Add support for NS records to DNS Discovery
This commit is contained in:
commit
52b15d2195
|
@ -42,6 +42,8 @@ const (
|
||||||
dnsSrvRecordPortLabel = dnsSrvRecordPrefix + "port"
|
dnsSrvRecordPortLabel = dnsSrvRecordPrefix + "port"
|
||||||
dnsMxRecordPrefix = model.MetaLabelPrefix + "dns_mx_record_"
|
dnsMxRecordPrefix = model.MetaLabelPrefix + "dns_mx_record_"
|
||||||
dnsMxRecordTargetLabel = dnsMxRecordPrefix + "target"
|
dnsMxRecordTargetLabel = dnsMxRecordPrefix + "target"
|
||||||
|
dnsNsRecordPrefix = model.MetaLabelPrefix + "dns_ns_record_"
|
||||||
|
dnsNsRecordTargetLabel = dnsNsRecordPrefix + "target"
|
||||||
|
|
||||||
// Constants for instrumentation.
|
// Constants for instrumentation.
|
||||||
namespace = "prometheus"
|
namespace = "prometheus"
|
||||||
|
@ -102,7 +104,7 @@ func (c *SDConfig) UnmarshalYAML(unmarshal func(interface{}) error) error {
|
||||||
}
|
}
|
||||||
switch strings.ToUpper(c.Type) {
|
switch strings.ToUpper(c.Type) {
|
||||||
case "SRV":
|
case "SRV":
|
||||||
case "A", "AAAA", "MX":
|
case "A", "AAAA", "MX", "NS":
|
||||||
if c.Port == 0 {
|
if c.Port == 0 {
|
||||||
return errors.New("a port is required in DNS-SD configs for all record types except SRV")
|
return errors.New("a port is required in DNS-SD configs for all record types except SRV")
|
||||||
}
|
}
|
||||||
|
@ -140,6 +142,8 @@ func NewDiscovery(conf SDConfig, logger log.Logger) *Discovery {
|
||||||
qtype = dns.TypeSRV
|
qtype = dns.TypeSRV
|
||||||
case "MX":
|
case "MX":
|
||||||
qtype = dns.TypeMX
|
qtype = dns.TypeMX
|
||||||
|
case "NS":
|
||||||
|
qtype = dns.TypeNS
|
||||||
}
|
}
|
||||||
d := &Discovery{
|
d := &Discovery{
|
||||||
names: conf.Names,
|
names: conf.Names,
|
||||||
|
@ -199,7 +203,7 @@ func (d *Discovery) refreshOne(ctx context.Context, name string, ch chan<- *targ
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, record := range response.Answer {
|
for _, record := range response.Answer {
|
||||||
var target, dnsSrvRecordTarget, dnsSrvRecordPort, dnsMxRecordTarget model.LabelValue
|
var target, dnsSrvRecordTarget, dnsSrvRecordPort, dnsMxRecordTarget, dnsNsRecordTarget model.LabelValue
|
||||||
|
|
||||||
switch addr := record.(type) {
|
switch addr := record.(type) {
|
||||||
case *dns.SRV:
|
case *dns.SRV:
|
||||||
|
@ -217,6 +221,13 @@ func (d *Discovery) refreshOne(ctx context.Context, name string, ch chan<- *targ
|
||||||
addr.Mx = strings.TrimRight(addr.Mx, ".")
|
addr.Mx = strings.TrimRight(addr.Mx, ".")
|
||||||
|
|
||||||
target = hostPort(addr.Mx, d.port)
|
target = hostPort(addr.Mx, d.port)
|
||||||
|
case *dns.NS:
|
||||||
|
dnsNsRecordTarget = model.LabelValue(addr.Ns)
|
||||||
|
|
||||||
|
// Remove the final dot from rooted DNS names to make them look more usual.
|
||||||
|
addr.Ns = strings.TrimRight(addr.Ns, ".")
|
||||||
|
|
||||||
|
target = hostPort(addr.Ns, d.port)
|
||||||
case *dns.A:
|
case *dns.A:
|
||||||
target = hostPort(addr.A.String(), d.port)
|
target = hostPort(addr.A.String(), d.port)
|
||||||
case *dns.AAAA:
|
case *dns.AAAA:
|
||||||
|
@ -234,6 +245,7 @@ func (d *Discovery) refreshOne(ctx context.Context, name string, ch chan<- *targ
|
||||||
dnsSrvRecordTargetLabel: dnsSrvRecordTarget,
|
dnsSrvRecordTargetLabel: dnsSrvRecordTarget,
|
||||||
dnsSrvRecordPortLabel: dnsSrvRecordPort,
|
dnsSrvRecordPortLabel: dnsSrvRecordPort,
|
||||||
dnsMxRecordTargetLabel: dnsMxRecordTarget,
|
dnsMxRecordTargetLabel: dnsMxRecordTarget,
|
||||||
|
dnsNsRecordTargetLabel: dnsNsRecordTarget,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -81,6 +81,7 @@ func TestDNS(t *testing.T) {
|
||||||
"__meta_dns_srv_record_target": "",
|
"__meta_dns_srv_record_target": "",
|
||||||
"__meta_dns_srv_record_port": "",
|
"__meta_dns_srv_record_port": "",
|
||||||
"__meta_dns_mx_record_target": "",
|
"__meta_dns_mx_record_target": "",
|
||||||
|
"__meta_dns_ns_record_target": "",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -112,6 +113,7 @@ func TestDNS(t *testing.T) {
|
||||||
"__meta_dns_srv_record_target": "",
|
"__meta_dns_srv_record_target": "",
|
||||||
"__meta_dns_srv_record_port": "",
|
"__meta_dns_srv_record_port": "",
|
||||||
"__meta_dns_mx_record_target": "",
|
"__meta_dns_mx_record_target": "",
|
||||||
|
"__meta_dns_ns_record_target": "",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -143,6 +145,7 @@ func TestDNS(t *testing.T) {
|
||||||
"__meta_dns_srv_record_target": "db1.example.com.",
|
"__meta_dns_srv_record_target": "db1.example.com.",
|
||||||
"__meta_dns_srv_record_port": "3306",
|
"__meta_dns_srv_record_port": "3306",
|
||||||
"__meta_dns_mx_record_target": "",
|
"__meta_dns_mx_record_target": "",
|
||||||
|
"__meta_dns_ns_record_target": "",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__address__": "db2.example.com:3306",
|
"__address__": "db2.example.com:3306",
|
||||||
|
@ -150,6 +153,7 @@ func TestDNS(t *testing.T) {
|
||||||
"__meta_dns_srv_record_target": "db2.example.com.",
|
"__meta_dns_srv_record_target": "db2.example.com.",
|
||||||
"__meta_dns_srv_record_port": "3306",
|
"__meta_dns_srv_record_port": "3306",
|
||||||
"__meta_dns_mx_record_target": "",
|
"__meta_dns_mx_record_target": "",
|
||||||
|
"__meta_dns_ns_record_target": "",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -180,6 +184,7 @@ func TestDNS(t *testing.T) {
|
||||||
"__meta_dns_srv_record_target": "db1.example.com.",
|
"__meta_dns_srv_record_target": "db1.example.com.",
|
||||||
"__meta_dns_srv_record_port": "3306",
|
"__meta_dns_srv_record_port": "3306",
|
||||||
"__meta_dns_mx_record_target": "",
|
"__meta_dns_mx_record_target": "",
|
||||||
|
"__meta_dns_ns_record_target": "",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -227,6 +232,7 @@ func TestDNS(t *testing.T) {
|
||||||
"__meta_dns_srv_record_target": "",
|
"__meta_dns_srv_record_target": "",
|
||||||
"__meta_dns_srv_record_port": "",
|
"__meta_dns_srv_record_port": "",
|
||||||
"__meta_dns_mx_record_target": "smtp1.example.com.",
|
"__meta_dns_mx_record_target": "smtp1.example.com.",
|
||||||
|
"__meta_dns_ns_record_target": "",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__address__": "smtp2.example.com:25",
|
"__address__": "smtp2.example.com:25",
|
||||||
|
@ -234,6 +240,7 @@ func TestDNS(t *testing.T) {
|
||||||
"__meta_dns_srv_record_target": "",
|
"__meta_dns_srv_record_target": "",
|
||||||
"__meta_dns_srv_record_port": "",
|
"__meta_dns_srv_record_port": "",
|
||||||
"__meta_dns_mx_record_target": "smtp2.example.com.",
|
"__meta_dns_mx_record_target": "smtp2.example.com.",
|
||||||
|
"__meta_dns_ns_record_target": "",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -1126,7 +1126,7 @@ A DNS-based service discovery configuration allows specifying a set of DNS
|
||||||
domain names which are periodically queried to discover a list of targets. The
|
domain names which are periodically queried to discover a list of targets. The
|
||||||
DNS servers to be contacted are read from `/etc/resolv.conf`.
|
DNS servers to be contacted are read from `/etc/resolv.conf`.
|
||||||
|
|
||||||
This service discovery method only supports basic DNS A, AAAA, MX and SRV
|
This service discovery method only supports basic DNS A, AAAA, MX, NS and SRV
|
||||||
record queries, but not the advanced DNS-SD approach specified in
|
record queries, but not the advanced DNS-SD approach specified in
|
||||||
[RFC6763](https://tools.ietf.org/html/rfc6763).
|
[RFC6763](https://tools.ietf.org/html/rfc6763).
|
||||||
|
|
||||||
|
@ -1136,13 +1136,14 @@ The following meta labels are available on targets during [relabeling](#relabel_
|
||||||
* `__meta_dns_srv_record_target`: the target field of the SRV record
|
* `__meta_dns_srv_record_target`: the target field of the SRV record
|
||||||
* `__meta_dns_srv_record_port`: the port field of the SRV record
|
* `__meta_dns_srv_record_port`: the port field of the SRV record
|
||||||
* `__meta_dns_mx_record_target`: the target field of the MX record
|
* `__meta_dns_mx_record_target`: the target field of the MX record
|
||||||
|
* `__meta_dns_ns_record_target`: the target field of the NS record
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
# A list of DNS domain names to be queried.
|
# A list of DNS domain names to be queried.
|
||||||
names:
|
names:
|
||||||
[ - <string> ]
|
[ - <string> ]
|
||||||
|
|
||||||
# The type of DNS query to perform. One of SRV, A, AAAA or MX.
|
# The type of DNS query to perform. One of SRV, A, AAAA, MX or NS.
|
||||||
[ type: <string> | default = 'SRV' ]
|
[ type: <string> | default = 'SRV' ]
|
||||||
|
|
||||||
# The port number used if the query type is not SRV.
|
# The port number used if the query type is not SRV.
|
||||||
|
|
Loading…
Reference in a new issue