prometheus-community / community

Prometheus & The Ecosystem Community Meeting Information
20 stars 3 forks source link

Adopt prometheus-libvirt-exporter #50

Open frittentheke opened 10 months ago

frittentheke commented 10 months ago

I'd like to propose / offer moving https://github.com/inovex/prometheus-libvirt-exporter to prometheus-community.

Libvirt is likely the most widely used VM hypervisor on Linux. Be it to run some VMs on a single server or managed by orchestrators the likes of OpenStack (Nova), Proxmox or others. There are/were other exporters, namely Tinkoff's which was in turn based on Kumina's. Development of all of them has stalled unfortunately, even though https://github.com/prometheus/prometheus/wiki/Default-port-allocations still links to them and e.g. Debian still creates packages (https://packages.debian.org/sid/prometheus-libvirt-exporter).

Apart from the lack of recent development activity, the most important difference is the used library to communicate with libvirt. While @kumina and @Tinkoff use https://github.com/libvirt/libvirt-go, which is a C-library, the proposed prometheus-libvirt-exporter (https://github.com/inovex/prometheus-libvirt-exporter) uses go-libvirt (https://github.com/digitalocean/go-libvirt) native Golang lib (auto-)created by DigitalOcean. This allows the exporter to be much more portable between libvirt versions and distros. There was even some discussion about refactoring (https://github.com/Tinkoff/libvirt-exporter/issues/25), but those efforts never materialised. Additionally the libvirt-go library is now deprecated and has itself been replaced by https://github.com/libvirt/libvirt-go-module.

At @inovex we have been using the prometheus-libvirt-exporter, initially written by @zhangjianweibj for quite a while for our OpenStack environment. But since June 2021 there have been no more commits or releases. And while the exporter already does have support to extract OpenStack Nova metadata from libvirt domain, some changes that were merged (e.g. exporting OpenStack instance flavorName - https://github.com/inovex/prometheus-libvirt-exporter/commit/28296e36bb8f43212ee47df1d9c4b518f746916f) never made it to a binary release.

There were some forks, the most recent / active likely being https://github.com/Ferlab-Ste-Justine/prometheus-libvirt-exporter/ who started to refactor some things. Unfortunately but there were no efforts to update and maintain the exporter outside of individual installations or to become the new default source for it.

We believe having a common and well maintained libvirt-exporter makes sense and went ahead to clean and modernize the existing code:

We also cleaned up the exported metrics, causing breaking changes in https://github.com/inovex/prometheus-libvirt-exporter/releases/tag/v1.4.0):

All the changes we did are listed here: https://github.com/inovex/prometheus-libvirt-exporter/compare/start_of_fork...v1.4.0

We hope you agree with our reasoning to start yet another fork and that someone from the prometheus-community sponsors this move. Certainly we will continue to contribute to this exporter also under the prometheus-community umbrella.

lukasmrtvy commented 9 months ago

@frittentheke hi, do You plan to release the docker image anytime soon, or is the project waiting for adoption by the prometheus-community? Thanks

frittentheke commented 9 months ago

@lukasmrtvy check out https://github.com/inovex/prometheus-libvirt-exporter/pull/3

The images are not yet shown in the releases, but it 1.4.1 can be fetched from at ghcr.io/inovex/prometheus-libvirt-exporter:1.4.1

cervajs commented 5 months ago

+1 for adoption

bwplotka commented 5 months ago

Nice, I think it makes sense, do we have maintainers for this exporter on prometheus-community? (:

SuperQ commented 5 months ago

Yes, we would need a volunteer from Prometheus Team to sponsor support.

frittentheke commented 5 months ago

@SuperQ @bwplotka we just released 1.5.0 of the exporter, adding a few things and cleaning a few more: https://github.com/inovex/prometheus-libvirt-exporter/releases/tag/v1.5.0

And, in case this was misunderstood, we do not intend to throw this over the fence and run. We are actively using this exporter ourselves and will very likely continue to update and maintain it.

But we are just ONE user and we use it in the context of OpenStack (Nova). There are more metrics and features in libvirt that others might like exported and which we cannot foresee. If you look at the recent release, there are now storage pool metrics. A feature which we don't even use ourselves, but that was asked about on the libvirt-user ML, https://lists.libvirt.org/archives/list/users@lists.libvirt.org/message/7ICKFJHSO5375ZCLF3G4CW5DR3FLCAV6/, a while back.

The intention of making this a prometheus-community "thing" was more to open this up to other contributors and to be honest to also promote this as a good choice for people looking for their libvirt metrics being exported.

raspbeguy commented 4 months ago

I also think submitting an example of grafana dashboard for this exporter would be nice, especially because this one break compatibility with all older libvirt exporter.