If default_module is set then the exporter will use that when the module
parameter isn't set.
If target is set for a module then the module will use that target,
ignoring the target parameter completely.
The existing implementation consists of a collector that exports
information from a tls.ConnectionState returned by the prober function.
This won't necessarily integrate well with additional probers that
retrieve certs from sources other than a tls handshake (from file, for
instance).
I've made the probing more generically expandable by removing the
collector and instead registering and collecting metrics inside the
prober. This makes it possible to collect the same metrics in a
different way, or collect different metrics depending on the prober.
There are a number of reasons for this change:
- Modules allow a single instance of the exporter to be configured with numerous
different tls configs. Previously you had to run a different exporter for each
combination.
- Adding new and more complicated options to the exporter should be easier with
modules than if I was to go down the route of accepting configuration directly through url params
- I prefer defining a specific prober (https,tcp) over using the URL to guess
what the user wants
Connections were being left around after requests and in some cases this could
result in file descriptor errors when open files built up.
Closing the http response body and the tcp connection, as well as disabling http
keep alives seems to resolve this.
There are some advantages to using a http client over tcp. For instance,
using http allows you to take advatange of a http proxy, which may be necessary
in some environments.
This commit puts the http client back, alongside tcp, and decides which one to use
based on the target address.