基础篇-03 prometheus算法及企业常用监控方案

Prometheus 数学理理论基础学习

PromQL常见语法

瞬时向量和区间向量

瞬时向量:包含该时间序列中最新的一个样本值

基础篇-03 prometheus算法及企业常用监控方案

区间向量:一段时间范围内的数据

基础篇-03 prometheus算法及企业常用监控方案

Offset:查看多少分钟之前的数据 offset 30m

基础篇-03 prometheus算法及企业常用监控方案

Labelsets:

       过滤出具有handler="/login"的label的数据。

       正则匹配:http_request_total{handler=~".*login.*"}

基础篇-03 prometheus算法及企业常用监控方案

       剔除某个label:http_request_total{handler!~".*login.*"}

基础篇-03 prometheus算法及企业常用监控方案

       匹配两个值:http_request_total{handler=~"/login|/password"}

基础篇-03 prometheus算法及企业常用监控方案

数学运算:+ - * / % ^

查看主机内存总大小(Mi)

node_memory_MemTotal_bytes/1024/1024<4000

基础篇-03 prometheus算法及企业常用监控方案

集合运算

and or

node_memory_MemTotal_bytes / 1024 /1024 <= 2772  or node_memory_MemTotal_bytes / 1024 /1024 ==    3758.59765625

unless:排除

node_memory_MemTotal_bytes / 1024 /1024 >= 2772  unless node_memory_MemTotal_bytes / 1024 /1024 ==    3758.59765625

优先级

  1. ^
  2. * / %
  3. + -
  4. ==, !=, <=, < >= >
  5. And unless
  6. Or

聚合操作:

sum:求所有node内存,使用sum后是将所有的监控的服务器的值进行取和,所以当我们只看某一台时需要进行拆分拆分常用方法by increase()

sum(node_memory_MemTotal_bytes) / 1024^2

根据某个字段进行统计

sum(http_request_total)  by (statuscode, handler)

基础篇-03 prometheus算法及企业常用监控方案

最大值max() 最小值  min() 平均值 avg()

标准差:stddev    方差:stdvar

计数 count()

count(http_request_total)

基础篇-03 prometheus算法及企业常用监控方案

count_values("count", node_memory_MemTotal_bytes)  对value进行统计计数

基础篇-03 prometheus算法及企业常用监控方案

topk(5, sum(http_request_total)  by (statuscode, handler)) 取前N条时序

基础篇-03 prometheus算法及企业常用监控方案

bottomk(3, sum(http_request_total)  by (statuscode, handler)) 取后N条时序

基础篇-03 prometheus算法及企业常用监控方案

取当前数据的中位数

求请求延时中位数quantile(0.5, http_request_total)

基础篇-03 prometheus算法及企业常用监控方案

内置函数:

一个指标的增长率increase()

计算最近一小时平均每秒平均访问增长率

increase(http_request_total{endpoint="http",handler="/datasources/proxy/:id/*",instance="192.168.195.17:3000",job="grafana",method="get",namespace="monitoring",pod="grafana-5d9d5f67c4-lgj96",service="grafana",statuscode="200"}[1h])/3600

等于

rate(http_request_total{endpoint="http",handler="/datasources/proxy/:id/*",instance="192.168.195.17:3000",job="grafana",method="get",namespace="monitoring",pod="grafana-5d9d5f67c4-lgj96",service="grafana",statuscode="200"}[1h])

基础篇-03 prometheus算法及企业常用监控方案

如果想要更灵敏使用irate(): 瞬时增长率,取最后两个数据进行计算,而不是一个小时进行平均数据,不适合做需要分期长期趋势或者在告警规则中使用。

预测统计:

根据一天的数据,预测4个小时之后,磁盘分区的空间会不会小于0

predict_linear(node_filesystem_files_free{mountpoint="/",}[1d],4*3600)<0

基础篇-03 prometheus算法及企业常用监控方案

absent():如果样本数据不为空则返回no data,如果为空则返回1。判断数据是否在正常采集

absent(node_memory_MemFree_bytes{instance="k8s-master08"})

基础篇-03 prometheus算法及企业常用监控方案

去除小数点:

       Ceil():四舍五入,向上取最接近的整数,2.79 -> 3

       floor():向下取, 2.79 -> 2

基础篇-03 prometheus算法及企业常用监控方案

