
# 通过PromQL语句查询Prometheus数据
PromQL是Prometheus Query Language的缩写，是一种用于查询和聚合时间序列数据的查询语言。Prometheus是一个开源的监控系统，用于收集和存储时间序列数据，每个时间序列都由一个唯一的标识符和一组时间戳-值对组成。而PromQL是Prometheus的核心组件之一，使用标识符和标签组成的简单表达式对时间序列进行筛选和聚合，使用户能够根据需要快速定位和解决问题。
有关PromQL的更多使用方法，请参见[查询Prometheus](https://prometheus.io/docs/prometheus/latest/querying/basics/)。
#### 通过控制台获取华为云Prometheus监控数据
1. 在集群中安装云原生监控插件，采集Prometheus监控数据。 
   1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群，单击左侧导航栏的"插件中心"。
   
   2. 在"插件中心"页面右侧找到**云原生监控插件** ，单击"安装"。
      建议您关注以下配置，其他配置可按需进行设置。详情请参见[云原生监控插件](https://support.huaweicloud.com/usermanual-cce/cce_10_0406.html)。
      - 监控数据上报至AOM服务：开启后，插件会将监控数据上报至AOM服务。
      
      - 指标上报的AOM实例：选择指标上报的AOM实例。采集的基础指标免费，自定义指标将由AOM服务进行收费，详情请参见[价格详情](https://www.huaweicloud.com/pricing.html#/aom)。对接AOM需要用户具备一定权限，目前仅**华为云/华为账号** ，或者在**admin**用户组下的用户支持此操作。
       
      ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000002133930649.png "点击放大")
      
      
   
   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，返回结果如图：
      ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001851708550.png "点击放大")
      
   
   
   
   
 
#### 通过控制台获取开源Prometheus监控数据
1. 当集群中的云原生监控插件安装完成后，可通过为Prometheus创建NodePort或LoadBalancer服务对外提供访问。 
   ![](https://support.huaweicloud.com/bestpractice-cce/public_sys-resources/notice_3.0-zh-cn.png)
   对外提供访问后，无需认证即可访问页面，存在一定的安全风险。若您有较高的安全要求，可进行安全加固。例如，使用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查询对应监控数据。 
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001901587132.png "点击放大")
   
   
 
#### 通过API获取华为云Prometheus监控数据
1. 登录AOM 2.0控制台，单击左侧导航栏中的"Prometheus监控 \> 实例列表"。
2. 单击对接AOM的Prometheus实例名称，单击"设置"。
3. 查看Grafana数据源配置信息，并根据需求复制公网或内网的HTTP URL地址。 
   ![](https://support.huaweicloud.com/bestpractice-cce/public_sys-resources/note_3.0-zh-cn.png)
   如果未创建调用凭证AccessCode，请先创建一个AccessCode。
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001852182414.png "点击放大")
   
   
4. 使用HTTP URL调用Prometheus监控数据的示例如下。更多使用HTTP API获取Prometheus监控数据的操作，请参见[HTTP API](https://prometheus.io/docs/prometheus/latest/querying/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'
   ```
   预期结果如下：
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001852201166.png "点击放大")
   
   
 
#### 通过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'
     ```
     预期结果如下：
     ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001898491169.png "点击放大")
     
   
   - 查询某个时间范围的监控数据。
     ```
     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'
     ```
     预期结果如下：
     ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001852370518.png "点击放大")
     
   
   
   
   
 
