返回介绍

Prometheus 查询语言 PromQL 使用说明

发布于 2019-09-08 09:20:45 字数 3969 浏览 1166 评论 0 收藏 0

目前很多云原生应用使用了 Prometheus 作为监控,例如在 Istio 中查询 Prometheus 指标。

Prometheus 提供了一种功能表达式语言,允许用户实时选择和汇总时间序列数据。表达式的结果可以显示为图形、表格数据或者由外部系统通过 RESTful API 消费。

表达式语言数据类型

Prometheus 查询语言简称 PromQL,其中包含以下四类数据类型:

  • Instant vector(即时向量) :一组时间序列,拥有共同的时间戳,每个时间序列中都包含一个样本。
  • Range vector(范围向量) :一组时间序列,其中每个时间序列都包含一系列时间范围内的数据点。
  • Scalar(标量) :一个简单的浮点值。
  • String(字符串) :一个简单的字符串,目前暂未使用。

示例

可以通过 Prometheus web 页面查询。

Prometheus 的查询页面

还可以使用 HTTP API 直接请求查询,例如你使用 kubernetes-vagrant-centos-cluster 部署了 Istio ,会默认安装 Prometheus,你可以在浏览器中请求 http://prometheus.istio.jimmysong.io/api/v1/query?query=http_requests_total{job=%22kubernetes-nodes%22} ,将会看到如下格式的 json 返回值。

{
  "status": "success",
  "data": {
    "resultType": "vector",
    "result": [
      {
        "metric": {
          "__name__": "http_requests_total",
          "beta_kubernetes_io_arch": "amd64",
          "beta_kubernetes_io_os": "linux",
          "code": "200",
          "handler": "prometheus",
          "instance": "node1",
          "job": "kubernetes-nodes",
          "kubernetes_io_hostname": "node1",
          "method": "get"
        },
        "value": [
          1539861026.814,
          "556"
        ]
      },
      {
        "metric": {
          "__name__": "http_requests_total",
          "beta_kubernetes_io_arch": "amd64",
          "beta_kubernetes_io_os": "linux",
          "code": "200",
          "handler": "prometheus",
          "instance": "node2",
          "job": "kubernetes-nodes",
          "kubernetes_io_hostname": "node2",
          "method": "get"
        },
        "value": [
          1539861026.814,
          "555"
        ]
      },
      {
        "metric": {
          "__name__": "http_requests_total",
          "beta_kubernetes_io_arch": "amd64",
          "beta_kubernetes_io_os": "linux",
          "code": "200",
          "handler": "prometheus",
          "instance": "node3",
          "job": "kubernetes-nodes",
          "kubernetes_io_hostname": "node3",
          "method": "get"
        },
        "value": [
          1539861026.814,
          "556"
        ]
      }
    ]
  }
}

HTTP API 说明

上面是对最常用也是比较简单的即时查询,下面是对以上返回结果的简要说明。

  • status :可以为 successerror , 如果为 error ,则不会显示 data 字段,而显示 errorTypeerror
  • resultType :返回结果类型,可以为 matrixvectorscalarstring
  • metric :即时查询的到的监控 metric,其中的项为 label,可以在查询 URL 中增加标签选择器来过滤 metric。
  • value :第一个数字是 UNIX 格式的时间戳,例如 1539861026.814 表示的是北京时间 2018/10/18 19:10:26.814 (注意:小数点后毫秒数)。Prometheus 中的 metric 时间都是以 UTC(协调世界时间)为单位的,无法调整时区,需要在前端展示时自己来调整。

您也可以查询一个时间段、根据标签选择一组 metric、Prometheus 中的 target、rule、metadata 等配置进行查询。关于 Prometheus RESTful API 的详细用法请参考 HTTP API

参考

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文