Delta():差值

查看一小时内的内存差距(类似于increase)delta(node_memory_MemFree_bytes{instance="k8s-master01"}[1h])/1024^2

基础篇-03 prometheus算法及企业常用监控方案

排序:

       sort():正序

       sort_desc():倒序

Label_join:

将数据中的一个或多个label的值赋值给一个新label(指定连接符,可以做一些数据的处理)

label_join(node_filesystem_files_free, "new_label", ",", "instance", "mountpoint")
将instance、mountpoint的值使用“,”连接,成为"new_label"的 value

基础篇-03 prometheus算法及企业常用监控方案

label_replace:根据数据中的某个label值,进行正则匹配,然后赋值给新label并添加到数据中

label_replace(node_filesystem_files_free, "host","$2", "instance", "(.*)-(.*)")

本题为根据instance的值通过正则匹配(.*)-(.*) $2匹配到的值赋值给新的label host中(将instance中k8s-node02中的“node02”匹配到然后添加到新标签 host 的 value中去,得到: host=node02)

基础篇-03 prometheus算法及企业常用监控方案

实战案例

CPU使⽤率 计算公式

采集的metrics

基础篇-03 prometheus算法及企业常用监控方案

简单的总结如下:
Linux系统开启后,CPU开始进⼊⼯作状态,每⼀个不同状态的CPU使⽤时间 都从零开始累计 ⽽我们在被监控客户端安装的node_exporter 会抓取 并返回给我们常⽤的⼋种CPU状态的累积时间数值

我们就先使⽤ ⽤户态CPU来给⼤家举个例⼦ ⽤户态CPU通常是 占⽤整个CPU状态 最多的类型 , 当然也有个别的情况,内核态 或 IO等待 占⽤的更多TOP => user%

12:00 开机后 ⼀直到 12:30 截⽌ 这30分钟的过程中(当前我们先暂时忽略 是⼏核CPU 就当作1核来说)

基础篇-03 prometheus算法及企业常用监控方案

所以 针对这30分钟 我们的CPU平均使⽤率就是 30%

基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案

increase()

基础篇-03 prometheus算法及企业常用监控方案

接下来 来看第⼆个问题

基础篇-03 prometheus算法及企业常用监控方案

sum() 函数

基础篇-03 prometheus算法及企业常用监控方案

拆分 并 解释 这个运算公式

注:新版本node_cpu_seconds_total取代了node_cpu
(1-((sum(increase(node_cpu_seconds_total{mode="idle"}[1m])) by (instance))/(sum(increase(node_cpu_seconds_total[1m])) by (instance))))*100

基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案

我们这个CPU的监控 其实采集的是 多台服务器的监控数据,怎么现在变成就⼀条线了???

基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案

也可以使用irate()占用百分比
100-(avg(irate(node_cpu_seconds_total{mode="idle"}[5m]))by(instance)*100)

举⼀反三 查看⼏个其他CPU状态时间的 使⽤率

基础篇-03 prometheus算法及企业常用监控方案

计算内核态:
(sum(increase(node_cpu_seconds_total{mode="system"}[1m])) by (instance)/sum(increase(node_cpu_seconds_total[1m])) by (instance))*100

基础篇-03 prometheus算法及企业常用监控方案

Prometheus 函数详细讲解

prometheus命令⾏格式

基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案

我就使⽤这个key 来进⾏我们的命令⾏ 正式的学习
count_netstat_wait_connections
默认输⼊后 会把所有 安装了这个采集项的 服务器数据都显⽰出来我们来学习 命令⾏的 过滤

基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案

过滤除了精确匹配 还有 模糊匹配

基础篇-03 prometheus算法及企业常用监控方案

标签过滤之后 就是数值的过滤
⽐如我们只想找出 wait_connection数量 ⼤于200的count_netstat_wait_connections{exported_instance=~"web.*"}> 400

基础篇-03 prometheus算法及企业常用监控方案

rate 函数的使⽤
rate 函数可以说 是prometheus提供的 最重要的函数之⼀

基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案

increase 函数的使⽤
increase 函数 其实和rate() 的概念及使⽤⽅法 ⾮常相似

基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案

变化平缓的数据用increase(),瞬息万变用rate()

sum函数使⽤

基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案

topk(x,)

基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案

count()

基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案

