kube-prometheus 抓取 jvm 监控指标
Kube-promethes是基于prometheus operator的集成部署方案,整体构架如下图:
JVM指标抓取的规范,主要原理是用prometheus为java应用定制的jmxprometheusjavaagent-0.3.1.jar软件包,实现jvm相关指标的抓取。
JVM的监控指标入库,分为三个方面,镜像配置的调整,ServiceMonitor的建立,应用service的改造。
一,镜像配置的调整
1,将jmx_prometheus_javaagent-0.3.1.jar文件cp到镜像目录
URL
https://github.com/prometheus/jmx_exporter
2,建一个最简jmx_exporter.yml,抓取所有metric
3,在java的启动参数时,加入如下JAVA_OPTS
如果是tomcat应用,建议加到bin/setenv.sh文件里,通过k8s传env参数进行开发控制。
如果是jar包应用,则需要将这些选项植入JAVA_OPTS参数里。
二,ServiceMonitor的建立
一个Kubernetes自定义资源(和kind: Prometheus一样是CRD),该资源描述了Prometheus Server的Target列表,Operator 会监听这个资源的变化来动态的更新Prometheus Server的Scrape targets并让prometheus server去reload配置(prometheus有对应reload的http接口/-/reload)。而该资源主要通过Selector来依据 Labels 选取对应的Service的endpoints,并让 Prometheus Server 通过 Service 进行拉取(拉)指标资料(也就是metrics信息),metrics信息要在http的url输出符合metrics格式的信息,ServiceMonitor也可以定义目标的metrics的url。
这个yaml文件定义的要点:namespaceSelector定义了所有namespace中采集,matchLabels过滤指定的label可采集,endpoints定义了采集的端点(端口,间隔,路径)。
三,应用service的改造
如果要将一个java应用纳入prometheus的采集,要service改造的两点:一是在metadata下新增一个labels,二是新增一个端口,要将其命名,以契合前一个步骤中的定义。
PS:如果以后,有更多的java应用需要prometheus监控入库,则只需要在service上加入label和ports命名,就可以了。ServiceMonitor是不再需要作改动的(除非抓取的path改变,可以新建一个servicemonitor来对应)。
四,通过prometheus的board看输出数据,或是grafana里看图。
略
版权声明: 本文为 InfoQ 作者【天飞】的原创文章。
原文链接:【http://xie.infoq.cn/article/8c16fe9711bec89f8ec5b8a51】。文章转载请联系作者。
评论