Prometheus HTTP SD implementation
The Inventor is a Prometheus HTTP SD Server allows users to dynamcially add or remove prometheus targets and labels and expose it to a Prometheus HTTP SD job.
Running the server:
cd src
go run main.go
Installing with Helm
helm repo add inventor https://code-tool.github.io/inventor/
Registering new target:
curl -X PUT -H "x-api-token: secret" http://127.0.0.1:9101/target \
-d '{"static_config": {"targets": ["10.0.10.2:9100",], "labels": {"__meta_datacenter": "dc-01", "__meta_prometheus_job": "node"}, "target_group": "mygroup"}}'
More examples: ./test/end-to-end
Prometheus SD config example
scrape_configs:
- job_name: http_sd
http_sd_configs:
- url: http://127.0.0.1:9101/discover
# if SD_TOKEN env variable is set
headers:
- "x-sd-token: REDACTED"
Prometheus SD config with groups example
scrape_configs:
- job_name: http_sd_mygroup
http_sd_configs:
- url: http://127.0.0.1:9101/group?name=mygroup
# if SD_TOKEN env variable is set
headers:
- "x-sd-token: REDACTED"
REDIS_ADDR
: redis server addres to store metrics and targetsREDIS_PORT
: redis server portREDIS_DBNO
: redis server keyspaceTTL_SECONDS
: ttl for storing target, default is 6h (21600 seconds)API_TOKEN
: API token for manipulating targetsSD_TOKEN
: Options token for Prometheus HTTP SD, is empty by default and not validating (headerx-sd-token
)
- GET /discover
- Returning the list of targets in Prometheus HTTP SD format
- GET /group
- Returning targets by group name
/group?name=mygroup
- Returning targets by group name
- PUT /target
- Adds the new target
- GET /target
- Returning target by ID
- DELETE /target
- Removing target by ID
- GET /metrics
- Metrics in prometheus format
- GET /healthcheck
- Health Check for kubernetes deployments
docker build -t ghcr.io/code-tool/inventor/inventor:$(cat VERSION.txt) --build-arg BUILD_VERSION=$(cat VERSION.txt) -f docker/Dockerfile .
pulling image:
ghcr.io/code-tool/inventor/inventor:0.0.3
Covered under the MIT license.