普罗米修斯监控服务之PromQL语法和常用计算

PromQL

在这里插入图片描述

QL顾名思义,Query language即查询语言。Prometheus作为强大的开源监控系统,最大的依赖便是PromQL。是监控数据个性化查询、展示的基础。所以要掌握Prometheus,掌握PromQL是必备的前提。

瞬时向量:包含该时间序列中最新的⼀个样本值
区间向量:⼀段时间范围内的数据

第一部分:普罗米修斯容器化

1.安装prometheus

概念:普罗米修斯容器化就是在kubernetes中安装。

##去Github仓库拉取代码
[root@k8s-master-01 ~]#  git clone -b release-0.5 --single-branch https://github.com/prometheus-operator/kube-prometheus.git

fatal: unable to access 'https://github.com/prometheus-operator/kube-prometheus.git/': Failed connect to github.com:443; Connection refused

##拉取失败,老是报错:没办法用下面的
[root@k8s-master-01 opt]# ll
-rw-r--r-- 1 root root   268354 4月  23 20:10 kube-prometheus-0.5.0.tar.gz
[root@k8s-master-01 opt]# tar -xf kube-prometheus-0.5.0.tar.gz
drwxrwxr-x 11 root root     4096 4月  17 2020 kube-prometheus-0.5.0
[root@k8s-master-01 opt]# cd kube-prometheus-0.5.0/
[root@k8s-master-01 kube-prometheus-0.5.0]# ll
总用量 124
drwxrwxr-x 3 root root  4096 4月  17 2020 manifests


##安装相关yaml文件
root@k8s-master-01 kube-prometheus-0.5.0]# cd manifests/
[root@k8s-master-01 manifests]# ll
。。。一堆yaml文件。。。

注意:这里不能立马用 kubectl apply -f ./ 否则k8s集群会宕机,我们先跳到setup/安装operator(它是管理prometheus的管理插件)。再跳出来安装
[root@k8s-master-01 manifests]# cd setup/
。。。一堆yaml文件。。。
[root@k8s-master-01 setup]# kubectl apply -f ./
[root@k8s-master-01 setup]# cd ..
[root@k8s-master-01 manifests]# kubectl apply -f ./

查看一下启动情况,出现下面便是成功
[root@k8s-master-01 manifests]# kubectl get pods -n monitoring
prometheus-operator-848d669f6d-z6ct2   2/2     Running             0          4m28s

##为grafana、prometheus设置ingress
[root@k8s-master-01 manifests]# vim prometheus_ingress.yaml

kind: Ingress
apiVersion: extensions/v1beta1
metadata:
  name: grafana
  namespace: monitoring
spec:
  rules:
    - host: "www.grafana.monitoring.cluster.local.com"
      http:
        paths:
          - backend:
              serviceName: grafana
              servicePort: 3000
            path: /
---
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
  name: prometheus-k8s
  namespace: monitoring
spec:
  rules:
    - host: "www.prometheus-k8s.monitoring.cluster.local.com"
      http:
        paths:
          - backend:
              serviceName: prometheus-k8s
              servicePort: 9090
            path: /
            
[root@k8s-master-01 manifests]# kubectl apply -f prometheus_ingress.yaml 
Warning: extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
ingress.extensions/grafana created
ingress.extensions/prometheus-k8s created

##成功设置ingress的SVC 向外面暴露的端口
[root@k8s-master-01 manifests]# kubectl get svc -n ingress-nginx
NAME                                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             NodePort    10.100.63.141   <none>        80:31230/TCP,443:32526/TCP   9d
ingress-nginx-controller-admission   ClusterIP   10.110.79.171   <none>        443/TCP                      9


2.在宿主机上配hosts

C:\Windows\System32\drivers\etc/hosts

192.168.15.31 www.grafana.monitoring.cluster.local.com  www.prometheus-k8s.monitoring.cluster.local.com

对于要经常访问的网站,我们可以通过在Hosts中配置域名和IP的映射关系,提高域名解析速度。由于有了映射关系,当我们输入域名计算机就能很快解析出IP,而不用请求网络上的DNS服务器。

