当前位置: 首页 > article >正文

【Prometheus】实战二:Prometheus数据监控自定义组件Pushgateway

一,PromQL语法

概念

PromQL(Prometheus Query Language)是 Prometheus 自己开发的表达式语言,内置函数很多。使用它可以对时序数据进行筛选和聚合。

数据类型

  • 瞬时向量 (Instant vector): 一组时序,每个时序只有一个采样值。
  • 区间向量 (Range vector): 一组时序,每个时序包含一段时间内的多个采样值。
  • 标量数据 (Scalar): 一个浮点数。
  • 字符串 (String): 一个字符串,暂时未用。

匹配标签值

=:完全相等
!=: 不相等
=~: 正则表达式匹配
!~: 正则表达式不匹配

时长的单位简写:

s:seconds
m:minutes
h:hours
d:days
w:weeks
y:years

聚合操作符

sum:求和
min:最小值
max:最大值
avg:平均值
stddev:标准差
stdvar:方差
count:元素个数
count_values:等于某值的元素个数
bottomk:最小的 k 个元素
topk:最大的 k 个元素
quantile:分位数

函数

abs():绝对值
sqrt():平方根
exp():指数计算
ln():自然对数
ceil():向上取整
floor():向下取整
round():四舍五入取整
delta():计算区间向量里每一个时序第一个和最后一个的差值
sort():排序

书写样例

# 用大括号包围起来的一组标签键值对来对时序进行过滤
apiserver_request_total {job="kubernetes-apiserver",resource="pods"}

# 选出了container是kube-scheduler或kube-proxy或kube-apiserver的时序数据
container_processes{container=~"kube-scheduler|kube-proxy|kube-apiserver"}

# 选出了所有度量指标为apiserver_request_total且resource是pod的时序在过去1 分钟的采样值
apiserver_request_total{job="kubernetes-apiserver",resource="pods"}[1m]

# 选择度量名称为apiserver_request_total的所有时序在 5 分钟前的采样值。
apiserver_request_total{job="kubernetes-apiserver",resource="pods"} offset 5m

# 选择apiserver_request_total 度量指标在 1 周前的这个时间点过去 5 分钟的采样值。
apiserver_request_total{job="kubernetes-apiserver",resource="pods"} [5m] offset 1w

二,Pushgateway自定义数据采集

Pushgateway是Prometheus的一个组件。

Prometheus server默认是通过exporter主动获取数据(默认采取pull拉取数据)。

Pushgateway是通过被动方式推送数据到Prometheus server。

用户可以自定义的监控脚本,把需要监控的数据发送给Pushgateway, 然后Pushgateway再把数据发送给Prometheus server。

1,安装

导入所需环境镜像:pushgateway.tar.gz

在k8s-node节点操作

ctr -n=k8s.io images import pushgateway.tar.gz
# 或者命令
docker load -i pushgateway.tar.gz

创建容器:

docker run -d --name pushgateway -p 9091:9091 prom/pushgateway

在浏览器访问192.168.40.181:9091出现如下ui界面:
在这里插入图片描述

2,配置

在master节点,更改配置文件prometheus-alertmanager-cfg.yaml,添加一下内容:

- job_name: 'pushgateway'
      scrape_interval: 5s
      static_configs:
      - targets: ['192.168.40.181:9091']  # 安装Pushgateway的node的ip地址+端口
  honor_labels: true

添加 honor_labels: true 参数:
可以避免promethues的targets列表中的job_name是pushgateway的 job 、instance 和上报到pushgateway数据的job和instance冲突。

配置完成后,使得配置生效后,查看targets列表:
在这里插入图片描述

3,测试推送数据

(1)向 {job=“test_job”} 添加单条数据
echo " metric 3.6" | curl --data-binary @- http://192.168.40.181:9091/metrics/job/test_job

 # 注:--data-binary 表示发送二进制数据。采用POST方式发送的!
(2)添加复杂数据
cat <<EOF | curl --data-binary @- http://192.168.40.181:9091/metrics/job/test_job/instance/test_instance
#TYPE node_memory_usage gauge
node_memory_usage 36
# TYPE memory_total gauge
node_memory_total 36000
EOF
(3)删除数据
# 删除某个组下某个实例的所有数据
curl -X DELETE http://192.168.40.181:9091/metrics/job/test_job/instance/test_instance


# 删除某个组下的所有数据:
curl -X DELETE http://192.168.40.181:9091/metrics/job/test_job

4,自定义shell脚本推送数据

把192.168.40.181这个机器的内存数据上报到pushgateway

# cat push.sh
node_memory_usages=$(free -m | grep Mem | awk '{print $3/$2*100}')
job_name="memory"
instance_name="192.168.40.181"
cat <<EOF | curl --data-binary @- http://192.168.40.181:9091/metrics/job/$job_name/instance/$instance_name
#TYPE node_memory_usages  gauge
node_memory_usages $node_memory_usages
EOF

设置计划任务,定时上报数据

chmod +x push.sh
crontab -e  
*/1 * * * * /usr/bin/bash  /root/push.sh

http://www.kler.cn/a/322333.html

相关文章:

  • Jmeter的后置处理器(二)
  • #define定义宏(3)
  • [已解决]Tomcat 9.0.97控制台乱码
  • 服务器数据恢复—热备盘未激活导致硬盘掉线的raid5阵列崩溃的数据恢复案例
  • chatgpt训练需要什么样的gpu硬件
  • 若依权限控制
  • Day101 代码随想录打卡|动态规划篇--- 分割等和子集
  • 帆软通过JavaScript注入sql,实现数据动态查询
  • [Linux#55][网络协议] 序列化与反序列化 | TcpCalculate为例
  • 微信小程序加载H5页面及与H5页面通信的实战教程
  • 代码随想录算法训练营 | 二叉树理论基础
  • 【python】函数的定义
  • 简历技能面试问答
  • MySQL InnoDB MVCC数据结构分析
  • 基于Hadoop的NBA球员大数据分析及可视化系统
  • Splashtop 在2024年 CybersecAsia 读者之选奖项评选中荣获新星奖
  • 【Vue】以RuoYi框架前端为例,ElementUI封装图片上传组件——将图片信息转成base64后提交到后端保存
  • opengauss使用遇到的问题,随时更新
  • android 页面布局(1)
  • 从git删除/上传新的文件-简单命令菜鸟教程
  • 常用并发设计模式精讲
  • Unity八股总结
  • java在开发中的总结
  • HalconDotNet的特征点检测和匹配方法
  • openinstall鸿蒙SDK再升级,功能全面支持HarmonyOS NEXT
  • 第五部分:3---信号的介绍、产生、保存、处理