详情页标题前

腾讯云容器服务使用 Prometheus 监控 Java 应用同尘科技

详情页1

操作场景

Prometheus 社区开发了 JMX Exporter 用于导出 JVM 的监控指标,以便使用 Prometheus 来采集监控数据。当您的 Java 业务容器化至 Kubernetes 后,可通过本文了解如何使用 Prometheus 与 JMX Exporter 来监控 Java 应用。

JMX Exporter 简介

Java Management Extensions,JMX 是管理 Java 的一种扩展框架,JMX Exporter 基于此框架读取 JVM 的运行时状态。JMX Exporter 利用 Java 的 JMX 机制来读取 JVM 运行时的监控数据,然后将其转换为 Prometheus 可辨识的 metrics 格式,以便让 Prometheus 对其进行监控采集。 JMX Exporter 提供启动独立进程JVM 进程内启动(in-process)两种方式暴露 JVM 监控指标:1. 启动独立进程
JVM 启动时指定参数,暴露 JMX 的 RMI 接口。JMX Exporter 调用 RMI 获取 JVM 运行时状态数据,转换为 Prometheus metrics 格式,并暴露端口让 Prometheus 采集。
2. JVM 进程内启动(in-process)
JVM 启动时指定参数,通过 javaagent 的形式运行 JMX Exporter 的 jar 包,进程内读取 JVM 运行时状态数据,转换为 Prometheus metrics 格式,并暴露端口让 Prometheus 采集。 说明官方不建议使用启动独立进程方式,该方式配置复杂且需单独的进程,进程本身的监控又引发了新的问题。本文以 JVM 进程内启动(in-process)方式为例,在 Kubernetes 环境下使用 JMX Exporter 暴露 JVM 监控指标。

操作步骤

使用 JMX Exporter 暴露 JVM 监控指标

打包镜像

使用 JVM 进程内启动(in-process)方式,启动 JVM 需指定 JMX Exporter 的 jar 包文件和配置文件。jar 包为二进制文件,不便通过 configmap 挂载,建议直接将 JMX Exporter 的 jar 包和配置文件都打包到业务容器镜像中。步骤如下:1. 准备一个制作镜像的目录,放入 JMX Exporter 配置文件 prometheus-jmx-config.yaml

ssl: falselowercaseOutputName: falselowercaseOutputLabelNames: false

注意更多配置项请参考 Prometheus 官方文档。 2. 准备 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

3. 准备 Dockerfile 文件,本文以 Tomcat 为例。

FROM tomcat:jdk8-openjdk-slimADD prometheus-jmx-config.yaml /prometheus-jmx-config.yamlADD jmx_prometheus_javaagent-0.13.0.jar /jmx_prometheus_javaagent-0.13.0.jar

4. 执行以下命令,编译镜像。

docker build . -t ccr.ccs.tencentyun.com/imroc/tomcat:jdk8

至此已完成镜像打包,您还可利用 docker 多阶段构建,省略手动下载 jar 包的步骤。Dockerfile 示例如下:

FROM ubuntu:16.04 as jarWORKDIR /RUN apt-get update -yRUN DEBIAN_FRONTEND=noninteractive apt-get install -y wgetRUN wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.13.0/jmx_prometheus_javaagent-0.13.0.jarFROM tomcat:jdk8-openjdk-slimADD prometheus-jmx-config.yaml /prometheus-jmx-config.yamlCOPY --from=jar /jmx_prometheus_javaagent-0.13.0.jar /jmx_prometheus_javaagent-0.13.0.jar

部署 Java 应用

部署应用至 Kubernetes 时,需修改 JVM 启动参数以便启动时加载 JMX Exporter。JVM 启动时会读取 JAVA_OPTS 环境变量,作为额外的启动参数,部署时可为应用增加该环境变量。示例如下:

