Skip to content

Prometheus plugin models#

This documentation provides the definition of the different plugins related to Prometheus.

PrometheusDatasource#

Prometheus as a datasource is basically an HTTP server. So we need to define an HTTP config.

kind: "PrometheusDatasource"
spec:
  # It is the url of the datasource.
  # Leave it empty if you don't want to access the datasource directly from the UI.
  # You should define a proxy if you want to access the datasource through the Perses' server.
  directUrl: <url> # Optional

  # It is the http configuration that will be used by the Perses' server to redirect to the datasource any query sent by the UI.
  proxy: <HTTP Proxy specification> # Optional

  scrapeInterval: <duration> # Optional

HTTP Proxy specification#

See common plugin definitions.

Example#

A simple Prometheus datasource would be

kind: "Datasource"
metadata:
  name: "PrometheusDemo"
  project: "perses"
spec:
  default: true
  plugin:
    kind: "PrometheusDatasource"
    spec:
      directUrl: "https://prometheus.demo.do.prometheus.io"

A more complex one:

kind: "Datasource"
metadata:
  name: "PrometheusDemo"
  project: "perses"
spec:
  default: true
  plugin:
    kind: "PrometheusDatasource"
    spec:
      proxy:
        kind: "HTTPProxy"
        spec:
          url: "https://prometheus.demo.do.prometheus.io"
          allowedEndpoints:
            - endpointPattern: "/api/v1/labels"
              method: "POST"
            - endpointPattern: "/api/v1/series"
              method: "POST"
            - endpointPattern: "/api/v1/metadata"
              method: "GET"
            - endpointPattern: "/api/v1/query"
              method: "POST"
            - endpointPattern: "/api/v1/query_range"
              method: "POST"
            - endpointPattern: "/api/v1/label/([a-zA-Z0-9_-]+)/values"
              method: "GET"
          secret: "prometheus_secret_config"

PrometheusTimeSeriesQuery#

Perses currently supports only one kind of query for Prometheus: PrometheusTimeSeriesQuery. Others will come in the future.

kind: "PrometheusTimeSeriesQuery"
spec:
  # `query` is the promQL expression.
  query: <string>

  # `datasource` is a datasource selector. If not provided, the default PrometheusDatasource is used.
  # See the documentation about the datasources to understand how it is selected.
  datasource: <Prometheus Datasource selector> # Optional
  seriesNameFormat: <string> # Optional

  # `minStep` is the minimum time interval you want between each data points.
  minStep: <duration> # Optional
  resolution: <number> # Optional

Example#

A simple one:

kind: "TimeSeriesQuery"
spec:
  plugin:
    kind: "PrometheusTimeSeriesQuery"
    spec:
      query: "rate(caddy_http_response_duration_seconds_sum[$interval])"

PrometheusLabelNamesVariable#

kind: "PrometheusLabelNamesVariable"
spec:
  # `datasource` is a datasource selector. If not provided, the default PrometheusDatasource is used.
  # See the documentation about the datasources to understand how it is selected.
  datasource: <Prometheus Datasource selector> # Optional
  matchers:
    - <string> # Optional

Example#

A simple Prometheus LabelNames variable defined in a project would look like:

kind: "Variable"
metadata:
  name: "labelNames"
  project: "perses"
spec:
  kind: "ListVariable"
  spec:
    plugin:
      kind: "PrometheusLabelNamesVariable"

A more complex one

kind: "Variable"
metadata:
  name: "labelNames"
  project: "perses"
spec:
  kind: "ListVariable"
  spec:
    allowMultiple: false
    allowAllValue: false
    plugin:
      kind: "PrometheusLabelNamesVariable"
      spec:
        datasource:
          kind: "PrometheusDatasource"
          name: "PrometheusDemo"
        matchers:
          - "up"

PrometheusLabelValuesVariable#

kind: "PrometheusLabelValuesVariable"
spec:
  # `datasource` is a datasource selector. If not provided, the default PrometheusDatasource is used.
  # See the documentation about the datasources to understand how it is selected.
  datasource: <Prometheus Datasource selector> # Optional
  labelName: <string>
  matchers:
    - <string> # Optional

Example#

A simple Prometheus LabelValues variable defined in the global scope would look like:

kind: "GlobalVariable"
metadata:
  name: "job"
spec:
  kind: "ListVariable"
  spec:
    allowMultiple: false
    allowAllValue: false
    plugin:
      kind: "PrometheusLabelValuesVariable"
      spec:
        labelName: "job"

A more complex one

kind: "GlobalVariable"
metadata:
  name: "instance"
spec:
  kind: "ListVariable"
  spec:
    allowMultiple: false
    allowAllValue: false
    plugin:
      kind: "PrometheusLabelValuesVariable"
      spec:
        datasource:
          kind: "PrometheusDatasource"
          name: "PrometheusDemo"
        labelName: "instance"
        matchers:
        - "up{job=~\"$job\"}"

PrometheusPromQLVariable#

kind: "PrometheusPromQLVariable"
spec:
  # `datasource` is a datasource selector. If not provided, the default PrometheusDatasource is used.
  # See the documentation about the datasources to understand how it is selected.
  datasource: <Prometheus Datasource selector> # Optional
  # The promql expression
  expr: <string>
  labelName: <string>

Example#

A simple Prometheus PromQL variable defined in a dashboard would look like:

kind: "ListVariable"
spec:
  name: "job"
  allowMultiple: false
  allowAllValue: false
  plugin:
    kind: "PrometheusPromQLVariable"
    spec:
      expr: "group by (job) (up)",
      labelName: "job"

Shared definitions#

Prometheus Datasource selector#

kind: "PrometheusDatasource"
# The name of the datasource regardless its level
name: <string> # Optional