通过PromQL语句查询Prometheus数据
PromQL是Prometheus Query Language的缩写,是一种用于查询和聚合时间序列数据的查询语言。Prometheus是一个开源的监控系统,用于收集和存储时间序列数据,每个时间序列都由一个唯一的标识符和一组时间戳-值对组成。而PromQL是Prometheus的核心组件之一,使用标识符和标签组成的简单表达式对时间序列进行筛选和聚合,使用户能够根据需要快速定位和解决问题。
有关PromQL的更多使用方法,请参见查询Prometheus。
通过控制台获取华为云Prometheus监控数据
- 在集群中安装云原生监控插件,采集Prometheus监控数据。
- 前往AOM服务查看监控数据。
- 登录AOM 2.0控制台,单击左侧导航栏中的“指标浏览”。
- 选择对接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监控数据
- 当集群中的云原生监控插件安装完成后,可通过为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
- 为节点绑定EIP后,可在浏览器输入“节点EIP:节点端口”,通过PromQL查询对应监控数据。
通过API获取华为云Prometheus监控数据
- 登录AOM 2.0控制台,单击左侧导航栏中的“Prometheus监控 > 实例列表”。
- 单击对接AOM的Prometheus实例名称,单击“设置”。
- 查看Grafana数据源配置信息,并根据需求复制公网或内网的HTTP URL地址。
如果未创建调用凭证AccessCode,请先创建一个AccessCode。
- 使用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监控数据
- 获取HTTP API地址。
- 如果您是在集群内访问开源Prometheus监控,默认prometheus-server的Service地址“http://<cluster IP>:9090”即为HTTP API地址。
- 如果您使用公网访问开源Prometheus监控,需要为prometheus-server绑定LoadBalancer类型的Service。“http://<ELB IP>:9090”即为HTTP API地址。
- 使用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'
预期结果如下:
- 获取瞬时监控数据。