文章目录
- 普罗米修斯容器化与PromQL
- 普罗米修斯容器化
- 1.下载配置清单
- 2.部署operator
- 3.部署普罗米修斯
- 4.配置域名访问
- 5.部署并解析
- Prom QL
- 1.简单运算
- 2.聚合运算
- 逻辑运算
- and 并且
- or 或者
- unless 排除
- 聚合函数
- sum : 求和运算
- min:求最小值
- max:求最大值
- avg:求平均数
- stddev计算标准差
- stdevar计算极方差
- count:统计总个数
- 分类计算个数
- 获取最小的两个值
- 获取最大的两个值
- 求某个位置上的数
- 3.特殊查询
- 升序
- 倒序
普罗米修斯容器化与PromQL
普罗米修斯容器化,就是在kubernetes中安装。
普罗米修斯容器化
1.下载配置清单
# 克隆配置清单到本地
[root@kubernetes-master-01 ~]# git clone -b release-0.5 --single-branch https://github.com/prometheus-operator/kube-prometheus.git
2.部署operator
- operator:普罗米修斯的管理插件
# 部署
[root@kubernetes-master-01 ~]# cd kube-prometheus/
[root@kubernetes-master-01 setup]# kubectl apply -f /root/kube-prometheus/manifests/setup/
# 查看部署
[root@kubernetes-master-01 setup]# kubectl get pods -n monitoring
NAME READY STATUS RESTARTS AGE
prometheus-operator-848d669f6d-qcxhc 2/2 Running 0 45s
3.部署普罗米修斯
# 部署
[root@kubernetes-master-01 setup]# cd ..
[root@kubernetes-master-01 manifests]# kubectl apply -f /root/kube-prometheus/manifests
# 查看部署
[root@k8s-master1 ~]# kubectl get pod -n monitoring -o wide
NAME READY STATUS RESTARTS AGE IP NODE
alertmanager-main-0 2/2 Running 0 27m 10.244.1.91 k8s-node1
alertmanager-main-1 2/2 Running 0 27m 10.244.2.63 k8s-node2
alertmanager-main-2 2/2 Running 0 27m 10.244.2.64 k8s-node2
grafana-5d9d5f67c4-4l759 1/1 Running 0 26m 10.244.1.94 k8s-node1
kube-state-metrics-7fddf8779f-2xwm8 3/3 Running 0 26m 10.244.1.92 k8s-node1
node-exporter-hngsd 2/2 Running 0 26m 192.168.12.13 k8s-node2
node-exporter-pvdfc 2/2 Running 0 26m 192.168.12.11 k8s-master1
node-exporter-zkf2w 2/2 Running 0 26m 192.168.12.12 k8s-node1
prometheus-adapter-cb548cdbf-hdjvc 1/1 Running 0 26m 10.244.2.66 k8s-node2
prometheus-k8s-0 3/3 Running 1 26m 10.244.1.93 k8s-node1
prometheus-k8s-1 3/3 Running 0 26m 10.244.2.65 k8s-node2
prometheus-operator-848d669f6d-knk9r 2/2 Running 0 27m 10.244.1.90 k8s-node1
# 查看svc
[root@k8s-master1 ~]# kubectl get svc -n monitoring
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
alertmanager-main ClusterIP 10.101.62.75 <none> 9093/TCP 4m59s
alertmanager-operated ClusterIP None <none> 9093/TCP,9094/TCP,9094/UDP 5m
grafana ClusterIP 10.101.1.197 <none> 3000/TCP 4m16s
kube-state-metrics ClusterIP None <none> 8443/TCP,9443/TCP 4m16s
node-exporter ClusterIP None <none> 9100/TCP 4m15s
prometheus-adapter ClusterIP 10.98.124.167 <none> 443/TCP 4m14s
prometheus-k8s ClusterIP 10.108.159.34 <none> 9090/TCP 4m12s
prometheus-operated ClusterIP None <none> 9090/TCP 4m11s
prometheus-operator ClusterIP None <none> 8443/TCP 5m22s
4.配置域名访问
- 给grafana、prometheus建立ingress配置域名访问:
- grafana域名:www.grafana.monitoring.cluster.local.com
- prometheus域名:www.prometheus-k8s.monitoring.cluster.local.com
cat > /root/kube-prometheus/manifests/prometheus-ingress.yaml <EOF
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: /
---
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: /
EOF
5.部署并解析
- 域名添加至hosts解析
# 部署
[root@k8s-master1 manifests]# kubectl apply -f prometheus-ingress.yaml
# 获取域名
[root@k8s-master1 manifests]# kubectl get -f prometheus-ingress.yaml
NAME CLASS HOSTS ADDRESS PORTS
prometheus-k8s <none> www.prometheus-k8s.monitoring.cluster.local.com 192.168.12.13 80
grafana <none> www.grafana.monitoring.cluster.local.com 192.168.12.13 80
# 获取端口:31400
[root@k8s-master1 manifests]# kubectl get svc -n ingress-nginx | grep 80
NodePort 10.104.40.59 <none> 80:31400/TCP,443:32142/TCP 42h
# 域名配合端口访问:
www.prometheus-k8s.monitoring.cluster.local.com:31400 # 普罗米修斯
www.grafana.monitoring.cluster.local.com:31400 # grafana
Prom QL
QL顾名思义,Query language即查询语言。Prometheus作为强大的开源监控系统,最大的依赖便是PromQL。是监控数据个性化查询、展示的基础。所以要掌握Prometheus,掌握PromQL是必备的前提。
瞬时向量:包含该时间序列中最新的⼀个样本值
区间向量:⼀段时间范围内的数据
- 官方帮助文档:https://prometheus.io/docs/prometheus/latest/querying/operators/
1.简单运算
+ - * / % ^
=:选择正好相等的字符串标签
!=:选择不相等的字符串标签
=~:选择匹配正则表达式的标签(或⼦标签)
!~:选择不匹配正则表达式的标签(或⼦标签)
^ :次方
s:seconds
m:minutes
h:hours
d:days
w:weeks
y:years
- 查询5分钟以内的数据 [5m]
- 添加普罗米修斯数据源,解析为url填入grafana
#
[root@k8s-master1 manifests]# kubectl run test -it --rm --image=busybox:1.28.3
/ # nslookup prometheus-k8s.monitoring
Name: prometheus-k8s.monitoring
Address 1: 10.108.159.34 prometheus-k8s.monitoring.svc.cluster.local
# 加上http与端口结尾:
http://prometheus-k8s.monitoring.svc.cluster.local:9090
- 查询30分钟以前的数据 offset 30m
- 等于查询 =
- 不等于查询 !=
- 正则匹配 =~
- 正则取反 !~
- 计算服务器内存空闲率
- 计算空闲内存小于1G
- 计算空闲内存等于一个数字
2.聚合运算
逻辑运算
- and
- or
- unless
and 并且
or 或者
unless 排除
聚合函数
sum(计算尺寸的总和)
min(选择最小尺寸)
max(选择最大尺寸)
avg(计算平均尺寸)
group(生成的矢量中的所有值为1)
stddev(计算人口标准偏离尺寸)
stdvar(计算人口标准与尺寸的差异)
count(计算矢量中的元素数)
count_values(计算具有相同值的元素数量)
bottomk(按样本值分示的最小 k 元素)
topk(按样本值分示的最大 k 元素)
quantile(计算φ-量子(0≤ φ ≤1)超过尺寸
sum : 求和运算
- 如:统计请求的和,也许一条数据有多条请求(运算)
min:求最小值
max:求最大值
avg:求平均数
stddev计算标准差
- 最大值-最小值=结果,结果越小越稳定,波动小
stdevar计算极方差
count:统计总个数
- 如:统计请求的所有条数共有多少条(计数)
分类计算个数
获取最小的两个值
获取最大的两个值
求某个位置上的数
二进制运算符优先级
^
*,/,%
+, -
==,!=,<=,<,>=,>
and, unless
or
3.特殊查询
格式:命令(查询值)
# 查询某个字段
sum(http_request_total)by(job)
# 计算范围向量中时间序列的增加
increase(http_request_total{job="grafana"}[1m])
# 计算范围向量中,时间序列的每秒平均平均增长率
rate(http_request_total[1d])
# 计算范围向量中,时间序列的每秒平均平均增长率
irate(http_request_total[1d])
# 四舍五入,化零为整
round(node_memory_CommitLimit_bytes / 1024^2)
# 四舍五入 向上(只要有小数,就进1)
ceil(predict_linear(node_filesystem_files[1d],4*3600*24) / 1024^2)
# 四舍五入 向下(只要有小数,就去除)
floor(predict_linear(node_filesystem_files[1d],4*3600*24) / 1024^2)
# 基于一天的值,推算四天后三个node节点所剩内存
predict_linear(node_filesystem_files[1d],4*3600*24) / 1024^2
升序
sort(http_request_total)
倒序
sort_desc(http_request_total)
- 创建一个新字段
- 基于范围向量预测从现在开始到某个时间的资源消耗情况
- 四舍五入(向上)
- 四舍五入(向下)