An open API service indexing awesome lists of open source software.

https://github.com/phxql/sonarqube-to-prometheus

Exports SonarQube metrics to Prometheus
https://github.com/phxql/sonarqube-to-prometheus

Last synced: 11 months ago
JSON representation

Exports SonarQube metrics to Prometheus

Awesome Lists containing this project

README

          

# SonarQube to Prometheus

![build](https://github.com/phxql/sonarqube-to-prometheus/workflows/build/badge.svg)

Exports SonarQube metrics to Prometheus.

It scrapes the SonarQube server at a configurable interval and extracts measures for all metrics on all projects on all
branches.

## Running

Download the JAR file from the latest [release](https://github.com/phxql/sonarqube-to-prometheus/releases), install
a [JVM](https://adoptopenjdk.net/), and run this:

```shell
java -XX:+UseSerialGC -Xms16M -Xmx128M -jar sonarqube-to-prometheus-*.jar
```

To quit, press `Ctrl+C`.

By default, it exposes the metrics on `:8080/metrics`. You have to configure at least `sonarqube.token` in the config,
see below.

### Exit codes

* `0`: Everything is fine
* `1`: Unexpected error
* `2`: Config couldn't be loaded

## Configuration

Configuration is loaded from `config.toml` from the current working directory.

Most options have sane defaults, but you must set `sonarqube.token`!

```toml
[server]
hostname = "0.0.0.0" # Address to bind to
port = 8080 # Port to bind to
min_threads = 1 # Minimum http threads
max_threads = 8 # Maximum http threads

[sonarqube]
url = "http://localhost:9000/" # URL to SonarQube
token = "xxxxx" # SonarQube authentication token (My Account / Security)
scrape_interval = "PT1H" # How often should SonarQube be scraped? PT1M is 1 minute, PT1H is 1 hour, etc. See https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/Duration.html#parse(java.lang.CharSequence)

[prometheus]
metrics_path = "/metrics" # URL to publish prometheus metrics

[projects]
include = [] # Project ids to include
exclude = [] # Project ids to exclude

[metrics]
include = [] # Metrics to include
exclude = [] # Metrics to exclude

[branches]
include = [] # Branches to include
exclude = [] # Branches to exclude
```

### Including / excluding

If the include list is non-empty, the project id / metric has to be in the list to be included.

Otherwise the exclude list is checked for the project id / metric.

Example:

```toml
[projects]
include = ["your.project:id"]
exclude = []
```

Only the project `your.project:id` will be scraped from SonarQube, all others are ignored.

Another example:

```toml
[projects]
include = []
exclude = ["your.project:id"]
```

All projects will be scraped, except the project `your.project:id`.

## Metric mapping

### Levels

The metric type `LEVEL` is mapped as follows:

* `OK` -> 0.0
* `WARN` -> 1.0
* `ERROR` -> 2.0

## FAQ

### How do I get a SonarQube token?

Log in into your SonarQube instance and click your user icon in the top right corner. Select "My Account", switch to the
"Security" tab and generate a new token.

## Changelog

[See here](CHANGELOG.md)

## License

[AGPLv3](https://www.gnu.org/licenses/agpl-3.0.txt)