Promethus-day2-普罗米修斯容器化与PromQL

普罗米修斯容器化与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

image-20210424161240996
image-20210424162146034

  • 查询30分钟以前的数据 offset 30m
    image-20210424163252502
  • 等于查询 =
    image-20210424163406905
  • 不等于查询 !=
    image-20210424163443433
  • 正则匹配 =~
    image-20210424163821606
  • 正则取反 !~
    image-20210424164552766
  • 计算服务器内存空闲率
    1619147083203
  • 计算空闲内存小于1G
    1619147378664
  • 计算空闲内存等于一个数字
    1619147461978

2.聚合运算

逻辑运算

  • and
  • or
  • unless
and 并且

image-20210424172228239
image-20210424172331864

or 或者

image-20210424172442277

unless 排除

image-20210424172823010
image-20210424172859527

聚合函数

sum(计算尺寸的总和)
min(选择最小尺寸)
max(选择最大尺寸)
avg(计算平均尺寸)
group(生成的矢量中的所有值为1)
stddev(计算人口标准偏离尺寸)
stdvar(计算人口标准与尺寸的差异)
count(计算矢量中的元素数)
count_values(计算具有相同值的元素数量)
bottomk(按样本值分示的最小 k 元素)
topk(按样本值分示的最大 k 元素)
quantile(计算φ-量子(0≤ φ ≤1)超过尺寸
sum : 求和运算
  • 如:统计请求的和,也许一条数据有多条请求(运算)
    image-20210424173309603
min:求最小值

image-20210424173507055

max:求最大值

image-20210424173535029

avg:求平均数

image-20210424173600237

image-20210424173845041

stddev计算标准差
  • 最大值-最小值=结果,结果越小越稳定,波动小

1619148865387

stdevar计算极方差

1619149031204

count:统计总个数
  • 如:统计请求的所有条数共有多少条(计数)
    1619149125117
分类计算个数

image-20210424184126796

获取最小的两个值

1619149554647

获取最大的两个值

1619149586449

求某个位置上的数

在这里插入图片描述

二进制运算符优先级

^
*,/,%
+, -
==!=<=<>=>
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)
  • 创建一个新字段

1619151219044

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

1619151600637

  • 四舍五入(向上)

1619151734591

  • 四舍五入(向下)

1619151860346

posted @ 2022-06-09 18:18  秋风お亦冷  阅读(98)  评论(0编辑  收藏  举报