Skip to main content
To enable monitoring via , you can deploy and configure the conduktor-console-cortex component or use your own compatible monitoring solution (since Console v1.38). We support , Mimir and Prometheus as alternative solutions. This guide focuses on deploying the conduktor-console-cortex component, which is a preconfigured Cortex that includes Prometheus and Alertmanager.

Deploy and configure Cortex

The only required property is CDK_CONSOLE-URL, everything else is related to storage for the metrics. By default, data will be stored in /var/conduktor/monitoring inside the running image. You can mount a volume on this folder to keep metrics data between updates. Alternatively, you can use the storage parameters described below to store the data using either s3, gcs, azure or swift.

Sample configuration

In a Docker Compose it may look like the following:

Configure basic auth for metric scraping

Since Console v1.42.0, you can configure basic auth credentials to protect access to Console metric endpoints. When configured, the Cortex component has to provide these credentials when scraping metrics from the /api/monitoring/metrics and /monitoring/metrics/ endpoints.
Basic auth is optional in Console v1.42.0 and no configuration changes are required for existing deployments.

Enable basic auth on Console

Add these environment variables to Console:
The password has to contain at least 8 characters, including one uppercase letter, one lowercase letter, one number and one special symbol.

Configure Cortex to authenticate

When basic auth is enabled in Console, configure Cortex to authenticate when scraping metrics by adding the same credentials:

Metrics retention

Local storage retention

Without external storage metrics are stored in /var/conduktor/monitoring/data/cortex/tsdb-backend/. Default retention lifecycle:
  • Prometheus creates blocks every 5-30 minutes (PROMETHEUS_BLOCK_DURATION: 5m,30m)
  • Cortex keeps blocks for 3 hours (CORTEX_RETENTION_PERIOD: 3h)
  • Cortex compacts blocks every 30 minutes (CORTEX_COMPACTOR_INTERVAL: 30m)
  • Compacted blocks are deleted 1 hour after compaction (CORTEX_COMPACTOR_DELETION_DELAY: 1h)
  • Cleanup runs every 6 hours (CORTEX_CLEANER_INTERVAL: 6h)
  • Final retention: 30 days (CORTEX_CLEANER_RETENTION: 30d)
All metrics are lost when the container restarts or is recreated. Mount a persistent volume to /var/conduktor/monitoring or use external storage.

External storage retention

With external storage (S3, GCS, Azure, PVC) configured, metrics persist across container restarts. CORTEX_RETENTION_PERIOD (default: 3 hours) controls how long the ingester buffers data locally before flushing it to external storage. CORTEX_COMPACTOR_RETENTION_PERIOD (default: 45 days) controls how long the compactor retains blocks in external storage before deleting them. The CORTEX_CLEANER_* variables are ignored when external storage is configured. Use CORTEX_COMPACTOR_RETENTION_PERIOD to configure how long the compactor keeps blocks in external storage, or configure your storage provider’s lifecycle policy as a fallback. Example: Configure 7-day retention with S3:
For production, external storage is required to avoid data loss. Configure external storage using the storage environment variables in the table above.
Cortex maintains a cache in local storage for every block uploaded to external storage. Without a retention period (CORTEX_COMPACTOR_RETENTION_PERIOD) set, blocks accumulate indefinitely in both local and external storage. This is why it defaults to 45 days. Therefore, do not set this to 0s (disabled) or too high value (e.g. 365d).

Storage sizing

Storage requirements vary based on your cluster count, topic count, scrape interval and retention period. Example: A deployment with 5 clusters and 500 topics using default settings (15s scrape interval) with 30-day retention might use approximately 85 GB. Monitor actual usage to determine your requirements:

Overriding configuration

Overriding with YAML

Cortex

Cortex configuration can be patched by mounting a YAML file to path /opt/override-configs/cortex.yaml. To set an alternative path, use the CORTEX_OVERRIDE_CONFIG_FILE environment variable. Cortex alert manager configuration can also be patched by mounting a YAML file to path /opt/override-configs/alertmanager.yaml. To set an alternative path, use the ALERTMANAGER_OVERRIDE_CONFIG_FILE environment variable. For example, create a file cortex.yaml add in only your overrides:
  1. Mount to /opt/override-configs/cortex.yaml.
  2. Spin up the container.
  3. Exec into the container and confirm the contents, replace 2 with the number of lines of override you wish to see or remove grep to get the whole file: cat /var/conduktor/configs/monitoring-cortex.yaml | grep limits -A2.
You should see a similar entry to the below in the opening logs:

Prometheus

Before Console v1.37.0, Prometheus configuration was overridden using the replace strategy. Since v1.37.0 it’s changed to the patch (YAML merging) strategy.
Prometheus configuration can be also patched by mounting a YAML file to path /opt/override-configs/prometheus.yaml. To set an alternative path, use the PROMETHEUS_OVERRIDE_CONFIG_FILE environment variable. You should see a similar entry to the below in the opening logs:

Overriding with ConfigMap

If you’re deploying Cortex using our Helm charts you may expand the input with a custom ConfigMap for patching configuration such as retention time within Cortex. You can also replace the Prometheus config as described below.
On chart values.yaml :

Monitoring endpoints

Monitoring is designed to be interacted with through the API endpoints by Console (not users). Therefore, ingress isn’t available externally and you shouldn’t set it up because an authentication mechanism doesn’t exist.

Cortex endpoint

/ready on port 9009 If Cortex is running, returns the 200 status with ready.
cURL example

Alertmanager endpoint

/ready on port 9010 If Alertmanager is running, returns the 200 status with ready.
cURL example

Prometheus endpoint

/-/healthy on port 9090 If Prometheus is running, returns the 200 status with Prometheus Server is Healthy..
cURL example

Troubleshoot

No metrics in the monitoring page

Go to http://localhost:9090/targets to see Prometheus scraping target status. If it fails, check that you can query metrics endpoint from conduktor-console-cortex container. You might also have to configure CDK_SCRAPER_SKIPSSLCHECK or CDK_SCRAPER_CAFILE if conduktor-console is configured with TLS termination.

Custom CA certificates for S3-like storage

The CDK_SCRAPER_CAFILE environment variable only configures the CA certificate for the Scraper component (which scrapes metrics from Console). It does not configure the CA certificate for S3-like storage backends.
If you use an S3-compatible service (like MinIO, Ceph or other S3-like services) with custom certificates, you have two options:

Option 1: Disable SSL verification

To skip TLS hostname verification with S3-like services, override the Cortex configuration with YAML by creating a YAML file with these contents:
Mount this file to /opt/override-configs/cortex.yaml (or use the CORTEX_OVERRIDE_CONFIG_FILE environment variable to specify an alternative path).
Disabling SSL verification removes certificate validation and is not recommended for production environments. Use this only for testing or non-production deployments.

Option 2: Contact Conduktor support

For production environments requiring custom CA certificates with S3-compatible storage, contact Conduktor support for guidance on configuring certificate trust for Cortex components.