Skip to content

konradasb/github_exporter

Repository files navigation

Github exporter for Prometheus

main

This is a Github exporter for Prometheus metrics exposed by Github API. Written in Go with pluggable metrics collectors.

Status

Project is highly development, only a limited amount of collectors are implemented, starting from the ones that are needed the most at the time.

Features

  • Pluggable collectors, easy to integrate
  • Rate limit implementation as recommended by Github:
    • Response caching / Response revalidation
    • Conditional requests
    • Burst safeguards
    • Throttling

Usage

For more detailed usage instructions and flags, check out the help (--help) flag.

export GH_PRIVATE_KEY=""
export GH_APP_ID=""
export GH_INS_ID=""

./github_exporter --help
Prometheus exporter for Github metrics.
Written in Go, with love ❤️

Usage:
  exporter [flags]

Flags:
      --host string                Host on which to expose metrics (HOST) (default "0.0.0.0")
      --port string                Port on which to expose metrics (PORT) (default "9042")
      --log-level string           Output log level severity (LOG_LEVEL) (default "debug")
      --web-metrics-path string    Path to HTTP metrics (WEB_METRICS_PATH) (default "/metrics")
      --web-healthz-path string    Path to HTTP healthz (WEB_HEALTHZ_PATH) (default "/healthz")
      --web-version-path string    Path to HTTP version (WEB_VERSION_PATH) (default "/version")
      --gh-organizations strings   List of Github organizations to scrape (GH_ORGANIZATIONS)
      --gh-repositories strings    List of Github repositories to scrape (GH_REPOSITORIES)
      --gh-private-key string      Github App Private Key (required) (GH_PRIVATE_KEY)
      --gh-app-id int              Github App application ID (required) (GH_APP_ID)
      --gh-ins-id int              Github App instalation ID (required) (GH_INS_ID)
  -h, --help                       help for exporter
  -v, --version                    version for exporter

Usage (Docker)

You can run this exporter using a Docker image as well. Example:

docker pull konradasb/github_exporter
docker run -d -p 9024:9024 \
  -e GH_PRIVATE_KEY="" \
  -e GH_APP_ID="" \
  -e GH_INS_ID="" \
  konradasb/github_exporter [<flags>]

Environment variables

These environment variables (or their --flag counterparts) are required:

  • GH_PRIVATE_KEY
  • GH_APP_ID
  • GH_INS_ID

For more information on Github App(s) see here

Configuration

Example Prometheus scrape job configuration:

scrape_configs:
  - job_name: github_exporter
    scrape_interval: 60s
    scrape_timeout: 30s
    static_configs:
      - targets:
        - 127.0.0.1:9024

Adjust scrape_interval and scrape_timeout as needed. It might not be the right values depending on configuration - count of organizations, repositories, cache expiration times and etc.

Collectors

List of collectors, descriptions and wether they are enabled by default

Name Description Enabled
actions collector for Github Actions service true
ratelimit collector for Github ratelimits true

Development

Prerequisites:

  • Go >= 1.17

Building:

git clone https://github.com/konradasb/github_exporter.git
cd github_exporter
make build
./github_exporter --help

Contributing

Pull requests are always welcome. For any major changes, open an issue discussing the changes first before opening a pull request.

Update tests as appropriate.

License

License - MIT