写点什么

kube-prometheus 抓取 jvm 监控指标

用户头像
天飞
关注
发布于: 2020 年 05 月 21 日
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

---
rules:
- pattern: ".*"

3,在java的启动参数时,加入如下JAVA_OPTS

如果是tomcat应用,建议加到bin/setenv.sh文件里,通过k8s传env参数进行开发控制。

如果是jar包应用,则需要将这些选项植入JAVA_OPTS参数里。

if [ "$JMX_PROMETHEUS_MONITOR" != "Disable" ];then
JAVA_OPTS="$JAVA_OPTS -javaagent:$CATALINA_HOME/bin/jmx_prometheus_javaagent-0.3.1.jar=1234:$CATALINA_HOME/conf/jmx_exporter.yml"
fi

二,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。



apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: jvm-monitor
namespace: monitoring
spec:
endpoints:
- port: jvm-port
interval: 10s
path: /metrics
honorLabels: true
selector:
matchLabels:
prometheus-metrics: jvm
namespaceSelector:
any: true

这个yaml文件定义的要点:namespaceSelector定义了所有namespace中采集,matchLabels过滤指定的label可采集,endpoints定义了采集的端点(端口,间隔,路径)。



三,应用service的改造

---
apiVersion: v1
kind: Service
metadata:
name: demo
labels:
prometheus-metrics: jvm
namespace: default
spec:
type: NodePort
ports:
- name: java-app
port: 8080
targetPort: 8080
- name: jvm-port
port: 1234
targetPort: 1234
selector:
name: demo

如果要将一个java应用纳入prometheus的采集,要service改造的两点:一是在metadata下新增一个labels,二是新增一个端口,要将其命名,以契合前一个步骤中的定义。

PS:如果以后,有更多的java应用需要prometheus监控入库,则只需要在service上加入label和ports命名,就可以了。ServiceMonitor是不再需要作改动的(除非抓取的path改变,可以新建一个servicemonitor来对应)。

四,通过prometheus的board看输出数据,或是grafana里看图。



发布于: 2020 年 05 月 21 日阅读数: 216
用户头像

天飞

关注

少年一段风流事, 只许佳人独自知。 2018.09.06 加入

一枚作运维开发的老码农~

评论

发布
暂无评论
kube-prometheus抓取jvm监控指标