时间:2021-07-15 | 标签: | 作者:Q8 | 来源:roc 陈鹏网络
小提示:您能找到这篇{腾讯云手把手教你使用Prometheus监控JVM}绝对不是偶然,我们能帮您找到潜在客户,解决您的困扰。如果您对本页介绍的腾讯云手把手教你使用Prometheus监控JVM内容感兴趣,有相关需求意向欢迎拨打我们的服务热线,或留言咨询,我们将第一时间联系您! |
概述 < ">当你的Java业务容器化上K8S后,如果对其进行监控呢?Prometheus社区开发了JMX Exporter来导出JVM的监控指标,以便使用Prometheus来采集监控数据。本文将介绍如何利用Prometheus与JMX Exporter来监控你Java应用的JVM。 什么是JMX Exporter? < ">JMX Exporter利用Java的JMX机制来读取JVM运行时的一些监控数据,然后将其转换为Prometheus所认知的metrics格式,以便让Prom处理危机舆情etheus对其进行监控采集。 < ">那么,JMX又是什么呢?它的全称是:< background-color: rgb(242, 242, 242);">Java Management Extensions。顾名思义,是管理Java的一种扩展框架,JMX Exporter正是基于此框架来读取JVM的运行时状态的。 如何使用JMX Exporter 暴露JVM监控指标? < ">下面介绍如何通过JMX Exporter来暴露Java应用的JVM监控指标。 JMX Exporter的两种用法 < ">JMX-Exporter提供了两种用法: < ">1.启动独立进程。JVM启动时指定参数,暴露JMX的RMI接口,JMX-Exporter调用RMI获取JVM运行时状态数据,转换为Prometheus metrics格式,并暴露端口让Prometheus采集。 < ">2.JVM进程内启动(in-process)。JVM启动时指定参数,通过javaagent的形式运行JMX-Exporter的jar包,进程内读取JVM运行时状态数据,转换为Prometheus metrics格式,并暴露端口让Prometheus采集。 < ">官方不推荐使用第一种方式,一方面配置复杂,另一方面因为它需要一个单独的进程,而这个进程本身的监控又成了新的问题,所以本文重点围绕第二种用法讲如何在K8S环境下使用JMX Exporter暴露JVM监控指标。 打包镜像 < ">使用第二种用法,启动JVM时需要指定JMX Exporter的jar包文件和配置文件。jar包是二进制文件,不好通过configmap挂载,配置文件我们几乎不需要修改,所以建议是直接将JMX Exporter的jar包和配置文件都打包到业务容器镜像中。 < ">首先准备一个制作镜像的目录,放入JMX Exporter配置文件< background-color: rgb(242, 242, 242);">prometheus-jmx-config.yaml: --- ssl:false lowercaseOutputName:false lowercaseOutputLabelNames:false 注:更多配置项请参考官方文档。 < ">然后准备jar包文件,可以在jmx_exporter的Github页面找到最新的jar包下载地址,下载到当前目录: wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.13.0/jmx_prometheus_javaagent-0.13.0.jar < ">再准备Dockerfile,这里以tomcat为例: FROM tomcat:jdk8-openjdk-slim ADD prometheus-jmx-config.yaml/prometheus-jmx-config.yaml ADD jmx_prometheus_javaagent-0.13.0.jar/jmx_prometheus_javaagent-0.13.0.jar < ">最后编译镜像: docker build.-t ccr.ccs.tencentyun.com/imroc/tomcat:jdk8 < ">搞定!如果想要更简单,可以利用docker多阶段构建,省掉手动下载jar包的步骤,Dockerfile示例: FROM ubuntu:16.04 as jar WORKDIR/ RUN apt-get update-y RUN DEBIAN_FRONTEND=noninteractive apt-get install-y wget RUN wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.13.0/jmx_prometheus_javaagent-0.13.0.jar FROM tomcat:jdk8-openjdk-slim ADD prometheus-jmx-config.yaml/prometheus-jmx-config.yaml COPY--from=jar/jmx_prometheus_javaagent-0.13.0.jar/jmx_prometheus_javaagent-0.13.0.jar 部署Java应用 < ">有了打包好的镜像,下一步我们看下如何部署应用到K8S,关键点在于如何修改JVM启动参数以便启动时加载JMX Exporter。JVM启动时会读取JAVA_OPTS环境变量,作为额外的启动参数,所以我们部署时可以为应用增加一下这个环境变量,示例: apiVersion: apps/v1 kind: Deployment metadata: name: tomcat spec: replicas: 1 selector: matchLabels: app: tomcat template: metadata: labels: app: tomcat spec: containers: - name: tomcat image: ccr.ccs.tencentyun.com/imroc/tomcat:jdk8 env: - name: JAVA_OPTS value: "-javaagent:/jmx_prometheus_javaagent-0.13.0.jar=8088:/prometheus-jmx-config.yaml" --- apiVersion: v1 kind: Service metadata: name: tomcat labels: app: tomcat spec: type: ClusterIP ports: - port: 8080 protocol: TCP name: http - port: 8088 protocol: TCP name: jmx-metrics selector: app: tomcat < ">启动参数格式:-javaagent:<jar>=<port>:<config>。 < ">这里使用了8088端口暴露JVM的监控指标,可自行更改。 添加Prometheus监控配置 < ">暴露了JVM的监控指标,现在来配置下Prometheus,让监控数据被采集到,配置示例: - job_name: tomcat scrape_interval: 5s kubernetes_sd_configs: - role: endpoints namespaces: names: - default relabel_configs: - action: keep source_labels: - __meta_kubernetes_service_label_app regex: tomcat - action: keep source_labels: - __meta_kubernetes_endpoint_port_name 麦当劳危机公关活动设计方 regex: jmx-metrics < ">如果是安装了prometheus-operator,也可以通过创建ServiceMonitor的CRD对象来配置Prometheus: apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: tomcat namespace: default labels: app: tomcat spec: endpoints: - port: jmx-metrics interval: 5s namespaceSelector: matchNames: - default selector: matchLabels: app: tomcat 添加Grafana监控面板 < ">采集到了数据,下面看下如何展示数据,如果熟悉Prometheus和Grafana,可自行根据指标设计需要的面板,社区也有提供现成的,不过都有些老了,部分视图可能展示不出来,用的比较多的是https://grafana.com/grafana/dashboards/8563,可以直接导入,面板效果图: 参考资料 JMX Exporter项目地址:https://github.com/prometheus/jmx_exporter JVM监控面板:https://grafana.com/grafana/dashboards/8563 |
上一篇:腾讯云:K8S节点异常怎么办?TKE节点健康检查和
下一篇:亚马逊测评怎么赚钱?如何计算利润?
基于对传统行业渠道的理解,对互联网行业的渠道我们可以下这样一个定义:一切...
小米应用商店的后台操作和苹果是比较相似的,因为都能填写100字符关键词,允许...
小米的规则目前是在变更中的,但是根据经验小米的搜索排名评分的高低是个很重...
为了恰饭,有时候是要接入一些广告的,所以FB也专门有一个广告的SDK,这就是A...
在 2018 年于旧金山举行的游戏开发者大会上,Amazon Web Services (AWS) 曾宣布,目前世...
关于Facebook Audience Network如何收款的问题,其实官方已经给了详细的步骤。本文主要...
本文介绍了Audience Network对广告载体的质量检查,以及它重点广告形式需要注意的问...
随着iOS开发,作为开发者或公司需要针对iOS App开发涉及的方方面面作出对应的信息...
Facebook和谷歌对出海企业广告渠道都很熟悉,但事实上,在国外还有一些渠道也很...
卖家从做号的第1分钟开始,就一定要想好变现路径是什么?一定要以变现为目的去...
小提示:您应该对本页介绍的“腾讯云手把手教你使用Prometheus监控JVM”相关内容感兴趣,若您有相关需求欢迎拨打我们的服务热线或留言咨询,我们尽快与您联系沟通腾讯云手把手教你使用Prometheus监控JVM的相关事宜。
关键词:腾讯云手把手教你使用P