A Prometheus exporter that identifies out of date BOSH deployments.
It queries GitHub and fetches available releases of canonical BOSH manifests such as cf-deployment, then conciliates with actual running deployments fetched from BOSH director.
It is also capable of analyzing BOSH manifests in order to extract recommended versions of BOSH releases.
Download the already existing binaries for your platform:
$ ./boshupdate_exporter <flags>To run the boshupdate exporter as a Docker container, run:
$ docker run -p 9362:9362 orangeopensource/boshupdate-exporter <flags>This exporter can be deployed using the BOSH Release: https://github.com/orange-cloudfoundry/boshupdate-boshrelease.
In order to connect to the GitHub API a token must be provided.
The token can be created by following the GitHub HowTo
The exporter identifies the version of a running deployment by extracting the manifest_version.
This key is already built-in some canonical manifests like cf-deployment
but must be manually added in others using the operator set-manifest-version.yml
- type: replace
path: /manifest_version?
value: v((version))The provided sample configuration is a good starting point.
- General structure
bosh:
log_level: <log_level>
url: <url> # url (scheme://host:port) to director endpoint
ca_cert: <path> # path to director CA certificate
client_id: <string> # client id
client_secret: <string> # client secret
proxy: <url> # proxy url, if any.
excludes: list[regexp] # list of bosh deployment to exclude from scrap
github:
token: <string> # your GitHub token here
update_interval: 4h # interval between two GitHub updates
manifest_releases: map[string, manifest] # list of canonical manifests to monitor
generic_releases: map[string, generic] # list of generic GitHub release to monitor- manifest
<name>:
types: *release-types*
format: *release-formatter*
owner: <string> # GitHub project's owner or organization
repo: <string> # GitHub project's name
manifest: <string> # remote path to main BOSH manifest
ops: list[string] # list of remote ops-file paths to apply to main manifest
vars: list[string] # list of remote vars-file paths to apply to main manifest
matchers: list[string] # list of regexp that match running deployments names- release
<name>:
types: *release-types*
format: *release-formatter*
owner: <string> # GitHub project's owner or organization
repo: <string> # GitHub project's name- release-types
# List of objects types to consider as a release.
list[string]
# String must be one or more of the following values:
# - release: GitHub release which is neither in 'draft' nor 'pre' state
# - pre_release: GitHub release in 'pre' state
# - draft_release: GitHub release in 'draft' state
# - tag: GitHub tag
- format
# Format tells how to parse detected release name into a version
format:
match: <regexp> # a regex to match release name
replace: <string> # a replacement for matched release name
# When not provided, the default format value is
# format:
# match: "v([0-9.]+)"
# replace: "${1}"| Flag / Environment Variable | Required | Default | Description |
|---|---|---|---|
configBOSHUPDATE_EXPORTER_CONFIG |
No | config.yml |
Path to configuration file |
metrics.namespaceBOSHUPDATE_EXPORTER_METRICS_NAMESPACE |
No | boshupdate |
Metrics Namespace |
metrics.environmentBOSHUPDATE_EXPORTER_METRICS_ENVIRONMENT |
Yes | environment label to be attached to metrics |
|
web.listen-addressBOSHUPDATE_EXPORTER_WEB_LISTEN_ADDRESS |
No | :9362 |
Address to listen on for web interface and telemetry |
web.telemetry-pathBOSHUPDATE_EXPORTER_WEB_TELEMETRY_PATH |
No | /metrics |
Path under which to expose Prometheus metrics |
web.auth.usernameBOSHUPDATE_EXPORTER_WEB_AUTH_USERNAME |
No | Username for web interface basic auth | |
web.auth.passwordBOSHUPDATE_EXPORTER_WEB_AUTH_PASSWORD |
No | Password for web interface basic auth | |
web.tls.cert_fileBOSHUPDATE_EXPORTER_WEB_TLS_CERTFILE |
No | Path to a file that contains the TLS certificate (PEM format). If the certificate is signed by a certificate authority, the file should be the concatenation of the server's certificate, any intermediates, and the CA's certificate | |
web.tls.key_fileBOSHUPDATE_EXPORTER_WEB_TLS_KEYFILE |
No | Path to a file that contains the TLS private key (PEM format) |
The exporter returns the following metrics:
| Metric | Description | Labels |
|---|---|---|
| metrics.namespace_manifest_release | Seconds from epoch since canonical manifest version if out-of-date, 0 means up-to-date | environment, name, version, owner, repo |
| metrics.namespace_manifest_bosh_release_info | Information about recommended bosh releases used by last available canonical manifest release | environment, manifest_name, owner, repo, boshrelease_name, boshrelease_version, boshrelease_url |
| metrics.namespace_generic_release | Seconds from epoch since repository version is out-of-date, 0 means up-to-date | environment, name, version, owner, repo |
| metrics.namespace_deployment_status | Seconds from epoch since deployment is out-of-date, 0 means up-to-date | environment, name, current, latest |
| metrics.namespace_deployment_bosh_release_status | Seconds from epoch since bosh release is out-of-date, 0 means up-to-date | environment, manifest_name, manifest_current, manifest_latest, boshrelease_name, boshrelease_current, boshrelease_latest |
| metrics.namespace_last_scrape_timestamp | Seconds from epoch since last scrape of metrics from boshupdate | environment |
| metrics.namespace_last_scrape_error | Number of errors in last scrape of metrics | environment |
| metrics.namespace_last_scrape_duration | Duration of the last scrape | environment |
Refer to the contributing guidelines.
Apache License 2.0, see LICENSE.