3.分别登陆域名和端口,登陆prometheus 和 grafana

http://www.prometheus-k8s.monitoring.cluster.local.com:31230
http://www.grafana.monitoring.cluster.local.com:31230

image-20210423220701942

image-20210423220720323

第二部分:登陆成功后做的后续动作

1.修改这里方便prometheus可以访问到k8s组件里scheduler里的信息

[root@k8s-master-01 manifests]# vi kube-scheduler.yaml 
[root@k8s-master-01 manifests]# kubectl apply -f kube-scheduler.yaml 
pod/kube-scheduler created

image-20210423224338717

2.代表我们在设置ingress资源类型的时候在自定义空间monitoring里形成的ingress域名

[root@k8s-master-01 ~]# kubectl get ingress -n monitoring 
NAME             CLASS    HOSTS                                             ADDRESS         PORTS   AGE
grafana          <none>   www.grafana.monitoring.cluster.local.com          192.168.15.32   80      100m
prometheus-k8s   <none>   www.prometheus-k8s.monitoring.cluster.local.com   192.168.15.32   80      100m


3.代表我们在设置ingress时候,立刻生成的一个nginx里向外面暴露的端口,同时这个nginx也反向代理了后面的pod

[root@k8s-master-01 ~]# kubectl get svc -n ingress-nginx
NAME                                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             NodePort    10.100.63.141   <none>        80:31230/TCP,443:32526/TCP   9d
ingress-nginx-controller-admission   ClusterIP   10.110.79.171   <none>        443/TCP                      9d

第三部分:Grafana

1.测试

[root@k8s-master-01 ~]# kubectl run test4 --rm -it --image=busybox:1.28.3
/ # nslookup prometheus-k8s.monitoring
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      prometheus-k8s.monitoring
Address 1: 10.96.242.122 prometheus-k8s.monitoring.svc.cluster.local

image-20210424002716860

2.添加prometheus数据源

##添加prometheus数据源
http://prometheus-k8s.monitoring.svc.cluster.local:9090

image-20210424003900300

第四部分:简单运算

1.查询5分钟以内的数据

1619145932679

2.查询30分钟以前的数据

image-20210424205028515

3.等于查询

image-20210424205142586

4.不等于查询

image-20210424205238672

5.正则匹配: =~

image-20210424205404049

6.正则取反匹配: !~

=:匹配与标签相等的内容
!=:不匹配与标签相等的内容
=~: 根据正则表达式匹配与标签符合的内容
!~:根据正则表达式不匹配与标签符合的内容

image-20210424205450438

7.计算机内存空闲率

image-20210424205550459

8.计算机空闲内存小于1G这个地方有争议(老师估计有坑)

image-20210424210104061

第五部分:聚合运算

逻辑运算

1.and 并且(交集)

image-20210424210441877

2.or 或者(并集)

image-20210424210547490

3.unless 排除(补集)

image-20210424210745361

第六部分:聚合函数

1.求和运算sum

image-20210424210936588

2.求最小值min

image-20210424211006763

3.求最大值max

image-20210424211034018

4.求平均数avg

image-20210424211104024

5.计算标准差stddev

image-20210424211432633

6.计算极方差stdvar

image-20210424211514516

7.统计总个数count

image-20210424211544682

8.分类计算个数:count_values

image-20210424211947675

9.获取最小的两个值bottomk

image-20210424212154249

10.获取最大的两个值topk

image-20210424212250900

11.获取某个位置上的数

image-20210424212346397

第七部分:二进制运算符优先级

^
*,/,%
+, -
==,!=,<=,<,>=,>
and, unless
or

第八部分:特殊查询

1.查询某个字段by{字段}

image-20210424212647420

2.计算范围向量中时间序列的增加

increase(v range-vector) 函数获取区间向量中的第一个和最后一个样本并返回其增长量, 它会在单调性发生变化时(如由于采样目标重启引起的计数器复位)自动中断。由于这个值被外推到指定的整个时间范围,所以即使样本值都是整数,你仍然可能会得到一个非整数值。

