Prometheus 服务的HTTP API :服务对象状态接口

2021-02-12 0 By admin

Prometheus 服务的 HTTP API 可以用于查询 Prometheus 服务运行的状态;包括 Targets(目标对象)、Rules(规则)、Alerts(告警)、AlertManagers(告警管理者)等。

一、Targets(目标对象)

以下 endpoint 返回 Prometheus Targets(目标对象) 的当前状态的概述:
get /api/v1/targets

  1. 默认情况下,Active Targets 和 InActive Targets 都是响应的一部分。
  2. labels 表示重新标记后的标签集。
  3. discoveredLabels 表示在重新标记之前在服务发现期间检索到的未修改的标签。

此接口允许使用 state 参数,用于对 Targets 进行筛选(例如,state=active,state=dropped,state=any)。请注意,对于筛选出的目标,仍然返回空数组。其他值将被忽略。

$ curl 'http://localhost:9090/api/v1/targets?state=active'
{
  "status": "success",
  "data": {
    "activeTargets": [
      {
        "discoveredLabels": {
          "__address__": "127.0.0.1:9090",
          "__metrics_path__": "/metrics",
          "__scheme__": "http",
          "job": "prometheus"
        },
        "labels": {
          "instance": "127.0.0.1:9090",
          "job": "prometheus"
        },
        "scrapePool": "prometheus",
        "scrapeUrl": "http://127.0.0.1:9090/metrics",
        "lastError": "",
        "lastScrape": "2017-01-17T15:07:44.723715405+01:00",
        "lastScrapeDuration": 50688943,
        "health": "up"
      }
    ],
    "droppedTargets": []
  }
}

二、Rules(规则)

此 /rules 接口端点返回当前加载的警报和记录规则的列表。此外,它还返回由每个警报规则的Prometheus实例触发的当前活动警报。
由于 /rules 接口端点是相当新的,因此它没有与总体API v1相同的稳定性保证。
GET /api/v1/rules
URL查询参数:-type=alert | record:仅返回报警规则(如type=alert)或记录规则(如type=record)。当参数不存在或为空时,不进行过滤。

$ curl http://localhost:9090/api/v1/rules
{
    "data": {
        "groups": [
            {
                "rules": [
                    {
                        "alerts": [
                            {
                                "activeAt": "2018-07-04T20:27:12.60602144+02:00",
                                "annotations": {
                                    "summary": "High request latency"
                                },
                                "labels": {
                                    "alertname": "HighRequestLatency",
                                    "severity": "page"
                                },
                                "state": "firing",
                                "value": "1e+00"
                            }
                        ],
                        "annotations": {
                            "summary": "High request latency"
                        },
                        "duration": 600,
                        "health": "ok",
                        "labels": {
                            "severity": "page"
                        },
                        "name": "HighRequestLatency",
                        "query": "job:request_latency_seconds:mean5m{job=\"myjob\"} > 0.5",
                        "type": "alerting"
                    },
                    {
                        "health": "ok",
                        "name": "job:http_inprogress_requests:sum",
                        "query": "sum by (job) (http_inprogress_requests)",
                        "type": "recording"
                    }
                ],
                "file": "/rules.yaml",
                "interval": 60,
                "name": "example"
            }
        ]
    },
    "status": "success"
}

三、Alerts (告警)

此 /alerts 接口端点返回所有活动警报的列表。
由于/alerts端点是一个相当新的端点,因此它没有与总体API v1相同的稳定性保证。
GET /api/v1/alerts

$ curl http://localhost:9090/api/v1/alerts
{
    "data": {
        "alerts": [
            {
                "activeAt": "2018-07-04T20:27:12.60602144+02:00",
                "annotations": {},
                "labels": {
                    "alertname": "my-alert"
                },
                "state": "firing",
                "value": "1e+00"
            }
        ]
    },
    "status": "success"
}

四、Querying target metadata (查询目标对象的元数据)

此接口返回有关当前从目标中获取的度量的元数据。这是实验性的,将来可能会改变。
GET /api/v1/targets/metadata

URL查询参数:

  1. match_target=<label_selectors>:按标签集匹配目标的标签选择器。如果留空,则选择所有目标。
  2. metric=<string>:要为其检索元数据的度量名称。如果保留为空,则检索所有度量元数据。
  3. limit=<number>:要匹配的最大目标数。

查询结果的数据部分由包含度量元数据和目标标签集的对象列表组成。
下面的示例使用label job=“prometheus”返回前两个目标的 goroutines度量 的所有元数据条目。

curl -G http://localhost:9091/api/v1/targets/metadata \
    --data-urlencode 'metric=go_goroutines' \
    --data-urlencode 'match_target={job="prometheus"}' \
    --data-urlencode 'limit=2'
{
  "status": "success",
  "data": [
    {
      "target": {
        "instance": "127.0.0.1:9090",
        "job": "prometheus"
      },
      "type": "gauge",
      "help": "Number of goroutines that currently exist.",
      "unit": ""
    },
    {
      "target": {
        "instance": "127.0.0.1:9091",
        "job": "prometheus"
      },
      "type": "gauge",
      "help": "Number of goroutines that currently exist.",
      "unit": ""
    }
  ]
}

五、Querying metric metadata 查询度量元数据

此接口返回关于当前 Targets 目标对象中 scrapped 的指标度量数据的元数据。但是,它不提供任何目标信息。这被认为是实验性的,将来可能会改变。
从目标中取消的度量的元数据。

get /api/v1/metadata

URL查询参数:

  1. metric=<string>:要为其检索元数据的度量名称。如果保留为空,则检索所有度量元数据。
  2. limit=<number>:要匹配的最大目标数。

查询结果的数据部分由一个对象组成,其中每个键是一个度量名称,每个值是一个唯一元数据对象的列表,在所有目标中为该度量名称公开。
下面的示例返回两个度量。请注意,度量 http_requests_total 在列表中有多个对象。至少有一个目标具有与其余目标不匹配的帮助值。

curl -G http://localhost:9090/api/v1/metadata?limit=2

{
  "status": "success",
  "data": {
    "cortex_ring_tokens": [
      {
        "type": "gauge",
        "help": "Number of tokens in the ring",
        "unit": ""
      }
    ],
    "http_requests_total": [
      {
        "type": "counter",
        "help": "Number of HTTP requests",
        "unit": ""
      },
      {
        "type": "counter",
        "help": "Amount of HTTP requests",
        "unit": ""
      }
    ]
  }
}

六、Alertmanagers(告警管理者)

此接口返回Prometheus alertmanager发现的当前状态的概述:
get /api/v1/alertmanagers
active 和 dropped状态的警报管理器都是响应的一部分。

$ curl http://localhost:9090/api/v1/alertmanagers
{
  "status": "success",
  "data": {
    "activeAlertmanagers": [
      {
        "url": "http://127.0.0.1:9090/api/v1/alerts"
      }
    ],
    "droppedAlertmanagers": [
      {
        "url": "http://127.0.0.1:9093/api/v1/alerts"
      }
    ]
  }
}