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

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

记录一下。

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

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

如:

prometheus平台侧定义的job如下:

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

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

prometheus.io/scrape: 'true'
prometheus.io/app-metrics: 'true'
prometheus.io/app-metrics-port: '8080'
prometheus.io/app-metrics-path: '/metrics'
prometheus.io/app-info-env: 'test'
prometheus.io/app-info-tenant: 'test-tenant'
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. Appium+python自动化环境搭建(小白适用)

    写在前面: 没开始搭建前听好多人说,学习appium80%的人都死于环境搭建,所以一开始很紧张,在搭建环境中也确实遇到了好几个问题,由于之前本人使用app测试经验很少,所以相当于app小白,因此有的问 ...

  2. POJ 1797 Heavy Transportation / SCU 1819 Heavy Transportation (图论,最短路径)

    POJ 1797 Heavy Transportation / SCU 1819 Heavy Transportation (图论,最短路径) Description Background Hugo ...

  3. insserv: Script <name> is broken: incomplete LSB comment.

    insserv: Script <name> is broken: incomplete LSB comment. insserv: missing `Required-Start:' e ...

  4. P3932 浮游大陆的68号岛

    P3932 浮游大陆的68号岛 妖精仓库的储物点可以看做在一个数轴上.每一个储物点会有一些东西,同时他们之间存在距离. 每次他们会选出一个小妖精,然后剩下的人找到区间[l,r]储物点的所有东西,清点完 ...

  5. Windows服务时间控件怎么调试

    写了timer,调试的话在构造函数里面把Elapsed方法写成null,null就可以调试了 public PSJCService() { InitializeComponent(); Getuser ...

  6. Codeforces #55D-Beautiful numbers (数位dp)

    D. Beautiful numbers time limit per test 4 seconds memory limit per test 256 megabytes input standar ...

  7. Windows系统安装————windows7 企业版 无法安装 NET.framework4.52-4.6版本在WIN7下解决办法

    官方安装包下载地址:https://www.microsoft.com/zh-cn/download/details.aspx?id=48137 我安装了NMM后提示NET.framework版本太低 ...

  8. 公告:关注canvas的同学注意了

    因为我之前把基础大致都帮各位详细讲过了! 什么fill,line,乱七八糟的一堆.都有demo了 所以我最近写起来可能会快很多了!如果有不明白的只能请各位回顾下之前的文章了 毕竟如果按照这个进度写文章 ...

  9. dwz中给表单项获取,设置值

    $.pdialog._current.find('form input#inputId').val(54);

  10. Android改进版CoverFlow效果控件

    最近研究了一下如何在Android上实现CoverFlow效果的控件,其实早在2010年,就有Neil Davies开发并开源出了这个控件,Neil大神的这篇博客地址http://www.inter- ...