A Prometheus exporter for JFrog Artifactory stats.
This exporter is under development and more metrics will be added later. Tested on Artifactory Commercial, Enterprise and OSS version 6.x
and 7.x
.
The Artifactory exporter requires admin user and it supports multiple means of authentication. The following methods are supported:
- Basic Auth
- Bearer Token
Basic auth may be used by setting ARTI_USERNAME
and ARTI_PASSWORD
environment variables.
Artifactory access tokens may be used via the Authorization header by setting ARTI_ACCESS_TOKEN
environment variable.
Download the binary for your operation system from release page and run it:
$ ./artifactory_exporter <flags>
Set the credentials in env_file_name
and you can deploy this exporter using the peimanja/artifactory_exporter Docker image:
$ docker run --env-file=env_file_name -p 9531:9531 peimanja/artifactory_exporter:latest <flags>
Running the exporter against an Artifactory instance with millions of artifacts will cause performance issues in case Prometheus will scrape too often.
To avoid such situations you can run nginx in front of the exporter and use it as a cache. The Artifactory responses will be cached in nginx and kept valid for PROXY_CACHE_VALID
seconds. After that time any new request from Prometheus will re-request metrics from Artifactory and store again in the nginx cache.
Set the credentials in an environment file as described in the Docker section and store the file as .env
next to docker-compose.yml
and run the following command:
docker-compose up -d
Helm must be installed to use the charts. Please refer to Helm's documentation to get started.
Source code for the exporter helm chart can be found here peimanja/helm-charts
Once Helm is set up properly, add the repo as follows:
- Kubernetes 1.8+ with Beta APIs enabled
helm repo add peimanja https://peimanja.github.io/helm-charts
helm repo update
See helm repo for command documentation.
See Customizing the Chart Before Installing. To see all configurable options with detailed comments, visit the chart's values.yaml, or run these configuration commands:
# Helm 3
helm show values peimanja/prometheus-artifactory-exporter
Set your values in myvals.yaml
:
artifactory:
url: http://artifactory:8081/artifactory
accessToken: "xxxxxxxxxxxxxxxxxxxx"
existingSecret: false
options:
logLevel: info
logFormat: logfmt
telemetryPath: /metrics
verifySSL: false
timeout: 5s
optionalMetrics:
- replication_status
- federation_status
# Helm 3
helm install -f myvals.yaml [RELEASE_NAME] peimanja/prometheus-artifactory-exporter
See configuration below.
See helm install for command documentation.
$ docker run peimanja/artifactory_exporter:latest -h
usage: artifactory_exporter [<flags>]
Flags:
-h, --help Show context-sensitive help (also try --help-long and --help-man).
--web.listen-address=":9531"
Address to listen on for web interface and telemetry.
--web.telemetry-path="/metrics"
Path under which to expose metrics.
--artifactory.scrape-uri="http://localhost:8081/artifactory"
URI on which to scrape JFrog Artifactory.
--artifactory.ssl-verify Flag that enables SSL certificate verification for the scrape URI
--artifactory.timeout=5s Timeout for trying to get stats from JFrog Artifactory.
--optional-metric=metric-name ...
optional metric to be enabled. Pass multiple times to enable multiple optional metrics.
--log.level=info Only log messages with the given severity or above. One of: [debug, info, warn, error]
--log.format=logfmt Output format of log messages. One of: [logfmt, json]
--version Show application version.
Flag / Environment Variable | Required | Default | Description |
---|---|---|---|
web.listen-address WEB_LISTEN_ADDR |
No | :9531 |
Address to listen on for web interface and telemetry. |
web.telemetry-path WEB_TELEMETRY_PATH |
No | /metrics |
Path under which to expose metrics. |
artifactory.scrape-uri ARTI_SCRAPE_URI |
No | http://localhost:8081/artifactory |
URI on which to scrape JFrog Artifactory. |
artifactory.ssl-verify ARTI_SSL_VERIFY |
No | true |
Flag that enables SSL certificate verification for the scrape URI. |
artifactory.timeout ARTI_TIMEOUT |
No | 5s |
Timeout for trying to get stats from JFrog Artifactory. |
optional-metric |
No | optional metric to be enabled. Pass multiple times to enable multiple optional metrics. | |
log.level |
No | info |
Only log messages with the given severity or above. One of: [debug, info, warn, error]. |
log.format |
No | logfmt |
Output format of log messages. One of: [logfmt, json]. |
ARTI_USERNAME |
*No | User to access Artifactory | |
ARTI_PASSWORD |
*No | Password of the user accessing the Artifactory | |
ARTI_ACCESS_TOKEN |
*No | Access token for accessing the Artifactory |
- Either
ARTI_USERNAME
andARTI_PASSWORD
orARTI_ACCESS_TOKEN
environment variables has to be set.
Some metrics are not available with Artifactory OSS license. The exporter returns the following metrics:
Metric | Description | Labels | OSS support |
---|---|---|---|
artifactory_up | Was the last scrape of Artifactory successful. | ✅ | |
artifactory_exporter_build_info | Exporter build information. | version , revision , branch , goversion |
✅ |
artifactory_exporter_total_scrapes | Current total artifactory scrapes. | ✅ | |
artifactory_exporter_total_api_errors | Current total Artifactory API errors when scraping for stats. | ✅ | |
artifactory_exporter_json_parse_failures | Number of errors while parsing Json. | ✅ | |
artifactory_replication_enabled | Replication status for an Artifactory repository (1 = enabled). | name , type , cron_exp , status |
|
artifactory_security_groups | Number of Artifactory groups. | ||
artifactory_security_users | Number of Artifactory users for each realm. | realm |
|
artifactory_storage_artifacts | Total artifacts count stored in Artifactory. | ✅ | |
artifactory_storage_artifacts_size_bytes | Total artifacts Size stored in Artifactory in bytes. | ✅ | |
artifactory_storage_binaries | Total binaries count stored in Artifactory. | ✅ | |
artifactory_storage_binaries_size_bytes | Total binaries Size stored in Artifactory in bytes. | ✅ | |
artifactory_storage_filestore_bytes | Total space in the file store in bytes. | storage_dir , storage_type |
✅ |
artifactory_storage_filestore_used_bytes | Space used in the file store in bytes. | storage_dir , storage_type |
✅ |
artifactory_storage_filestore_free_bytes | Space free in the file store in bytes. | storage_dir , storage_type |
✅ |
artifactory_storage_repo_used_bytes | Space used by an Artifactory repository in bytes. | name , package_type , type |
✅ |
artifactory_storage_repo_folders | Number of folders in an Artifactory repository. | name , package_type , type |
✅ |
artifactory_storage_repo_files | Number files in an Artifactory repository. | name , package_type , type |
✅ |
artifactory_storage_repo_items | Number Items in an Artifactory repository. | name , package_type , type |
✅ |
artifactory_artifacts_created_1m | Number of artifacts created in the repo (last 1 minute). | name , package_type , type |
✅ |
artifactory_artifacts_created_5m | Number of artifacts created in the repo (last 5 minutes). | name , package_type , type |
✅ |
artifactory_artifacts_created_15m | Number of artifacts created in the repo (last 15 minutes). | name , package_type , type |
✅ |
artifactory_artifacts_downloaded_1m | Number of artifacts downloaded from the repository (last 1 minute). | name , package_type , type |
✅ |
artifactory_artifacts_downloaded_5m | Number of artifacts downloaded from the repository (last 5 minutes). | name , package_type , type |
✅ |
artifactory_artifacts_downloaded_15m | Number of artifacts downloaded from the repository (last 15 minute). | name , package_type , type |
✅ |
artifactory_system_healthy | Is Artifactory working properly (1 = healthy). | ✅ | |
artifactory_system_license | License type and expiry as labels, seconds to expiration as value | type , licensed_to , expires |
✅ |
artifactory_system_version | Version and revision of Artifactory as labels. | version , revision |
✅ |
artifactory_federation_mirror_lag | Federation mirror lag in milliseconds. | name , remote_url , remote_name |
|
artifactory_federation_unavailable_mirror | Unsynchronized federated mirror status. | status , name , remote_url , remote_name |
- Common labels:
node_id
: Artifactory node ID that the metric is scraped from.
Some metrics are expensive to compute and are disabled by default. To enable them, use --optional-metric=metric_name
flag. Use this with caution as it may impact the performance in Artifactory instances with many repositories.
Supported optional metrics:
artifacts
- Extracts number of artifacts created/downloaded for each repository. Enabling this will addartifactory_artifacts_*
metrics. Please note that on large Artifactory instances, this may impact the performance.replication_status
- Extracts status of replication for each repository which has replication enabled. Enabling this will add thestatus
label toartifactory_replication_enabled
metric.federation_status
- Extracts federation metrics. Enabling this will add two new metrics:artifactory_federation_mirror_lag
, andartifactory_federation_unavailable_mirror
. Please note that these metrics are only available in Artifactory Enterprise Plus and version 7.18.3 and above.open_metrics
- Exposes Open Metrics from the JFrog Platform. For more information about Open Metrics, please refer to JFrog Platform Open Metrics.
Dashboard can be found here.
In most cases enabling debug logs will help to identify the issue. To enable debug logs, use --log.level=debug
flag.
- Check if the exporter is running and listening on the port specified by
--web.listen-address
flag. - Check if
artifactory_up
metric is1
or0
. If it is0
, check the logs for the error message. - Check if
artifactory_exporter_total_api_errors
metric is0
. If it is not0
and it is increasing, check the logs for the error message.
- Check the logs to see if there are any timeouts or errors while scraping for metrics. In a large Artifactory instance, it may take a long time to scrape for all metrics especially
artifactory_artifacts_*
metrics. If there are any errors, try increasing the default timeout(5s) using--artifactory.timeout
flag. - Some metrics are not available based on your version or license type. Check the metrics section to see if the metric is available for your license type.
- Some metrics are optional and are disabled by default. Check the optional metrics section to see available optional metrics. You can enable them using
--optional-metric=metric_name
flag. You can pass this flag multiple times to enable multiple optional metrics.
This error is usually means that the exporter is not able to properly reach the Artifactory endpoint. One of the common reasons for this is that the Artifactory URL is not set properly. Make sure your are not missing /artifactory
at the end of the URL which is how most implementations of Artifactory are configured. (e.g. http://artifactory.yourdomain.com/artifactory
)