腾讯云手把手教你使用Prometheus监控JVM

时间: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:&lt;jar&gt;=&lt;port&gt;:&lt;config&gt;。

< ">这里使用了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

腾讯云手把手教你使用Prometheus监控JVM

上一篇:腾讯云:K8S节点异常怎么办?TKE节点健康检查和
下一篇:亚马逊测评怎么赚钱?如何计算利润?


版权声明:以上主题为“腾讯云手把手教你使用Prometheus监控JVM"的内容可能是本站网友自行发布,或者来至于网络。如有侵权欢迎联系我们客服QQ处理,谢谢。
相关内容
推荐内容
扫码咨询
    腾讯云手把手教你使用Prometheus监控JVM
    打开微信扫码或长按识别二维码

小提示:您应该对本页介绍的“腾讯云手把手教你使用Prometheus监控JVM”相关内容感兴趣,若您有相关需求欢迎拨打我们的服务热线或留言咨询,我们尽快与您联系沟通腾讯云手把手教你使用Prometheus监控JVM的相关事宜。

关键词:腾讯云手把手教你使用P

关于 | 业务 | 案例 | 免责 | 隐私
客服邮箱:sales@1330.com.cn
电话:400-021-1330 | 客服QQ:865612759
沪ICP备12034177号 | 沪公网安备31010702002418号