Launching Hercules in a Codespace is the easiest way to get started.
A make run
from inside your codespace will get things spinning.
Hercules generates Prometheus metrics by querying:
- Local files (parquet, json, csv, xlsx, etc)
- Object storage (GCS, S3, Azure Blob)
- HTTP endpoints
- Databases (PostgreSQL, MySQL, SQLite)
- Data lakes (Iceberg, Delta)
- Data warehouses (BigQuery)
- Arrow IPC buffers
Sources can be cached and periodically refreshed, or act as views to the underlying data.
Metrics from multiple sources can be materialized using a single exporter.
Metric definitions are yml
and use sql
in a number of supported dialects to aggregate, enrich, and materialize metric values.
Hercules supports Prometheus gauges, counters, summaries, and histograms.
Sources and metrics can be externally enriched, leading to more thorough, accurate (or is it precise?), properly-labeled metrics.
Integrate, calculate, enrich, and label on the edge.
Metric definitions can be kept DRY using SQL macros.
Macros are useful for:
- Parsing log lines
- Reading useragent strings
- Schematizing unstructured data
- Enriching results with third-party tooling
- Tokenizing attributes
Hercules propagates global labels to all configured metrics. So you don't have to guess where a metric came from.
Labels are propagated from configuration or sourced from environment variables.
Hercules extensions, sources, metrics, and macros can be logically grouped and distributed by the use of packages.
Examples can be found in the hercules-packages directory.
This guide will help you get Hercules up and running on your local machine, including instructions for configuration, testing, and loading sample data.
- Go 1.22+ installed on your system
- Git to clone the repository
- Basic understanding of SQL and Prometheus metrics
-
Clone the repository:
git clone https://github.com/jakthom/hercules.git cd hercules
-
Build the project:
make build
Start Hercules with default settings:
make run
This command starts Hercules with the following defaults:
- Configuration file:
hercules.yml
in the project root - Port: 9999 (customizable in config)
- SQLite database:
h.db
in the project root
To run Hercules with additional debug logging:
make debug
Hercules uses a YAML configuration file. By default, it looks for hercules.yml
in the project root. You can specify a custom configuration path using the environment variable:
HERCULES_CONFIG_PATH=/path/to/config.yml make run
The hercules.yml
configuration file defines your server settings and packages:
version: 1
name: your-instance-name
debug: false
port: 9100
globalLabels:
- env: $ENV # Inject prometheus labels from environment variables
- region: us-west-1
packages:
- package: hercules-packages/sample-package/1.0.yml
Run the test suite to ensure everything is working correctly:
make test
For more detailed test coverage information:
make test-cover-pkg
Hercules includes several example packages in the /hercules-packages/
directory:
-
NYC Taxi Data:
packages: - package: hercules-packages/nyc-taxi/1.0.yml
-
Snowflake Metrics:
packages: - package: hercules-packages/snowflake/1.0.yml
-
TPCH Benchmarks:
packages: - package: hercules-packages/tpch/1.0.yml
-
Bluesky Analytics:
packages: - package: hercules-packages/bluesky/1.0.yml
To use any of these packages, add them to your hercules.yml
file.
Once Hercules is running, metrics are available at:
- http://localhost:9100/metrics (if using default port 9100)
You can connect Prometheus or any compatible metrics collector to this endpoint.
Hercules supports several environment variables:
HERCULES_CONFIG_PATH
: Path to configuration fileDEBUG
: Set to enable debug loggingTRACE
: Set to enable trace loggingENV
: Used for labeling metrics (defaults to current username)
To create your own package:
-
Create a new YAML file in a directory of your choice:
name: my-package version: 1.0 extensions: # SQLite extensions, if needed macros: # SQL macros sources: # Data sources metrics: # Metric definitions
-
Reference your package in the main configuration:
packages: - package: path/to/your-package.yml
- Calculate prometheus-compatible metrics from geospatial data
- Coerce unwieldy files to useful statistics using full-text search
- Use modern pipe sql syntax or prql for defining and transforming your metrics
- You don't need to start queries with
select
.
More to come.