这个细节,迷惑了我一段时间,前面也写过一篇blog,描述过这个问题。

今天看到一种更好的解决方法。

记录一下。

prometheus在k8s集群里,抓取应用的metrics。

是需要平台侧和应用侧相互配合的。

如:

prometheus平台侧定义的job如下:

  1. - job_name: 'kubernetes-app-metrics'
  2. tls_config:
  3. ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
  4. bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  5. kubernetes_sd_configs:
  6. #The endpoints role discovers targets from listed endpoints of a service. For each
  7. #endpoint address one target is discovered per port. If the endpoint is backed by
  8. #a pod, all additional container ports of the pod, not bound to an endpoint port,
  9. #are discovered as targets as well
  10. - role: endpoints
  11. relabel_configs:
  12. # 只保留endpoint中含有prometheus.io/scrape: 'true'的annotation的endpoint
  13. - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape, __meta_kubernetes_service_annotation_prometheus_io_app_metrics]
  14. regex: true;true
  15. action: keep
  16. # 将用户指定的进程的metrics_path替换默认的metrics_path
  17. - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_app_metrics_path]
  18. action: replace
  19. target_label: __metrics_path__
  20. regex: (.+)
  21. # 用pod_ip和用户指定的进程的metrics端口组合成真正的可以拿到数据的地址来替换原始__address__
  22. - source_labels: [__meta_kubernetes_pod_ip, __meta_kubernetes_service_annotation_prometheus_io_app_metrics_port]
  23. action: replace
  24. target_label: __address__
  25. regex: (.+);(.+)
  26. replacement: $1:$2
  27. # 去掉label name中的前缀__meta_kubernetes_service_annotation_prometheus_io_app_info_
  28. - action: labelmap
  29. regex: __meta_kubernetes_service_annotation_prometheus_io_app_info_(.+)

则,应用则的service里(pod里也可以,但service里更好),需要按约定,在annotation里作如下写法,才能OK的。

  1. prometheus.io/scrape: 'true'
  2. prometheus.io/app-metrics: 'true'
  3. prometheus.io/app-metrics-port: '8080'
  4. prometheus.io/app-metrics-path: '/metrics'
  5. prometheus.io/app-info-env: 'test'
  6. prometheus.io/app-info-tenant: 'test-tenant'
  7. prometheus.io/app-info-name: 'test-app'

两者结合,prometheus就能很好的抓取到应用的metrics了。

  1. 根据prometheus.io/scrape: 'true'获知对应的endpoint是需要被scrape的
  2. 根据prometheus.io/app-metrics: 'true'获知对应的endpoint中有应用进程暴露的metrics
  3. 根据prometheus.io/app-metrics-port: '8080'获知进程暴露的metrics的端口号
  4. 根据prometheus.io/app-metrics-path: '/metrics'获知进程暴露的metrics的具体路径
  5. 可能还需要根据平台和业务的需求添加其他一些以prometheus.io/app-info-为前缀的annotation,Prometheus截取下前缀,保留后半部分做key,连同value保留下来。这样满足在平台对应用做其他一些标识的需求。比如加入如下annotation来标识应用所属的的环境、租户以及应用名称。

prometheus的平台侧和应用侧结合,实现应用的metrics的抓取的更多相关文章

  1. PHP中CURL技术模拟登陆抓取网站信息,用与微信公众平台成绩查询

    伴随微信的红火,微信公众平台成为许多开发者的下一个目标.笔者本身对于这种新鲜事物没有如此多的吸引力.但是最近有朋友帮忙开发微信公众平台中一个成绩查询的功能.于是便在空余时间研究了一番. 主要的实现步骤 ...

  2. Python爬虫实例(二)使用selenium抓取斗鱼直播平台数据

    程序说明:抓取斗鱼直播平台的直播房间号及其观众人数,最后统计出某一时刻的总直播人数和总观众人数. 过程分析: 一.进入斗鱼首页http://www.douyu.com/directory/all 进入 ...

  3. java平台利用jsoup开发包,抓取优酷视频播放地址与图片地址等信息。

    /********************************************************************************************  * aut ...

  4. 【prometheus 抓取源】

    配置prometheus从prometheus爬取数据 prometheus提供了下面这个端口来让其他prometheus来抓取(scrape)自己的时序数据: http://prometheus_i ...

  5. 【prometheus抓取间隔】scrape_interval

    prometheus如何设置比较合理: https://www.robustperception.io/keep-it-simple-scrape_interval-id 总结:一般设置在10s-60 ...

  6. Prometheus 监控平台的搭建

    1. 环境准备 两台ubuntu 16.04 服务器内网IP 作用 安装软件 172.16.4.11                 监控的服务端                Prometheus( ...

  7. box-shadow单侧投影,双侧投影,不规则图案投影

    底部投影box-shadow: 0 5px 4px -4px black; 底部右侧投影 3px 3px 6px -3px black 两侧投影 box-shadow: 7px 0 7px -7px ...

  8. Android平台抓取native crash log

    Android开发中,在Java层可以方便的捕获crashlog,但对于 Native 层的 crashlog 通常无法直接获取,只能通过系统的logcat来分析crash日志. 做过 Linux 和 ...

  9. 使用prometheus抓取k8s的metrics作监控时,cAdvisor和kubelet配置有何差别?

    按网上说法: 目前cAdvisor集成到了kubelet组件内,可以在kubernetes集群中每个启动了kubelet的节点使用cAdvisor提供的metrics接口获取该节点所有容器相关的性能指 ...

随机推荐

  1. Minimum Sum LCM UVA - 10791(分解质因子)

    对于一个数n 设它有两个不是互质的因子a和b   即lcm(a,b) = n 且gcd为a和b的最大公约数 则n = a/gcd * b: 因为a/gcd 与 b 的最大公约数也是n 且 a/gcd ...

  2. emoji表情与unicode编码互转(JS,JAVA,C#)

    1.表情字符转编码 [C#] Encoding.UTF32.GetBytes("

  3. 输入一个十进制的数到dx_ax,然后十六进制转十进制输出

    ;HtoD data segment n dw ? data ends stack segment db dup(?) stack ends code segment assume cs:code,s ...

  4. 127. Word Ladder(M)

    127. Word LadderGiven two words (beginWord and endWord), and a dictionary's word list, find the leng ...

  5. shell中exec命令

    1.find中的-exec参数 在当前目录下(包含子目录),查找所有txt文件并找出含有字符串"bin"的行 find ./ -name "*.txt" -ex ...

  6. 「Vue」JS方法学习

    1.构造函数 大写开头的,能被NEW一个新实例,实例即执行回调函数 异步返回数据.then指定回调函数的时候,成功的回调函数必须传,失败的回调可以不传 var fs = require('fs') f ...

  7. Sparrow.Chart.Wpf控件的动态调用

    最近需要在Wpf程序中显示曲线,感觉Sparrow.Chart.Wpf控件不错(http://sparrowtoolkit.codeplex.com/),完全开源的一个控件支持,可以通过nuget下载 ...

  8. Java迭代器用法

    public class Test01 { public static void main(String[] args) { List list = new ArrayList(); list.add ...

  9. 阿里云Tengine和Openresty/1.11.2.3 数据对比

    HLS播放延迟测试:阿里云48s ,openresy 31s Cache-Control: max-age=300 NGINX下配置CACHE-CONTROL   Content-Length:637 ...

  10. codeforces 235 div2 A. Vanya and Cards

    Vanya loves playing. He even has a special set of cards to play with. Each card has a single integer ...