Visit parosly.io for the full documentation, examples and guides.
Table of Contents
This project enhances the native Prometheus HTTP API by providing additional features and addressing its limitations. Running as a sidecar alongside the Prometheus server enables users to extend the capabilities of the API.
One notable limitation of the native Prometheus HTTP API is the inability to programmatically create/delete rules. This project addresses this limitation by offering a solution for rule creation/deletion via the API. By leveraging Parosly, users can overcome the native constraints, gaining the ability to create rules programmatically. This enhances flexibility and automation in monitoring and alerting workflows.
ⓘ The decision to exclude a rule creation feature in the Prometheus API, as discussed in this GitHub issue, prioritizes stability and integrity within the Prometheus ecosystem. Parosly serves as an external solution, seamlessly integrating with existing Prometheus deployments while providing the sought-after rule-creation capability.
The following prerequisites are required to get up and running with this tool:
- Prometheus server's rules directory and configuration file (prometheus.yml) must be shared and accessible
- Prometheus lifecycle API must be enabled to allow requesting the /reload API
Get Parosly up and running in minutes.
In this quick-start guide, you will run Prometheus and Parosly services using Docker Compose and send requests to
the API service. Please refer to this example
guide to get started.
A simple example of recording rules created using an API would be:
curl -i -XPUT 'http://localhost:5000/api/v1/rules/example-record.yml' \
--header 'Content-Type: application/json' \
--data '{
"data": {
"groups": [
{
"name": "ExampleRecordingRule",
"rules": [
{
"record": "code:prometheus_http_requests_total:sum",
"expr": "sum by (code) (prometheus_http_requests_total)"
}
]
}
]
}
}'HTTP/1.1 201 Created
content-length: 66
content-type: application/json
{"status":"success","message":"The rule was created successfully"}
The Parosly, built upon REST API design principles, provides a seamless and efficient way to interact with native Prometheus HTTP API. If you would like to explore its capabilities and learn more about its endpoints, request formats, and response structures, please refer to the comprehensive documentation available here.
usage: python3 main.py [option]
Extended HTTP API service for Prometheus
optional arguments:
-h, --help show this help message and exit
--web.listen-address WEB.LISTEN_ADDRESS
address to listen on for API
--file.prefix FILE.PREFIX
a prefix of filenames generated by the server
--file.extension FILE.EXTENSION
rule files will be created with this suffix
--log.level {debug,info,warning,error}
only log messages with the given severity or above. One of: [debug, info, warning, error]
--web.enable-ui {true,false}
enable web management UI
required parameters:
--rule.path RULE.PATH
Prometheus rules directory path
--config.file CONFIG.FILE
Prometheus configuration file path
--prom.addr PROM.ADDR
URL of Prometheus server, e.g. http://localhost:9090
Grafana dashboard JSON model is available here.

The web user interface is enabled by default but can be disabled using --web.enable-ui=false. It provides a convenient
and flexible way to manage Prometheus configurations, rules, and more.
Hayk Davtyan:
- Email - hayk@parosly.io
- GitHub - hayk96
MIT License, see LICENSE.

