Yea, that's some inconsistency we should fix. I agree, we should allow square brackets everywhere, but only require them if a port is required.
Consistently using https://pkg.go.dev/net#SplitHostPort should help. On Thu, Dec 14, 2023 at 7:01 PM 'Brian Candler' via Prometheus Users < [email protected]> wrote: > I'd like to raise this as a general issue for discussion. I am working > with these: > > blackbox_exporter, version 0.24.0 (branch: HEAD, revision: > 0b0467473916fd9e8526e2635c2a0b1c56011dff) > build user: root@e5bbfcc8184e > build date: 20230516-11:07:25 > go version: go1.20.4 > platform: linux/amd64 > tags: netgo > > snmp_exporter, version 0.25.0 (branch: HEAD, revision: > 9c42d6c874d479314e612bca69558c81f8e26287) > build user: root@880115266f70 > build date: 20231210-10:05:18 > go version: go1.21.5 > platform: linux/amd64 > tags: netgo > > In blackbox_exporter, it's inconsistent whether IPv6 literals need to be > enclosed in square brackets or not. > > - With the icmp prober, IPv6 literals *must not* be enclosed in brackets > AFAICS > - With the dns prober, IPv6 literals *must not* be enclosed in brackets, > unless you also provide a port. e.g. [::1] is invalid, but [::1]:53 is OK, > as far as I can tell > - With the tcp prober, I don't think the port can be omitted anyway; hence > IPv6 literals *must* be enclosed in brackets and followed by :port > > This makes it difficult to write generic code to map a device to a target > plus module, because it depends on what underlying prober the module is > using. > > Looking at the wider Prometheus ecosystem: > > - Prometheus service discovery requires square brackets, because > __address__ is an address:port combination > - snmp_exporter does *not* allow the square brackets in the target address > if it doesn't have a port. Conversely, you can add the square brackets, but > if you do you *must* add a port; it doesn't add :161 automatically. (This > is like the dns prober in blackbox_exporter) > > # curl -vsS > 'localhost:9116/snmp?target=[2001:db8::1]&module=mikrotik&auth=workshop_v3' > error collecting metric Desc{fqName: "snmp_error", help: "Error scraping > target", constLabels: {module="mikrotik"}, variableLabels: {}}: error > connecting to target [2001:db8::1]: error establishing connection to host: > dial udp: address [[2001:db8::1]]:161: missing port in address > > That looks like a straightforward bug to me: it seems to be attempting to > add the :161 port, but is mangling it with an extra set of brackets. > > If that can be fixed (and maybe it's the same issue in dns prober), then > it will be possible to use brackets around IPv6 addresses without ports. > > That leaves the icmp prober in blackbox exporter. I think it should allow > square brackets, if not actually require them (there's no useful concept of > "port" here, it will always send an echo-request). It might be more > consistent to require square brackets > > P.S. I would expect the blackbox_exporter http prober to require square > brackets around IPv6 literals in URLs, but I can't them to work: e.g. > curl -g > 'localhost:9115/probe?target=http:%2f%2f%5b2001:db8::1%5d&module=http_2xx_example' > doesn't make an outbound connection to 2001:db8::1. But quite possibly I'm > doing something wrong. > > -- > You received this message because you are subscribed to the Google Groups > "Prometheus Users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/prometheus-users/433eea9b-2b74-4375-9112-ca671baf84c9n%40googlegroups.com > <https://groups.google.com/d/msgid/prometheus-users/433eea9b-2b74-4375-9112-ca671baf84c9n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "Prometheus Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/prometheus-users/CABbyFmryF8oW%3DQAsdqJoNXbF18X%2Bz58c3MZVFp7RYf7%2BP2Mz_A%40mail.gmail.com.