企业级监控数据采集⽅方法

prometheus 服务端的安装和后台稳定运⾏
prometheus 服务端配置⽂件写法
node_exporter 安装和后台运⾏
node_exporter 观察 和 采集数据
我们去到 node_exporter在 github上的地址来看看 我们伟⼤的社区开发者们 都给咱们提供了 哪些有⽤的采集项⽬ 链接:https://github.com/prometheus/node_exporter

prometheus 查询采集回来的各种数据
随便挑⼏个 key 就可以查看
另外 prometheus 的命令⾏ 本⾝也⽀持suggest 功能(输⼊提⽰)

基础篇-03 prometheus算法及企业常用监控方案

随便找个key 查询⼀下 是否有图输出 就可以了

使⽤我们之前的学过的 prometheus 命令⾏的形式 练习组合各种监控图
接下来 咱们找⼀个 ⽐较重要的key 然后 ⽤我们学过的 命令⾏⽅式 给他组成⼀个 临时监控图
⽐如node_cpu node_memory node_disk

基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案

企业级监控数据采集脚本开发实践(Pushgateway模块学习)

pushgateway 的介绍

基础篇-03 prometheus算法及企业常用监控方案


pushgateway 是另⼀种采⽤被动推送的⽅式(⽽不是exporter主动获取)获取监控数据的prometheus 插件,Pushgateway就是个数据中转站。提供API,支持数据生产者随时将数据推送过来。
它是可以单独运⾏在 任何节点上的插件(并不⼀定要在被监控客户端)然后 通过⽤户⾃定义开发脚本 把需要监控的数据 发送给pushgateway,然后pushgateway 再把数据 推送给prometheus server

pushgateway 的安装和运⾏和配置
pushgateway 跟 prometheus和 exporter ⼀样,解压后 直接运⾏
下载地址:https://prometheus.io/download/#pushgateway
github的官⽅地址:https://github.com/prometheus/pushgateway
pushgateway的配置 主要指的是 在prometheus sever端的配

基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案

mkdir -p /usr/local/node_exporter && cd /usr/local/node_export
tar xf pushgateway-1.4.3.linux-amd64.tar.gz
ln -s pushgateway-1.4.3.linux-amd64 pushgateway
daemonize -c /usr/local/node_exporter/pushgateway /usr/local/node_exporter/pushgateway/pushgateway

⾃定义编写脚本的⽅法 发送pushgateway 采集
pushgateway 本⾝是没有任何抓取监控数据的功能的 它只是被动的等待推送过来
pushgateway 编程脚本的写法
vi /usr/local/node_exporter/node_exporter_shell.sh

#!/bin/bash
instance_name=`hostname -f | cut -d'.' -f1` #本机机器名 变量⽤于之后的 标签
if [ $instance_name == "localhost" ];then # 要求机器名 不能是localhost 不然标签就没有区分了
echo "Must FQDN hostname"
exit 1
fi
# For waitting connections
label="count_netstat_wait_connections" # 定⼀个新的 key
count_netstat_wait_connections=`netstat -an | grep -i wait | wc -l`
#定义⼀个新的数值 netstat中 wait 的数量
echo "$label : $count_netstat_wait_connections"
echo "$label $count_netstat_wait_connections" | curl --databinary @- http://192.168.1.10:9091/metrics/job/pushgateway/instance/$instance_name

最后 把 key & value 推送给 pushgatway,将HTTP POST请求中的数据发送给HTTP服务器器(pushgateway),与⽤用户提交HTML表单时浏览器的行为完全⼀一样。HTTP POST请求中的数据为纯二进制数据

基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案

写入crontab, 默认 只能最短⼀分钟的间隔,如果希望 ⼩于⼀分钟的间隔 15s :sleep 15

crontab -e

# node_exporter_jobs_1
* * * * * sleep 15; /usr/local/node_exporter/node_exporter_shell.sh
基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案

使⽤pushgateway的优缺点
pushgateway虽然灵活 但是 也是存在⼀些短板

基础篇-03 prometheus算法及企业常用监控方案
基础篇-03 prometheus算法及企业常用监控方案

发布者:LJH,转发请注明出处:https://www.ljh.cool/7301.html

(0)
上一篇 2022年4月7日 下午1:51
下一篇 2022年4月11日 下午3:18

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注