apiVersion: apps/v1kind: Deploymentmetadata:  name: tomcatspec:  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: v1kind: Servicemetadata: name: tomcat labels: app: tomcatspec: type: ClusterIP ports: - port: 8080 protocol: TCP name: http - port: 8088 protocol: TCP name: jmx-metrics selector: app: tomcat

启动参数格式: -javaagent:=:该示例使用8088端口暴露 JVM 的监控指标,您可按需自行更改。

添加 Prometheus 监控配置

配置 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/v1kind: ServiceMonitormetadata:  name: tomcat  namespace: default  labels:    app: tomcatspec:  endpoints:  - port: jmx-metrics    interval: 5s  namespaceSelector:    matchNames:    - default  selector:    matchLabels:      app: tomcat

添加 Grafana 监控面板

采集数据后可进行数据展示。若熟悉 Prometheus 和 Grafana,则可自行根据指标设计所需面板。您也可直接使用社区提供面板,例如 JVM dashboard。可直接导入使用,面板效果图如下:

腾讯云容器服务使用 Prometheus 监控 Java 应用同尘科技



参考资料

JMX Exporter 项目地址JVM 监控面板
容器服务官网1折活动,限时活动,即将结束,速速收藏
同尘科技腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠

转转请注明出处:https://www.yunxiaoer.com/148534.html

(0)
上一篇 2023年12月9日 下午12:57
下一篇 2023年12月9日 下午12:57
详情页2

相关推荐

  • 腾讯云容器服务创建注册集群同尘科技

    注册集群是腾讯云容器服务一种新的集群类型,可以将用户本地基础设施的 Kubernetes 集群或者其他云厂商的 Kubernetes 集群注册到腾讯云容器服务 TKE 统一管理。本文将介绍如何将第三方的 Kubernetes 集群注册到腾讯云容器服务 TKE。 前提条件 已经开通注册集群的功能。目前注册集群的能力处于免费内测阶段,请 联系我们 进行申请。支持…

    2023年12月9日
  • 腾讯云TDSQL-C MySQL版功能简介

    背景 随着越来越多的用户将核心系统上云,用户数据量不断增加,业务逻辑也变得越来越复杂。虽然 TDSQL-C MySQL 版的云原生架构可以较好地处理业务的事务请求,但是对于用户多样化的查询分析需求,基于行存的查询并不能总是满足用户的响应时间要求。一种常见的解决方案是采用数据同步工具,将事务系统的数据复制到独立的分析系统中,并将用户的查询分析路由到分析系统中,…

    2023年12月9日
  • 腾讯云高性能计算集群GPU 型实例安装 TCCL 说明

    TCCL简介 TCCL(Tencent Collective Communication Library)是一款针对腾讯云星脉网络架构的高性能定制加速通信库。主要功能是依托星脉网络硬件架构,为 AI 大模型训练提供更高效的网络通信性能,同时具备网络故障快速感知与自愈的智能运维能力。TCCL 基于开源的 NCCL 代码做了扩展优化,完全兼容 NCCL 的功能与…

    2023年12月9日
  • 腾讯云对象存储版本控制

    简介 本文档提供关于版本控制的 API 概览以及 SDK 示例代码。 API 操作名 操作描述 PUT Bucket versioning 设置版本控制 设置存储桶的版本控制功能 GET Bucket versioning 查询版本控制 查询存储桶的版本控制信息 设置版本控制 功能说明 PUT Bucket versioning 接口实现启用或者暂停存储桶的…

    腾讯云 2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 腾讯云对象存储POST Bucket inventory

    功能描述 POST Bucket inventory 可以对一个存储桶创建一个一次性清单任务。区别于 PUT Bucket inventory,这个清单任务创建后将立即开始执行,每个任务只会执行一次,而不会周期性地重复执行。通过使用此功能,您能够更加灵活地获取到存储桶的对象清单,进而更精细化地管理对象。注意您必须在目标存储桶中写入存储桶策略,以供 COS 将…

    腾讯云 2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。