🗒️Prometheus pushgateway采集shell脚本获取的指标
2023-2-2
| 2023-4-10
0  |  0 分钟
type
status
date
slug
summary
tags
category
icon
password

1. 背景

Prometheus的主流采集指标方式是expoter,如果不想用expoter(菜)呢?pushgateway可以满足,毕竟这些指标其实就是一个特定格式的文本。 但是搜索得到的大部分文档只是监控了一个服务的多个指标,而且这个带监控的服务通常是写死的,如果想动态监控多个服务的多个指标呢? 另外,由于crontab最小粒度是一分钟,如果想精细到秒,可以参考这个

2.实现原理

2.1.获取原始的动态指标

shell 批量获取、整合(如kubectl top pods)k8s集群多个待监控服务的相关项,例如服务名、指标B值、指标B值... 下面是样例
cat test.csv test-deployment-nginx,5,101 test-deployment-redis,3,99.1

2.2.创建监控指标模板文件

cat sample.txt #HELP pod_cpu pod_mem % #TYPE pod_cpu pod_mem gauge pod_cpu{instance="node1",job="test",service="svc"} cpu_value pod_mem{instance="node1",job="test",service="svc"} mem_value

2.3.awk格式化

为什么不直接用for循环而采用awk?因为这个awk更简洁,手动狗头。 将1的字段按照2的模板格式化输出,脚本参考如下,脚本源于邮件格式化 执行脚本命令为awk -f prometh.awk test.csv
cat prometh.awk #!/bin/awk BEGIN { FS=","; template="sample.txt"; output="out"; //单独输出的文本名前缀 #getline; //如果获取的指标文本第一行需要略过,打开getline注释。 NR=0; } { # Read relevant fields from input file svc=$1; cpu=$2; mem=$3; # Set output filename outfile=(output NR ".txt"); //${文本名}${行数}.txt ,空格不能省略 # Read a line from template, replace special fields, and # print result to output file while ( (getline ln < template) > 0 ) { #替换字段 sub(/svc/,svc,ln); sub(/cpu_value/,cpu,ln); sub(/mem_value/,mem,ln); print(ln) ;//统一打印 #print(ln) >outfile ; //如果需要单独输出文件,打开此项 } # Close template and output file in advance of next record close(outfile); close(template); }
输出样例如下
awk -f prometh.awk test.csv #HELP pod_cpu pod_mem % #TYPE pod_cpu pod_mem gauge pod_cpu{instance="node1",job="test",service="test-deployment-nginx"} 5 pod_mem{instance="node1",job="test",service="test-deployment-nginx"} 101 #HELP pod_cpu pod_mem % #TYPE pod_cpu pod_mem gauge pod_cpu{instance="node1",job="test",service="test-deployment-redis"} 3 pod_mem{instance="node1",job="test",service="test-deployment-redis"} 99.1

2.4.上述样例文本重定向到指定文本,curl推送到pushgateway

以上
 
技术
  • 监控
  • 阿里sls采集logstash处理过的日志kafka的broker不均衡和leader不均衡处理
    目录