普罗米修斯监控服务之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.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语法和常用计算相关推荐
- 普罗米修斯监控服务之-监控携带metric接口的服务
第一部分:课前小菜: 例子: 分布式:将多台Linux主机组合在一起,做成像一台主机一样来使用 微服务:将一台Linux主机拆分成多台Linux使用 淘宝:搜索页.商品详情页.订单页.支付页.物流.评 ...
- 普罗米修斯监控docker 服务
环境 192.168.254.127 (监控服务器) 192.168.254.128 (被监控机器) 首先在监控服务器安装: 1.安装Node Exporter 来收集硬件信息 所有节点运行以下命令安 ...
- 普罗米修斯 监控_接近完美的监控系统—普罗米修斯
普罗米修斯(Prometheus)是一个SoundCloud公司开源的监控系统.当年,由于SoundCloud公司生产了太多的服务,传统的监控已经无法满足监控需求,于是他们在2012年决定着手开发新的 ...
- 普罗米修斯监控linux,Prometheus(普罗米修斯)搭建监控
Prometheus(普罗米修斯) 实验环境:(各个主机,ip,所需服务) docker01 docker02 docker03 1.10 1.20 1.30 NodeEXporter NodeEXp ...
- 阿尔萨斯监控平台普罗米修斯监控平台对服务器资源的监控
一.arthas-阿尔萨斯监控平台 内存监控: 1.打开RDMS,选择应用实例,在'快捷方式'下拉选项中选择arthas 2.打开监控界面,输入:dashboard -i 5000 备注:-i 刷新实 ...
- 一篇文章搞定Prometheus普罗米修斯监控系统的部署
Prometheus普罗米修斯监控系统 一.普罗米修斯监控概述 1.1 什么是普罗米修斯监控 二.时间序列数据 2.1 什么是序列数据 2.2 时间序列数据特点 2.3 普罗米修斯特征 三.普罗米修斯 ...
- 普罗米修斯监控结合Java服务进行工作
开始之前需要知道普罗米修斯的相关思想 采用http协议来传输数据 主动调用获取数据 简化理解,有一个服务(java服务)提供返回固定格式(四种)的接口,普罗米修斯服务定时调用(内部感觉用该有长链接,否 ...
- 普罗米修斯 监控_完美的分布式监控系统——普罗米修斯
DevOps工程师或SRE工程师,可能都知道Prometheus普罗米修斯.Prometheus于2012年由SoundCloud创建,目前已经已发展为最热门的分布式监控系统.Prometheus完全 ...
- 普罗米修斯监控系统_基于Prometheus和Grafana的监控平台 - 环境搭建
导读 微服务中的监控分根据作用领域分为三大类,Logging,Tracing,Metrics. Logging - 用于记录离散的事件.例如,应用程序的调试信息或错误信息.它是我们诊断问题的依据.比如 ...
最新文章
- 记住:永远不要在 MySQL 中使用 UTF-8
- 2014-07-23 利用ASP.NET自带控件实现单文件上传与下载
- Linux系统卡慢之调优方法
- html 屏蔽蓝色电话,html – 在Chrome扩展程序中停用文字字段蓝色突出显示?
- 各数据结构算法时间复杂度图【笔记自用】
- Trie 树——搜索关键词提示 1
- fiddler抓包 https
- Linux学习总结(55)——Linux 运维常用脚本
- 面试官问我:什么是JavaScript闭包,我该如何回答?
- java代码继承------多层继承
- Unity2D开发小细节
- SQL Server MYSQL 对外键建立索引的必要性
- PYTHON INSTALL
- 51单片机ALE引脚的控制(摘录)
- 哔哩哔哩作者页上的作品批量保存的方法
- 2022年提高程序员在Boss直聘找工作时在线简历邀请面试概率的几点思考
- STM32 12864串行驱动
- snap vs apt
- Android Q版本应用兼容性适配指导
- ffmpeg录制桌面(队列方式)