Almost all service discovery can now be disabled, except for DNS-,
HTTP-, and file-based service discovery, which do not appear to include
extra code in the binary.
Before this change, bin/prometheus was about 38M and bin/promtool was
51M. Now, bin/prometheus is about 31M and bin/promtool is about 44M.
Assuming all service discovery is disabled, of course.
I read this hilarious blog post:
https://wejick.wordpress.com/2022/01/29/can-i-have-a-smaller-prometheus/
We can have a smaller Prometheus too. This patch allows users to remove
service discovery for five public clouds (AWS, Azure, DigitalOcean, GCP,
and Linode) and also Kubernetes, simply by setting the corresponding
enable-flag to `false`. I have tested building with each flag as I added
it to the list. I also tested running with all six flags set to `false`,
and the resulting Prometheus can still handle my orthogonal
service-discovery configuration (files).
To meet Adam Savage's definition of science, I measured the size of the
`prometheus` and `promtool` binaries after adding each flag with
`ls -h`.
flag | prometheus | promtool
--------------|------------|----------
starting size | 84M | 74M
AWS | 72M | 61M
Azure | 71M | 61M
GCE | 64M | 53M
k8s | 40M | 53M
DO | 39M | 52M
Linode | 38M | 51M
I did not go as far as the blog post. If folks want, I'll make the rest
of the service discovery optional too.
I did not shrink the build closure, just the output closure; we still
pull all of the various vendored modules into the Nix store during
builds. I don't see how to do this in a neat or easy way.
Prometheus OpenVPN exporter has been broken since OpenVPN 2.5.0 changed
the format of the datetime to ISO8601. After submitting an issue to
upstream, the upstream decided to no longer maintain this exporter.
This also changes the derivation to use buildGoModule instead of the
legacy buildGoPackage and updates the homepage meta URL to point to the
fork we use.