10 releases (5 breaking)
Uses new Rust 2024
| 0.6.1 | Sep 15, 2025 |
|---|---|
| 0.5.2 | Sep 10, 2025 |
| 0.5.1 | Nov 23, 2024 |
| 0.5.0 | Nov 12, 2023 |
| 0.2.0 | Dec 31, 2022 |
#100 in HTTP server
447 downloads per month
55KB
1.5K
SLoC
release-exporter
Retrieves release information and exports related metrics.
Metrics
Currently,
only a single core metric upgrades is supported.
upgrades
The metric upgrades
contains information about available upgrades.
This information is represented in the labels.
The metric value itself will be 1.
The metric is configured
with the upgrade_pending_checks configuration key
(see Configuration section below).
The following labels will always exist:
name: the name given in theupgrade_pending_checksconfiguration.statuswith the value being one ofunknown,upgrades-available,up-to-date: indicates whether an upgrade is available.
Additionally,
all labels
of the release provider,
referenced in the current current field of the upgrades_pending_checks configuration,
will be added.
release_exporter_build_info
Provides the release-exporter version as label.
Configuration
The configuration has to be in YAML format. It uses two main keys:
providers(list) to configure a number of release providers that provide information about releases available and in use,upgrade_pending_checks(list) to configure which release versions to compare to determine available upgrades.
An example configuration can be found in sample-conf.yml.
Providers
Each provider must have at least the following two keys:
name(string): a unique name used to refer to this configured provider,provider(enum): the provider type to fetch releases with.
Each provider type has additional required and optional keys.
A provider returns a set of releases where each release has different labels.
command provider
Runs a command to retrieve a version.
Accepts the following configuration keys:
cmd(list of strings): the command and its arguments to run.version_regex(string, default^v?(.*)$): a regular expression to extract the version number from the release tag. Uses the syntax of Rust's regex crate.version_fmt(string, default${1}): an expression to construct the version from the capture groups ofversion_regex.
latest_github_release provider
Retrieves the latest release from a Github repository.
Accepts the following configuration keys:
repo(string): the repository in the formusername/repo.version_regex(string, default^v?(.*)$): a regular expression to extract the version number from the release tag. Uses the syntax of Rust's regex crate.version_fmt(string, default${1}): an expression to construct the version from the capture groups ofversion_regex.api_url(string, default:https://api.github.com): the URL of the Github API.cache_seconds(non-negative integer, default14400= 4h): duration for which to cache the release in memory to not run into Github's rate limiting.
prometheus provider
Retrieves versions from a Prometheus metric label.
query(string): Prometheus query to retrieve the metric with the version. It may return multiple versions with different labels. All labels, except for one given withlabel, will be attached to the release.label(string, default:version): the label containing the version information.version_regex(string, default^v?(.*)$): a regular expression to extract the version number from the version information. Uses the syntax of Rust's regex crate.version_fmt(string, default${1}): an expression to construct the version from the capture groups ofversion_regex.api_url(string, default:http://localhost:9090/api): the URL of the Prometheus API.cache_seconds(non-negative integer, default0): duration for which to cache the release in memory.
upgrade_pending_checks
Configures the check between release versions
to determine available upgrades.
These checks are exported as the upgrades metric.
Each item accepts the following configuration keys:
name(string): name of the check. Will be used as thenamelabel in theupgradesmetric.current(string, default:current_{name}_release): must refer to a provider name. That provider is used to determine the current version in use.latest(string, default:latest_{name}_release): must refer to a provider name. That provider is used to deterimne the latest available version.
Note the handling of labels:
- All labels
obtained from the
currentprovider will be replicated in the output metric. - Each release provided by
currentwill be attempted to match with a release provided bylatest. To be considered matching, all labels of thelatestrelease must be present and have the same value as in thecurrentrelease.
Usage
Usage: release-exporter [OPTIONS] --config.file <CONFIG>
Options:
--config.file <CONFIG>
Configuration file to load
--http.timout <HTTP_TIMEOUT_SECONDS>
Timeout for HTTP requests (seconds) [default: 10]
--web.listen-address <LISTEN_ADDRESS>
Address on which to expose metrics [default: localhost:31343]
-h, --help
Print help information
-V, --version
Print version information
Dependencies
~18–38MB
~528K SLoC