例如,以下表达式返回区间向量中每个时间序列过去 5 分钟内 HTTP 请求数的增长数:

increase(http_requests_total{job="apiserver"}[5m])
increase 的返回值类型只能是计数器类型,主要作用是增加图表和数据的可读性。使用 rate 函数记录规则的使用率,以便持续跟踪数据样本值的变化。

image-20210424213308423

3.计算范围向量中时间序列的每秒平均平均增长率

image-20210424213339847

4.计算范围向量中时间序列的每秒平均平均增长率

image-20210424213432635

5.排序sort

image-20210424213506024

6.倒序sort_desc

image-20210424213543843

7.创建一个新字段label_join

#先简单查询一下http请求状态码为200,模式为get的总量
http_request_total{handler="/login",method="get",statuscode="200"}
#返回
http_request_total{handler="/login", instance="192.168.1.20:3000", job="grafana", method="get", statuscode="200"} 2
 
 
#我们想要在他的后面添加一个新的标签,标名他的完整路径
label_join(http_request_total{handler="/login",method="get",statuscode="200"},"url","","instance","handler")
 
#含义
label_join()  #新增标签
http_request_total{handler="/login",method="get",statuscode="200"}  #度量值
"url"       #新标签的名称
""          #新标签的值以什么进行分割
instance","handler"  #该标签的值由 这个指标下的instance、handler这两个标签提供
                     #由""进行分隔
#返回结果
url="192.168.1.20:3000/login"

另外一个理解:
label_join(v instant-vector, dst_label string, separator string, src_label_1 string, src_label_2 string, ...)
函数可以将时间序列 v 中多个标签 src_label 的值,通过 separator 作为连接符写入到一个新的标签 dst_label 中。可以有多个 src_label 标签。

例如,以下表达式返回的时间序列多了一个 foo 标签,标签值为 etcd,etcd-k8s:

up{endpoint="api",instance="192.168.123.248:2379",job="etcd",namespace="monitoring",service="etcd-k8s"}
=> up{endpoint="api",instance="192.168.123.248:2379",job="etcd",namespace="monitoring",service="etcd-k8s"} 1
 
label_join(up{endpoint="api",instance="192.168.123.248:2379",job="etcd",namespace="monitoring",service="etcd-k8s"}, "foo", ",", "job", "service")
=> up{endpoint="api",foo="etcd,etcd-k8s",instance="192.168.123.248:2379",job="etcd",namespace="monitoring",service="etcd-k8s"}

image-20210424213832779

8.基于范围向量预测从现在开始到某个时间的资源消耗情况predict_linear

image-20210424213925596

9.四舍五入(向上)ceil

10.四舍五入(向下)floor

image-20210424214150064

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用普罗米修斯Prometheus)来监控服务器。Prometheus是一个开源的监控系统,它具有强大的数据模型和查询语言,可以帮助你收集和分析服务器的指标数据。 要监控服务器,你可以按照以下步骤操作: 1. 安装Prometheus:从Prometheus官方网站下载适合你操作系统的安装包,并按照说明进行安装。 2. 配置Prometheus:编辑Prometheus的配置文件(通常是prometheus.yml),在其中定义你要监控的目标。你可以指定服务器的IP地址和端口,以及其他任何你想要收集的指标。 3. 启动Prometheus:运行Prometheus的可执行文件来启动监控服务Prometheus将开始收集你配置的指标,并将其存储在本地数据库中。 4. 访问Prometheus的Web界面:在浏览器中访问http://localhost:9090或者你配置的其他端口,可以查看Prometheus的Web界面。在该界面上,你可以执行查询、创建仪表盘和图表,以及配置警报规则等。 5. 配置告警规则:通过Prometheus的告警规则配置,你可以定义当某些指标超过阈值时触发警报的条件。这将帮助你及时发现服务器出现问题并采取相应的措施。 除了以上步骤,你还可以使用Prometheus的各种插件和集成工具来扩展其功能,例如Grafana用于创建漂亮的仪表盘、Alertmanager用于管理警报等。 希望这些信息对你有所帮助!如果你还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值