k8s prometheus JMXExporter
时间: 2019-09-30来源:OSCHINA
前景提要
「深度学习福利」大神带你进阶工程师,立即查看>>>
简述
在k8s上配置 Prometheus JMXExporter 收集JVM metric
假设前置条件
已经在k8s集群中运行Prometheus,并且配置好了 k8s ServiceAccount 。即Prometheus能正确访问k8s API。
示例中使用的Prometheus配置 链接
文中使用到的文件: https://github.com/guyongquan/k8s_prometheus_jmxexporter
实现步骤 配置并运行JMX Explorter 配置Prometheus自动发现JMX Exporter
配置并运行JMX Explorter
参考文档 链接
此处以tomcat为例进行说明
为了方便,所需的jar和配置文件直接通过ConfigMap挂载(生产环境中不建议如此,而是应该直接打到镜像中):
下载所需文件: jmx_prometheus_javaagent-0.12.0.jar , tomcat.yml
创建ConfigMap:
kubectl.exe -n iptl-kc create cm jmxexporterfiles --from-file=jmxexporter.jar=jmx_prometheus_javaagent-0.12.0.jar --from-file=tomcat.yml
部署tomcat的k8s配置文件: apiVersion: apps/v1 kind: Deployment metadata: labels: app: tomcat name: tomcat spec: replicas: 1 selector: matchLabels: app: tomcat template: metadata: annotations: learn.guyongquan.live/prometheusjmxexporterport: "18080" labels: app: tomcat spec: containers: - env: - name: CATALINA_OPTS value: -javaagent:/data/jmxexporter.jar=18080:/data/tomcat.yml image: tomcat name: tomcat imagePullPolicy: Always resources: requests: cpu: 200m memory: 200Mi ports: - containerPort: 8080 livenessProbe: tcpSocket: port: 8080 volumeMounts: - mountPath: /data/jmxexporter.jar name: jmxjar subPath: jmxexporter.jar - mountPath: /data/tomcat.yml name: jmxconfig subPath: tomcat.yml restartPolicy: Always volumes: - name: jmxjar configMap: name: jmxexporterfiles items: - key: jmxexporter.jar path: jmxexporter.jar - name: jmxconfig configMap: name: jmxexporterfiles items: - key: tomcat.yml path: tomcat.yml
上述配置中需要特别说明的地方:annotation learn.guyongquan.live/prometheusjmxexporterport: "18080",后续配置Prometheus服务发现时依赖于此名称,值18080则是JMX Exporter的端口,即env中的CATALINA_OPTS=-javaagent:/data/jmxexporter.jar= 18080 :/data/tomcat.yml
tomcat pod running之后执行:
kubectl -n iptl-kc port-forward deploy/tomcat 18080:18080
然后可以通过访问http://localhost:18080/可以看到JMX Exporter暴露的JVM metric:

配置Prometheus 服务发现
主要参考文档 https://prometheus.io/docs/prometheus/latest/configuration/configuration/#pod
官方示例: https://github.com/prometheus/prometheus/blob/master/documentation/examples/prometheus-kubernetes.yml
job配置如下: global: scrape_interval: 30s scrape_timeout: 10s evaluation_interval: 30s scrape_configs: - job_name: 'jmxexporter' kubernetes_sd_configs: - role: pod relabel_configs: - source_labels: [__meta_kubernetes_pod_annotationpresent_learn_guyongquan_live_prometheusjmxexporterport] action: keep regex: true - source_labels: [__meta_kubernetes_pod_ip,__meta_kubernetes_pod_annotation_learn_guyongquan_live_prometheusjmxexporterport] action: replace regex: (.*);(\d+) replacement: $1:$2 target_label: __address__ - source_labels: [__meta_kubernetes_pod_name] target_label: instance scheme: http tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
上述配置中需要特别说明的部分: - source_labels: [__meta_kubernetes_pod_annotationpresent_learn_guyongquan_live_prometheusjmxexporterport] action: keep regex: true
表示只有当pod存在annotation learn.guyongquan.live/prometheusjmxexporterport才会被监控 - source_labels: [__meta_kubernetes_pod_ip,__meta_kubernetes_pod_annotation_learn_guyongquan_live_prometheusjmxexporterport] action: replace regex: (.*);(\d+) replacement: $1:$2 target_label: __address__
对__address__进行了设置。

修改Prometheus配置生效(重启或者刷新)后执行命令:
kubectl -n iptl-kc port-forward deploy/prometheus 9090:webui
然后可以通过 http://localhost:9090/service-discovery#job-jmxexporter 看到配置后的效果:

如图所示tomcat pod已被发现。
targets页面

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

热门排行