文档首页/ 云容器引擎 CCE/ 最佳实践/ 监控/ 通过PromQL语句查询Prometheus数据
更新时间:2024-10-08 GMT+08:00
分享

通过PromQL语句查询Prometheus数据

PromQL是Prometheus Query Language的缩写,是一种用于查询和聚合时间序列数据的查询语言。Prometheus是一个开源的监控系统,用于收集和存储时间序列数据,每个时间序列都由一个唯一的标识符和一组时间戳-值对组成。而PromQL是Prometheus的核心组件之一,使用标识符和标签组成的简单表达式对时间序列进行筛选和聚合,使用户能够根据需要快速定位和解决问题。

有关PromQL的更多使用方法,请参见查询Prometheus

通过控制台获取华为云Prometheus监控数据

  1. 在集群中安装云原生监控插件,采集Prometheus监控数据。

    1. 登录CCE控制台,单击集群名称进入集群,单击左侧导航栏的“插件中心”。
    2. 在“插件中心”页面右侧找到云原生监控插件,单击“安装”。
      建议您关注以下配置,其他配置可按需进行设置。详情请参见云原生监控插件
      • 监控数据上报至AOM服务:开启后,插件会将监控数据上报至AOM服务。
      • 指标上报的AOM实例:选择指标上报的AOM实例。采集的基础指标免费,自定义指标将由AOM服务进行收费,详情请参见价格详情。对接AOM需要用户具备一定权限,目前仅华为云/华为账号,或者在admin用户组下的用户支持此操作。

    3. 插件配置完成后,单击“安装”。

  2. 前往AOM服务查看监控数据。

    1. 登录AOM 2.0控制台,单击左侧导航栏中的“指标浏览”。
    2. 选择对接AOM的Prometheus实例,并选择“按普罗语句添加”
      例如查询CoreDNS接受到的请求数响应成功率,对应的PromQL语句如下:
      sum(rate(coredns_dns_responses_total{instance=~"10.0.0.2:9153",rcode=~"NOERROR|NXDOMAIN"}[5m]))/sum(rate(coredns_dns_responses_total{instance=~"10.0.0.2:9153"}[5m]))

      其中10.0.0.2为CoreDNS容器IP,返回结果如图:

通过控制台获取开源Prometheus监控数据

  1. 当集群中的云原生监控插件安装完成后,可通过为Prometheus创建NodePort或LoadBalancer服务对外提供访问。

    对外提供访问后,无需认证即可访问页面,存在一定的安全风险。若您有较高的安全要求,可进行安全加固。例如,使用NGINX反向代理和基于HTTP基本身份验证的方式来保护Console页面,从而限制访问页面的用户。

    以创建NodePort服务为例,YAML示例如下:
    apiVersion: v1
    kind: Service
    metadata:
      name: prom-np
      labels:
        app.kubernetes.io/name: prometheus
        prometheus: server
      namespace: monitoring
    spec:
      selector:
        app.kubernetes.io/name: prometheus
        prometheus: server
      externalTrafficPolicy: Cluster
      ports:
        - name: cce-service-0
          targetPort: 9090
          nodePort: 0
          port: 9090
          protocol: TCP
      type: NodePort

  2. 为节点绑定EIP后,可在浏览器输入“节点EIP:节点端口”,通过PromQL查询对应监控数据。

通过API获取华为云Prometheus监控数据

  1. 登录AOM 2.0控制台,单击左侧导航栏中的“Prometheus监控 > 实例列表”。
  2. 单击对接AOM的Prometheus实例名称,单击“设置”
  3. 查看Grafana数据源配置信息,并根据需求复制公网或内网的HTTP URL地址。

    如果未创建调用凭证AccessCode,请先创建一个AccessCode。

  4. 使用HTTP URL调用Prometheus监控数据的示例如下。更多使用HTTP API获取Prometheus监控数据的操作,请参见HTTP API

    GET <HTTP URL>/api/v1/query
    Content-Type: application/json
    Authorization: <Token>
    {
    "query":" coredns_dns_responses_total",
    "time":" 1708655317.719",
    "timeout":"1000"
    }

    其中<HTTP URL>为上一步中的HTTP URL地址, <Token>为上一步中获取的密码。其余URL查询参数如下:

    • query:Prometheus表达式查询字符串。
    • time:设置查询监控数据的时间戳。
    • timeout:设置超时时间,单位为毫秒。

    拼接后参考命令如下:

    curl -H 'Authorization: <Token>' -H 'Content-Type: application/json' -X GET '<HTTP URL>/api/v1/query?query=coredns_dns_responses_total&time=1708655317.719&timeout=1000'

    预期结果如下:

通过API获取开源Prometheus监控数据

  1. 获取HTTP API地址。

    • 如果您是在集群内访问开源Prometheus监控,默认prometheus-server的Service地址“http://<cluster IP>:9090”即为HTTP API地址。
    • 如果您使用公网访问开源Prometheus监控,需要为prometheus-server绑定LoadBalancer类型的Service。“http://<ELB IP>:9090”即为HTTP API地址。

  2. 使用HTTP API调用Prometheus监控数据。

    以通过集群内部HTTP API获取开源Prometheus监控数据作为示例。

    • 获取瞬时监控数据。
      GET <HTTP API>/api/v1/query
      Content-Type: application/json
      Param:
      {
      "query":" coredns_dns_responses_total",
      "time":" 1708655317.719",
      "timeout":"1000"
      }

      拼接后参考命令如下:

      curl -X GET -H "Content-Type: application/json" '<HTTP API>/api/v1/query?query=coredns_dns_responses_total&time=1708655317&timeout=1000'

      预期结果如下:

    • 查询某个时间范围的监控数据。
      GET <HTTP API>/api/v1/query
      Content-Type: application/json
      Param:
      {
      "query":" coredns_dns_responses_total",
      "start":1708655317,
      "end":1708655318,
      "step":30
      }

      URL查询参数如下:

      • start:设置查询监控数据开始时间。
      • end:设置查询监控数据结束时间。
      • step:返回监控数据时,数据间隔的时间步长。

      拼接后参考语句:

      curl -X GET -H "Content-Type: application/json" -H "Accept: application/json" '<HTTP API>/api/v1/query?query=coredns_dns_responses_total&start=1708655317&end=1708655318&setp=30'

      预期结果如下:

相关文档