Custom target labels - CHERTS/pgscv GitHub Wiki

Starting with pgSCV version 0.13.0, it has become possible to use custom labels in /targets endpoint.

Version 0.10.0 introduces support for the Prometheus (VictoriaMetrics) discovery service. You can read about this in detail on the documentation page.

Support for custom labels in the /targets endpoint was a major improvement.

Complete YAML configuration file example:

listen_address: 0.0.0.0:9890
services:
  "postgres1":
    service_type: "postgres"
    conninfo: "postgres://pgscv:pa$$w0rd@postgres1:5432/db1"
    target_labels:
        - name: __scrape_interval__
          value: 5m
        - name: __scrape_timeout__
          value: 2m
        - name: datacenter
          value: dc1
  "postgres2":
    service_type: "postgres"
    conninfo: "postgres://pgscv:pa$$w0rd@postgres2:5432/db2"
    target_labels:
        - name: __scrape_interval__
          value: 2m
        - name: __scrape_timeout__
          value: 5m
        - name: datacenter
          value: dc2

For example, a /targets output

[
    {
        "targets": ["X.X.X.X:9890/metrics?target=system:0"]
    },
    {
        "targets": ["X.X.X.X:9890/metrics?target=postgres1"],
        "labels": {
            "datacenter": "dc1",
            "__scrape_interval__": "5m",
            "__scrape_timeout__": "2m"
        }
    },
    {
        "targets": ["X.X.X.X:9890/metrics?target=postgres2"],
        "labels": {
            "datacenter": "dc2",
            "__scrape_interval__": "2m",
            "__scrape_timeout__": "5m"
        }
    }
]

After Prometheus (VictoriaMetrics) performs service discovery, each service (postgres1 and postgres2) will have its own scrape_interval and scrape_timeout parameters set, and the datacenter label will be added to each postgres_ metric.

Getting test metrics from VictoriaMetrics (clustered) using curl:

# curl -XGET -G 'http://127.0.0.1:8427/select/0/prometheus/api/v1/query' \
--data-urlencode 'query=postgres_up{service_id="postgres1"}' | jq .

{
  "status": "success",
  "isPartial": false,
  "data": {
    "resultType": "vector",
    "result": [
      {
        "metric": {
          "__name__": "postgres_up",
          "datacenter": "dc1",
          "host": "postgres1",
          "instance": "pgscv:9890",
          "job": "pgscv",
          "port": "5432",
          "service_id": "postgres1"
        },
        "value": [
          1740482199,
          "1"
        ]
      }
    ]
  },
  "stats": {
    "seriesFetched": "2",
    "executionTimeMsec": 2
  }
}