drl-exporter

Prometheus exporter for dockerhub rate limits

MIT License

Stars
32

About

Screenshot

Usage

Multi Arch docker images are available (arm64/amd64) you can pull it from dockerhub/github and run in your environment.

Docker

# 
docker pull khaliq/drl-exporter:latest
docker pull ghcr.io/kha7iq/drl-exporter:latest

# ARM 
docker pull ghcr.io/kha7iq/drl-exporter:v2.1.3-arm64
docker pull khaliq/drl-exporter:v2.1.3-arm64

docker run -d -p 2121:2121  khaliq/drl-exporter:latest

curl localhost:2121/metrics

Kubernetes

  1. Add chart repository
helm repo add tektonops http://charts.tektonops.com
helm repo update
  1. Install the chart
helm install drl-exporter tektonops/drl-exporter

Installing the Chart with Username and Password

Customize the chart by setting values at runtime or in the values.yaml file.

To use the exporter with a username and password, ensure enableUserAuth=true is set.

Refer to the chart repository for all configuration options.

helm install drl-exporter tektonops/drl-exporter \
 --set exporter.auth.enabled=true \
 --set exporter.auth.dockerHubUsername=<username> \
 --set exporter.auth.dockerHubPassword=<password>

Output

# HELP dockerhub_limit_max_requests_time Dockerhub rate limit maximum requests total time seconds
# TYPE dockerhub_limit_max_requests_time gauge
dockerhub_limit_max_requests_time 21600{reqsource="10.50.00.0"}
# HELP dockerhub_limit_max_requests_total Dockerhub rate limit maximum requests in given time
# TYPE dockerhub_limit_max_requests_total gauge
dockerhub_limit_max_requests_total 100{reqsource="10.50.00.0"}
# HELP dockerhub_limit_remaining_requests_time Dockerhub rate limit remaining requests time seconds
# TYPE dockerhub_limit_remaining_requests_time gauge
dockerhub_limit_remaining_requests_time 21600{reqsource="10.50.00.0"}
# HELP dockerhub_limit_remaining_requests_total Dockerhub rate limit remaining requests in given time
# TYPE dockerhub_limit_remaining_requests_total gauge
dockerhub_limit_remaining_requests_total 99{reqsource="10.50.00.0"}

Configuration Variables

Variables Default Value Description
EXPORTER_PORT 2121 Server listening port
ENABLE_USER_AUTH false️ Must be set to true if providing username
DOCKERHUB_USER "" Dockerhub account
DOCKERHUB_PASSWORD "" Account password
DOCKERHUB_REPO_IMAGE ratelimitpreview/test custom repository/image
ENABLE_FILE_AUTH false Load auth credentials from docker config fileat /$FILE_AUTH_DIR/config.jsonMust leave auth through ENV empty.
FILE_AUTH_DIR /config Directory where config.json resides
ENABLE_IPV6 false Use IPv6 instead of IPv4 when fetching rate limits
REQUEST_INTERVAL 15 Specify the interval in seconds at which requests should be sent to Dockerhub

Example docker configuration config.json file below. Note that a more extensive configuration can be handled, as long as at least an 'auths' exists for https://index.docker.io/v1/, with a username and password.

{
  "auths": {
    "https://index.docker.io/v1/": {
      "username": "MyUsername",
      "password": "MyPasswordOrToken"
    }
  }
}
  • To build the image in your local environment
git clone https://github.com/kha7iq/drl-exporter.git
cd drl-exporter
make docker

Local Demo

You can find the complete docker-compose file along with a dashboard under deploy folder to test it out.

cd deploy/docker-compose
docker-compose up -d

Web UI

Web URL
Grafana http://localhost:3000
Prometheus http://localhost:9090
Exporter http://localhost:8881

TODO

  • Tests
  • Helm Chart

Issues

Please open an issue if you are facing any problems.

Acknowledgments

This project is inspired by Michael Friedrich's amazing work.

Package Rankings
Top 9.8% on Proxy.golang.org