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.gitfatal: 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.yamlkind: Ingress
apiVersion: extensions/v1beta1
metadata:name: grafananamespace: monitoring
spec:rules:- host: "www.grafana.monitoring.cluster.local.com"http:paths:- backend:serviceName: grafanaservicePort: 3000path: /
---
kind: Ingress
apiVersion: extensions/v1beta1
metadata:name: prometheus-k8snamespace: monitoring
spec:rules:- host: "www.prometheus-k8s.monitoring.cluster.local.com"http:paths:- backend:serviceName: prometheus-k8sservicePort: 9090path: /[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/hosts192.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

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

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

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.localName:      prometheus-k8s.monitoring
Address 1: 10.96.242.122 prometheus-k8s.monitoring.svc.cluster.local

2.添加prometheus数据源

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

第四部分:简单运算

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

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

3.等于查询

4.不等于查询

5.正则匹配: =~

6.正则取反匹配: !~

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

7.计算机内存空闲率

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

第五部分:聚合运算

逻辑运算

1.and 并且(交集)

2.or 或者(并集)

3.unless 排除(补集)

第六部分:聚合函数

1.求和运算sum

2.求最小值min

3.求最大值max

4.求平均数avg

5.计算标准差stddev

6.计算极方差stdvar

7.统计总个数count

8.分类计算个数:count_values

9.获取最小的两个值bottomk

10.获取最大的两个值topk

11.获取某个位置上的数

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

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

第八部分:特殊查询

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

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

increase(v range-vector) 函数获取区间向量中的第一个和最后一个样本并返回其增长量, 它会在单调性发生变化时(如由于采样目标重启引起的计数器复位)自动中断。由于这个值被外推到指定的整个时间范围,所以即使样本值都是整数,你仍然可能会得到一个非整数值。例如,以下表达式返回区间向量中每个时间序列过去 5 分钟内 HTTP 请求数的增长数:increase(http_requests_total{job="apiserver"}[5m])
increase 的返回值类型只能是计数器类型,主要作用是增加图表和数据的可读性。使用 rate 函数记录规则的使用率,以便持续跟踪数据样本值的变化。

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

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

5.排序sort

6.倒序sort_desc

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"} 1label_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"}

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

9.四舍五入(向上)ceil

10.四舍五入(向下)floor

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

  1. 普罗米修斯监控服务之-监控携带metric接口的服务

    第一部分:课前小菜: 例子: 分布式:将多台Linux主机组合在一起,做成像一台主机一样来使用 微服务:将一台Linux主机拆分成多台Linux使用 淘宝:搜索页.商品详情页.订单页.支付页.物流.评 ...

  2. 普罗米修斯监控docker 服务

    环境 192.168.254.127 (监控服务器) 192.168.254.128 (被监控机器) 首先在监控服务器安装: 1.安装Node Exporter 来收集硬件信息 所有节点运行以下命令安 ...

  3. 普罗米修斯 监控_接近完美的监控系统—普罗米修斯

    普罗米修斯(Prometheus)是一个SoundCloud公司开源的监控系统.当年,由于SoundCloud公司生产了太多的服务,传统的监控已经无法满足监控需求,于是他们在2012年决定着手开发新的 ...

  4. 普罗米修斯监控linux,Prometheus(普罗米修斯)搭建监控

    Prometheus(普罗米修斯) 实验环境:(各个主机,ip,所需服务) docker01 docker02 docker03 1.10 1.20 1.30 NodeEXporter NodeEXp ...

  5. 阿尔萨斯监控平台普罗米修斯监控平台对服务器资源的监控

    一.arthas-阿尔萨斯监控平台 内存监控: 1.打开RDMS,选择应用实例,在'快捷方式'下拉选项中选择arthas 2.打开监控界面,输入:dashboard -i 5000 备注:-i 刷新实 ...

  6. 一篇文章搞定Prometheus普罗米修斯监控系统的部署

    Prometheus普罗米修斯监控系统 一.普罗米修斯监控概述 1.1 什么是普罗米修斯监控 二.时间序列数据 2.1 什么是序列数据 2.2 时间序列数据特点 2.3 普罗米修斯特征 三.普罗米修斯 ...

  7. 普罗米修斯监控结合Java服务进行工作

    开始之前需要知道普罗米修斯的相关思想 采用http协议来传输数据 主动调用获取数据 简化理解,有一个服务(java服务)提供返回固定格式(四种)的接口,普罗米修斯服务定时调用(内部感觉用该有长链接,否 ...

  8. 普罗米修斯 监控_完美的分布式监控系统——普罗米修斯

    DevOps工程师或SRE工程师,可能都知道Prometheus普罗米修斯.Prometheus于2012年由SoundCloud创建,目前已经已发展为最热门的分布式监控系统.Prometheus完全 ...

  9. 普罗米修斯监控系统_基于Prometheus和Grafana的监控平台 - 环境搭建

    导读 微服务中的监控分根据作用领域分为三大类,Logging,Tracing,Metrics. Logging - 用于记录离散的事件.例如,应用程序的调试信息或错误信息.它是我们诊断问题的依据.比如 ...

最新文章

  1. 记住:永远不要在 MySQL 中使用 UTF-8
  2. 2014-07-23 利用ASP.NET自带控件实现单文件上传与下载
  3. Linux系统卡慢之调优方法
  4. html 屏蔽蓝色电话,html – 在Chrome扩展程序中停用文字字段蓝色突出显示?
  5. 各数据结构算法时间复杂度图【笔记自用】
  6. Trie 树——搜索关键词提示 1
  7. fiddler抓包 https
  8. Linux学习总结(55)——Linux 运维常用脚本
  9. 面试官问我:什么是JavaScript闭包,我该如何回答?
  10. java代码继承------多层继承
  11. Unity2D开发小细节
  12. SQL Server MYSQL 对外键建立索引的必要性
  13. PYTHON INSTALL
  14. 51单片机ALE引脚的控制(摘录)
  15. 哔哩哔哩作者页上的作品批量保存的方法
  16. 2022年提高程序员在Boss直聘找工作时在线简历邀请面试概率的几点思考
  17. STM32 12864串行驱动
  18. snap vs apt
  19. Android Q版本应用兼容性适配指导
  20. ffmpeg录制桌面(队列方式)

热门文章

  1. 使用eBPF LSM热修复Linux内核漏洞
  2. 谷歌浏览器主页快捷方式不见
  3. 位置物联网时代,UWB定位如何应用?
  4. IsolatedStorage
  5. KEIL调试查看ROM或RAM中的信息
  6. 2.方寸棋盘便是我的天地
  7. SAP script 自动创建销售订单机器人,协同Excel
  8. 人体口罩佩戴检测实战
  9. win7下mini2440 USB下载驱动安装
  10. docker 安装 巡风--kali下安装