A Prometheus exporter for BOSH metrics. Please refer to the FAQ for general questions about this exporter.
Download the already existing binaries for your platform:
$ ./bosh_exporter <flags>
Using the standard go install
(you must have Go already installed in your local machine):
$ go install github.com/cloudfoundry/bosh_exporter
$ bosh_exporter <flags>
To run the bosh exporter as a Docker container, run:
$ docker run -p 9190:9190 boshprometheus/bosh-exporter <flags>
The exporter can be deployed to an already existing Cloud Foundry environment:
$ git clone https://github.com/cloudfoundry/bosh_exporter.git
$ cd bosh_exporter
Modify the included application manifest file to include your BOSH properties. Then you can push the exporter to your Cloud Foundry environment:
$ cf push
This exporter can be deployed using the Prometheus BOSH Release.
Flag / Environment Variable | Required | Default | Description |
---|---|---|---|
bosh.url BOSH_EXPORTER_BOSH_URL |
Yes | BOSH URL | |
bosh.username BOSH_EXPORTER_BOSH_USERNAME |
[1] | BOSH Username | |
bosh.password BOSH_EXPORTER_BOSH_PASSWORD |
[1] | BOSH Password | |
bosh.uaa.client-id BOSH_EXPORTER_BOSH_UAA_CLIENT_ID |
[1] | BOSH UAA Client ID | |
bosh.uaa.client-secret BOSH_EXPORTER_BOSH_UAA_CLIENT_SECRET |
[1] | BOSH UAA Client Secret | |
bosh.log-level BOSH_EXPORTER_BOSH_LOG_LEVEL |
No | ERROR |
BOSH Log Level (DEBUG , INFO , WARN , ERROR , NONE ) |
bosh.ca-cert-file BOSH_EXPORTER_BOSH_CA_CERT_FILE |
Yes | BOSH CA Certificate file | |
filter.deployments BOSH_EXPORTER_FILTER_DEPLOYMENTS |
No | Comma separated deployments to filter | |
filter.azs BOSH_EXPORTER_FILTER_AZS |
No | Comma separated AZs to filter | |
filter.collectors BOSH_EXPORTER_FILTER_COLLECTORS |
No | Comma separated collectors to filter. If not set, all collectors will be enabled (Deployments , Jobs , ServiceDiscovery ) |
|
filter.cidrs BOSH_EXPORTER_FILTER_CIDRS |
No | 0.0.0.0/0 |
Comma separated CIDR to filter instance IPs |
metrics.namespace BOSH_EXPORTER_METRICS_NAMESPACE |
No | bosh |
Metrics Namespace |
metrics.environment BOSH_EXPORTER_METRICS_ENVIRONMENT |
Yes | Environment label to be attached to metrics | |
sd.filename BOSH_EXPORTER_SD_FILENAME |
No | bosh_target_groups.json |
Full path to the Service Discovery output file |
sd.processes_regexp BOSH_EXPORTER_SD_PROCESSES_REGEXP |
No | Regexp to filter Service Discovery processes names | |
web.listen-address BOSH_EXPORTER_WEB_LISTEN_ADDRESS |
No | :9190 |
Address to listen on for web interface and telemetry |
web.telemetry-path BOSH_EXPORTER_WEB_TELEMETRY_PATH |
No | /metrics |
Path under which to expose Prometheus metrics |
web.auth.username BOSH_EXPORTER_WEB_AUTH_USERNAME |
No | Username for web interface basic auth | |
web.auth.password BOSH_EXPORTER_WEB_AUTH_PASSWORD |
No | Password for web interface basic auth | |
web.tls.cert_file BOSH_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_file BOSH_EXPORTER_WEB_TLS_KEYFILE |
No | Path to a file that contains the TLS private key (PEM format) |
[1] When BOSH delegates user managament to UAA, either bosh.username
and bosh.password
or bosh.uaa.client-id
and bosh.uaa.client-secret
flags may be used; otherwise bosh.username
and bosh.password
will be required. When using UAA and the bosh.username
and bosh.password
authentication method, tokens
are not refreshed, so after a period of time the exporter will be unable to communicate with the BOSH API, so use this
method only when testing the exporter. For production, it is recommended to use the bosh.uaa.client-id
and bosh.uaa.client-secret
authentication method.
The exporter returns the following metrics:
Metric | Description | Labels |
---|---|---|
metrics.namespace_scrapes_total | Total number of times BOSH was scraped for metrics | environment , bosh_name , bosh_uuid |
metrics.namespace_scrape_errors_total | Total number of times an error occured scraping BOSH | environment , bosh_name , bosh_uuid |
metrics.namespace_last_scrape_error | Whether the last scrape of metrics from BOSH resulted in an error (1 for error, 0 for success) |
environment , bosh_name , bosh_uuid |
metrics.namespace_last_scrape_timestamp | Number of seconds since 1970 since last scrape from BOSH | environment , bosh_name , bosh_uuid |
metrics.namespace_last_scrape_duration_seconds | Duration of the last scrape from BOSH | environment , bosh_name , bosh_uuid |
The exporter returns the following Deployments
metrics:
Metric | Description | Labels |
---|---|---|
metrics.namespace_deployment_release_info | Labeled BOSH Deployment Release Info with a constant 1 value |
environment , bosh_name , bosh_uuid , bosh_deployment , bosh_release_name , bosh_release_version |
metrics.namespace_deployment_release_job_info | Labeled BOSH Deployment Release Job Info with a constant 1 value |
environment , bosh_name , bosh_uuid , bosh_deployment , bosh_release_name , bosh_release_version , bosh_release_job_name |
metrics.namespace_deployment_release_package_info | Labeled BOSH Deployment Release Package Info with a constant 1 value |
environment , bosh_name , bosh_uuid , bosh_deployment , bosh_release_name , bosh_release_version , bosh_release_package_name |
metrics.namespace_deployment_stemcell_info | Labeled BOSH Deployment Stemcell Info with a constant 1 value |
environment , bosh_name , bosh_uuid , bosh_deployment , bosh_stemcell_name , bosh_stemcell_version , bosh_stemcell_os_name |
metrics.namespace_deployment_instances | Number of instances in the deployment | environment , bosh_name , bosh_uuid , bosh_deployment , bosh_vm_type |
metrics.namespace_last_deployments_scrape_timestamp | Number of seconds since 1970 since last scrape of Deployments metrics from BOSH | environment , bosh_name , bosh_uuid |
metrics.namespace_last_deployments_scrape_duration_seconds | Duration of the last scrape of Deployments metrics from BOSH | environment , bosh_name , bosh_uuid |
The exporter returns the following Jobs
metrics:
Metric | Description | Labels |
---|---|---|
metrics.namespace_job_healthy | BOSH Job Healthy (1 for healthy, 0 for unhealthy) | environment , bosh_name , bosh_uuid , bosh_deployment , bosh_job_name , bosh_job_id , bosh_job_index , bosh_job_az , bosh_job_ip |
metrics.namespace_job_load_avg01 | BOSH Job Load avg01 | environment , bosh_name , bosh_uuid , bosh_deployment , bosh_job_name , bosh_job_id , bosh_job_index , bosh_job_az , bosh_job_ip |
metrics.namespace_job_load_avg05 | BOSH Job Load avg05 | environment , bosh_name , bosh_uuid , bosh_deployment , bosh_job_name , bosh_job_id , bosh_job_index , bosh_job_az , bosh_job_ip |
metrics.namespace_job_load_avg15 | BOSH Job Load avg15 | environment , bosh_name , bosh_uuid , bosh_deployment , bosh_job_name , bosh_job_id , bosh_job_index , bosh_job_az , bosh_job_ip |
metrics.namespace_job_cpu_sys | BOSH Job CPU System | environment , bosh_name , bosh_uuid , bosh_deployment , bosh_job_name , bosh_job_id , bosh_job_index , bosh_job_az , bosh_job_ip |
metrics.namespace_job_cpu_user | BOSH Job CPU User | environment , bosh_name , bosh_uuid , bosh_deployment , bosh_job_name , bosh_job_id , bosh_job_index , bosh_job_az , bosh_job_ip |
metrics.namespace_job_cpu_wait | BOSH Job CPU Wait | environment , bosh_name , bosh_uuid , bosh_deployment , bosh_job_name , bosh_job_id , bosh_job_index , bosh_job_az , bosh_job_ip |
metrics.namespace_job_mem_kb | BOSH Job Memory KB | environment , bosh_name , bosh_uuid , bosh_deployment , bosh_job_name , bosh_job_id , bosh_job_index , bosh_job_az , bosh_job_ip |
metrics.namespace_job_mem_percent | BOSH Job Memory Percent | environment , bosh_name , bosh_uuid , bosh_deployment , bosh_job_name , bosh_job_id , bosh_job_index , bosh_job_az , bosh_job_ip |
metrics.namespace_job_swap_kb | BOSH Job Swap KB | environment , bosh_name , bosh_uuid , bosh_deployment , bosh_job_name , bosh_job_id , bosh_job_index , bosh_job_az , bosh_job_ip |
metrics.namespace_job_swap_percent | BOSH Job Swap Percent | environment , bosh_name , bosh_uuid , bosh_deployment , bosh_job_name , bosh_job_id , bosh_job_index , bosh_job_az , bosh_job_ip |
metrics.namespace_job_system_disk_inode_percent | BOSH Job System Disk Inode Percent | environment , bosh_name , bosh_uuid , bosh_deployment , bosh_job_name , bosh_job_id , bosh_job_index , bosh_job_az , bosh_job_ip |
metrics.namespace_job_system_disk_percent | BOSH Job System Disk Percent | environment , bosh_name , bosh_uuid , bosh_deployment , bosh_job_name , bosh_job_id , bosh_job_index , bosh_job_az , bosh_job_ip |
metrics.namespace_job_ephemeral_disk_inode_percent | BOSH Job Ephemeral Disk Inode Percent | environment , bosh_name , bosh_uuid , bosh_deployment , bosh_job_name , bosh_job_id , bosh_job_index , bosh_job_az , bosh_job_ip |
metrics.namespace_job_ephemeral_disk_percent | BOSH Job Ephemeral Disk Percent | environment , bosh_name , bosh_uuid , bosh_deployment , bosh_job_name , bosh_job_id , bosh_job_index , bosh_job_az , bosh_job_ip |
metrics.namespace_job_persistent_disk_inode_percent | BOSH Job Persistent Disk Inode Percent | environment , bosh_name , bosh_uuid , bosh_deployment , bosh_job_name , bosh_job_id , bosh_job_index , bosh_job_az , bosh_job_ip |
metrics.namespace_job_persistent_disk_percent | BOSH Job Persistent Disk Percent | environment , bosh_name , bosh_uuid , bosh_deployment , bosh_job_name , bosh_job_id , bosh_job_index , bosh_job_az , bosh_job_ip |
metrics.namespace_job_process_info | BOSH Job Process Info with a constant '1' value. Release can be found only if process name is the same as release job name. | environment , bosh_name , bosh_uuid , bosh_deployment , bosh_job_name , bosh_job_id , bosh_job_index , bosh_job_az , bosh_job_ip , bosh_job_process_name , bosh_job_process_release_name , bosh_job_process_release_version |
metrics.namespace_job_process_healthy | BOSH Job Process Healthy (1 for healthy, 0 for unhealthy) | environment , bosh_name , bosh_uuid , bosh_deployment , bosh_job_name , bosh_job_id , bosh_job_index , bosh_job_az , bosh_job_ip , bosh_job_process_name |
metrics.namespace_job_process_uptime_seconds | BOSH Job Process Uptime in seconds | environment , bosh_name , bosh_uuid , bosh_deployment , bosh_job_name , bosh_job_id , bosh_job_index , bosh_job_az , bosh_job_ip , bosh_job_process_name |
metrics.namespace_job_process_cpu_total | BOSH Job Process CPU Total | environment , bosh_name , bosh_uuid , bosh_deployment , bosh_job_name , bosh_job_id , bosh_job_index , bosh_job_az , bosh_job_ip , bosh_job_process_name |
metrics.namespace_job_process_mem_kb | BOSH Job Process Memory KB | environment , bosh_name , bosh_uuid , bosh_deployment , bosh_job_name , bosh_job_id , bosh_job_index , bosh_job_az , bosh_job_ip , bosh_job_process_name |
metrics.namespace_job_process_mem_percent | BOSH Job Process Memory Percent | environment , bosh_name , bosh_uuid , bosh_deployment , bosh_job_name , bosh_job_id , bosh_job_index , bosh_job_az , bosh_job_ip , bosh_job_process_name |
metrics.namespace_last_jobs_scrape_timestamp | Number of seconds since 1970 since last scrape of Job metrics from BOSH | environment , bosh_name , bosh_uuid |
metrics.namespace_last_jobs_scrape_duration_seconds | Duration of the last scrape of Job metrics from BOSH | environment , bosh_name , bosh_uuid |
The exporter returns the following ServiceDiscovery
metrics:
Metric | Description | Labels |
---|---|---|
metrics.namespace_last_service_discovery_scrape_timestamp | Number of seconds since 1970 since last scrape of Service Discovery from BOSH | environment , bosh_name , bosh_uuid |
metrics.namespace_last_service_discovery_scrape_duration_seconds | Duration of the last scrape of Service Discovery from BOSH | environment , bosh_name , bosh_uuid |
If the ServiceDiscovery
collector is enabled, the exporter will write a json
file at the sd.filename
location
containing a list of static configs that can be used with the Prometheus file-based service discovery
mechanism:
[
{
"targets": [
"10.244.0.12"
],
"labels": {
"__meta_bosh_job_process_name": "bosh_exporter"
}
},
{
"targets": [
"10.244.0.11",
"10.244.0.12",
"10.244.0.13",
"10.244.0.14"
],
"labels": {
"__meta_bosh_deployment": "deployment1",
"__meta_bosh_deployment_releases": "exporters_release:1.0,other_release:0.2",
"__meta_bosh_job_process_name": "node_exporter",
"__meta_bosh_job_process_release":"exporters_release:1.0"
}
}
]
[!NOTE]
__meta_bosh_job_process_release
has the same value as the labels: bosh_job_process_release_name
:bosh_job_process_release_version
.
The process release
can be found only if the process name
(label bosh_job_process_name
) is the same as BOSH release job name
.
BOSH release job name
is not the same as the label bosh_job_name
which is the instance group name
(BOSH deployment manifest
).
The list of targets can be filtered using the sd.processes_regexp
flag.
Prometheus file-based service discovery example:
- job_name: node_exporter
metrics_path: /metrics
scheme: http
file_sd_configs:
- files:
- /var/vcap/store/bosh_exporter/bosh_target_groups.json
relabel_configs:
- source_labels: [ __meta_bosh_job_process_name ]
regex: 'node_exporter'
action: keep
- source_labels: [ __meta_bosh_deployment_releases ]
regex: '.*exporters_release:1\..*'
action: keep
Available instance IPs can be filtered using the filter.cidrs
flag.
The first IP that matches a CIDR is used as target. CIDRs are tested in the order specified by the comma-seperated list. The instance is dropped if no IP is included in any of the CIDRs.
Refer to the contributing guidelines.
Apache License 2.0, see LICENSE.