Prometheus
Prometheus is an open-source software application used for event monitoring and alerting. It records real-time metrics in a time series database built using an HTTP pull model, with flexible query language and real-time alerting.
Prometheus parameters and supported features in Nobl9
- General support:
- Release channel: Stable, Beta
- Connection method: Agent
- Replay and SLI Analyzer: Historical data limit 30 days
- Event logs: Not supported
- Query checker: Not supported
- Query parameters retrieval: Supported
- Timestamp cache persistence: Supported
- Query parameters:
- Query interval: 1 min
- Query delay: 0 sec
- Jitter: 15 sec
- Timeout: 30 sec
- Agent details and minimum required versions for supported features:
- Plugin name: n9prometheus
- Query delay environment variable: PROM_QUERY_DELAY
- Replay and SLI Analyzer: 0.65.0
- Query parameters retrieval: 0.73.2
- Timestamp cache persistence: 0.65.0
- Custom HTTP headers: 0.88.0 / 0.83.0-beta
Authentication
Prometheus does not provide an authentication layer, the Nobl9 agent only collects the URL for the Prometheus integration definition. Authentication is up to the user. Operators are expected to run an authenticating reverse proxy in front of their services, such as NGINX using basic auth or an OAuth2 proxy.
URL
Prometheus agent makes requests to Range Queries | Prometheus documentation API endpoint in the form /api/v1/query_range. For example:
GET /api/v1/query_range
POST /api/v1/query_range
Hence, do not include the above API path in the URL. Specify only the base URL for
the Prometheus server. For example, if your Prometheus server is available under <http://prometheus.example.com> and you access API via <http://prometheus.example.com/api/v1>, use only <http://prometheus.example.com>.
Other APIs or Web UIs have similar path endings, which should also be omitted, for example, the /graph part of the path.
The Prometheus integration does not integrate directly with data exposed from services in the Prometheus Format | Prometheus documentation, usually under /metrics path. Do not set the URL to metrics exposed directly from such a service.
Basic authentication
A common approach for basic authentication is to run an authenticating reverse proxy
(such as NGINX with basic_auth) in front of your Prometheus services.
You can configure basic authentication by adding an Authorization request header.
To activate basic_auth for your Prometheus agent, deploy your agent, passing the AUTH_METHOD, USERNAME, and PASSWORD environment variables along with other configuration parameters:
- Kubernetes
- Docker
spec:
template:
spec:
containers:
env:
- name: AUTH_METHOD
value: "basic_auth" # One of: none, sigv4, basic_auth, bearer_token
- name: USERNAME
valueFrom:
secretKeyRef:
key: basic_auth_username
name: agent-prometheus-with-basic-auth
- name: PASSWORD
valueFrom:
secretKeyRef:
key: basic_auth_password
name: agent-prometheus-with-basic-auth
# Available AUTH_METHOD values: none, sigv4, basic_auth, bearer_token
docker run -d --restart on-failure \
--name prometheus-agent \
-e AUTH_METHOD="basic_auth" \
-e USERNAME="REDACTED" \
-e PASSWORD="REDACTED" \
nobl9/agent:latest
Bearer token authentication
You can also authenticate your Nobl9 Prometheus agent using a bearer token.
For this method, deploy your Prometheus agent, passing the AUTH_METHOD and BEARER_TOKEN environment variables.
- Kubernetes
- Docker
spec:
template:
spec:
containers:
- name: prometheus-agent
env:
- name: AUTH_METHOD
value: "bearer_token" # One of: none, sigv4, basic_auth, bearer_token
- name: BEARER_TOKEN
value: "/path/to/token/mount/token-file" # Token file contents will be added as Authorization header
# Available AUTH_METHOD values: none, sigv4, basic_auth, bearer_token
# The token file will be mounted and used for authentication
docker run -d --restart on-failure \
--name prometheus-agent \
-e AUTH_METHOD="bearer_token" \
-e BEARER_TOKEN="/container/path/token-file" \
nobl9/agent:latest
Adding Prometheus as a data source
You can add the Prometheus data source using the agent connection method.
Nobl9 Web
Follow the instructions below to create your Prometheus agent connection:
- Navigate to Integrations > Sources.
- Click
.
- Click the required Source button.
- Choose Agent.
-
Select one of the following Release Channels:
- The
stablechannel is fully tested by the Nobl9 team. It represents the final product; however, this channel does not contain all the new features of abetarelease. Use it to avoid crashes and other limitations. - The
betachannel is under active development. Here, you can check out new features and improvements without the risk of affecting any viable SLOs. Remember that features in this channel can change.
- The
-
Add the URL to connect to your data source (mandatory).
Refer to the Authentication section for more details. -
Set Step to define the metric resolution (mandatory, default:
60seconds).
The Step value must be a positive integer. It controls how many data points Nobl9 retrieves in a single query.- For optimal operation, consider the following recommendations for its value:
- Aim for 15 seconds or more
- Keep it less than or equal to your Prometheus query interval
Minimum agent version requirementThe Step parameter is supported starting from Nobl9 agent versions0.105.0-betaor0.105.0and later.
- Select a Project (mandatory).
Project is a way to organize your Nobl9 resources and manage access to them.
When Project is skipped, Nobl9 uses thedefaultproject. - Enter a Display Name (optional).
Spaces are allowed. - Enter a Name (mandatory).
The name is mandatory and can only contain lowercase, alphanumeric characters, and dashes (for example,my-project-1). Nobl9 duplicates the display name here, transforming it into the supported format, but you can edit the result. - Enter a Description (optional).
Provide extra details about it, its purpose, responsible persons, etc.
Up to 1050 characters. - Specify the Query delay to set a customized delay for queries when pulling the data from the data source.
- The default value in Prometheus integration for Query delay is
0 seconds.
Changing the query delayChanging the query delay can affect your SLI data.
Learn more about query delay and its impact. - The default value in Prometheus integration for Query delay is
- Enter a Maximum Period for Historical Data Retrieval.
- This value defines how far back in the past your data will be retrieved when replaying your SLO based on this data source.
- The maximum period value depends on the data source.
Find the maximum value for your data source. - A greater period can extend the loading time when creating an SLO.
- The value must be a positive integer.
- Enter a Default Period for Historical Data Retrieval.
- It is used by SLOs connected to this data source.
- The value must be a positive integer or
0. - By default, this value is set to 0. When you set it to
>0, you will create SLOs with Replay.
- Click Add Data Source
- Deploy your agent in a Kubernetes cluster or Docker container.
To configure custom HTTP headers for your Nobl9 agent, include them in your agent deployment.
YAML
Create a YAML definition to set up an agent connection with Prometheus. You can use the following example:
apiVersion: n9/v1alpha
kind: Agent
metadata:
name: prometheus
displayName: Prometheus Agent
project: default
annotations:
area: latency
env: prod
region: us
team: sales
spec:
description: Example Prometheus Agent
releaseChannel: stable
prometheus:
url: http://prometheus.prometheus:9090
step: 15
historicalDataRetrieval:
maxDuration:
value: 30
unit: Day
defaultDuration:
value: 15
unit: Day
queryDelay:
value: 1
unit: Second
| Field | Type | Description |
|---|---|---|
queryDelay.unitmandatory | enum | Specifies the unit for the query delay. Possible values: Second | Minute. • Check query delay documentation for default unit of query delay for each source. |
queryDelay.value mandatory | numeric | Specifies the value for the query delay. • Must be a number less than 1440 minutes (24 hours). • Check query delay documentation for default unit of query delay for each source. |
logCollectionEnabledoptional | boolean | Optional. Defaults to false. Set to true if you'd like your direct to collect event logs. Contact us to activate it. |
releaseChannelmandatory | enum | Specifies the release channel. Accepted values: beta | stable. |
| Source-specific fields | ||
prometheus.urlmandatory | string | Base URL to Prometheus server. See authentication section above for more details. |
prometheus.stepmandatory | integer | Defines metrics resolution in seconds. Must be a positive integer, 60 seconds by default. Recommendations: Use a value of at least 15 seconds and less than or equal to your Prometheus query interval. |
| Replay-related fields | ||
historicalDataRetrievaloptional | n/a | Optional structure related to configuration related to Replay. ❗ Use only with supported sources. • If omitted, Nobl9 uses the default values of value: 0 and unit: Day for maxDuration and defaultDuration. |
maxDuration.valueoptional | numeric | Specifies the maximum duration for historical data retrieval. Must be integer ≥ 0. See Replay documentation for values of max duration per data source. |
maxDuration.unitoptional | enum | Specifies the unit for the maximum duration of historical data retrieval. Accepted values: Minute | Hour | Day. |
defaultDuration.valueoptional | numeric | Specifies the default duration for historical data retrieval. Must be integer ≥ 0 and ≤ maxDuration. |
defaultDuration.unitoptional | enum | Specifies the unit for the default duration of historical data retrieval. Accepted values: Minute | Hour | Day. |
To configure custom HTTP headers for your Nobl9 agent, include them in your agent deployment.
Prometheus-compatible solutions support
This section describes how to configure the Nobl9 Prometheus agent to work with various Prometheus-compatible solutions. The solutions provide Prometheus-compatible APIs, allowing the Nobl9 agent to collect metrics.
Cortex
Cortex takes the metrics collected by multiple, separate Prometheus instances and stores them centrally. For deployment, we recommend using the official Helm chart.
According to the Cortex Architecture documentation, Prometheus API is exposed by Nginx at <http://cortex-nginx/prometheus>. Use this address as your Prometheus URL in the agent configuration. For custom endpoints, refer to the API documentation and ensure the agent can access the /api/v1/query_range endpoint.
For multi-tenant deployments using Cortex auth, configure the agent with Kubernetes or Docker, as follows:
env:
- name: PROMETHEUS_X_SCOPE_ORG_ID
value: <X-Scope-OrgID>
docker run -d --restart on-failure \
--name nobl9-agent-nobl9-dev-stable-prometheus \
-e PROMETHEUS_X_SCOPE_ORG_ID="<X-Scope-OrgID>"
Grafana Cloud
Grafana Cloud integrates with Prometheus through the Prometheus HTTP API, making it compatible with the Nobl9 Prometheus agent.
Configuration steps:
-
Set up authentication using the
basic_authproxy. -
Use the
/api/prom/api/v1/query_rangeendpoint for API access. -
Configure your Grafana Source URL by appending
/api/prom/to your host URL:# Example:
# Instead of: http://HOST/
# Use: http://HOST/api/prom/
For configuration details, see the Grafana Cloud documentation.
Thanos
Thanos provides high availability for Prometheus and integrates with the Nobl9 Prometheus agent through its Querier component. Configure your agent using the Querier address as the Prometheus URL.
For detailed setup instructions, refer to the Thanos Components guide.
VictoriaMetrics
VictoriaMetrics provides Prometheus-compatible API endpoints, allowing you to query it using the Prometheus agent. To set up VictoriaMetrics querying:
- Deploy your Prometheus using the bearer token authentication.
- Ensure the VictoriaMetrics URL points to the base endpoint (without
/api/v1/query_range).
- The bearer token file must be accessible to the agent
- The token content will be added as an
Authorizationheader for all requests - For security, mount the token file as a secret in Kubernetes deployments
For additional configuration options, refer to the VictoriaMetrics documentation.