赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 日志服务
  4. 操作指南
  5. 日志应用
  6. 全栈可观测
  7. 全栈监控
  8. 接入数据
  9. 接入Kubernetes监控数据
  10. 接入Kubernetes JVM监控数据

接入Kubernetes JVM监控数据

  • 接入Kubernetes监控数据
  • 发布于 2025-04-22
  • 0 次阅读
文档编辑
文档编辑

Kubernetes JVM监控基于灵活的Logtail Kubernetes能力,通过自动发现等手段,为Kubernetes中所有基于JVM运行的服务提供灵活且一站式的JVM指标采集方案。

前提条件

  • 已创建全栈可观测实例。具体操作,请参见创建实例。

采集原理

Java Management Extensions(JMX)技术是Java SE平台的标准功能,主要用于监控和管理Java应用的运行状态、资源信息、JVM虚拟机运行情况等信息。JMX支持通过Remote RMI方式进行暴露,类似于一个Prometheus Exporter。与通过Javaagent集成数据相比,通过RMI接口读取指标更安全、集成成本更低。

在Kubernetes中,JVM指标采集的部署模型与日志采集组件部署模型相同,都为Daemonset。依托于日志采集组件多维度Kubernetes资源选择能力,采集JVM监控数据时,也支持通过环境变量、Kubernetes Labels、Namespace、Pod名称、容器名称过滤数据。更多信息,请参见日志采集组件多维度Kubernetes资源选择能力。但不同的是由于RMI涉及Java进程之间的通信,Kubernetes资源选择可能命中大量非相关进程,Logtail增加了一个特殊的环境变量ILOGTAIL_JMX_PORT进行进一步精确限定目标选择范围。

JVM监控

准备工作

针对部署于Kubernetes中的Java应用,如果您要通过Logtail自动采集JVM监控数据,需要先完成以下操作。

  1. 在环境变量中增加POD_IP声明。

    配置示例如下:

                - name: POD_IP
                  valueFrom:
                    fieldRef:
                      fieldPath: status.podIP
  2. 设置JVM启动参数。

    设置com.sun.management.jmxremote参数,用于开启JMX远程访问。

    • 设置com.sun.management.jmxremote.local.only参数为false。

    • 设置com.sun.management.jmxremote.ssl参数和com.sun.management.jmxremote.authenticate参数为false,否则在接入配置中需设置JMX密码。

    • 设置com.sun.management.jmxremote.port参数和com.sun.management.jmxremote.rmi.port参数为声明的RMI访问端口。

    • 设置java.rmi.server.hostname参数为环境变量POD_IP的值。

       -Dcom.sun.management.jmxremote
        -Dcom.sun.management.jmxremote.authenticate=false
        -Dcom.sun.management.jmxremote.ssl=false
        -Dcom.sun.management.jmxremote.local.only=false
        -Dcom.sun.management.jmxremote.port=9999
        -Dcom.sun.management.jmxremote.rmi.port=9999
        -Djava.rmi.server.hostname=$(POD_IP)
  3. 在环境变量中增加ILOGTAIL_JMX_PORT声明,值为具体暴露的指标端口,即com.sun.management.jmxremote.port参数值。

  4. 完成上述配置后,请进入目标Pod,使用jps命令查看具体的JVM启动参数,如下图所示。其中,JAVA_TOOL_OPTIONS=""声明用于避免使用jps程序时附带环境变量JAVA_TOOL_OPTIONS,产生端口冲突。

    image.png

  5. 验证环境变量:进入目标Pod,使用 env|grep ILOGTAIL_JMX_PORT查看是否配置成功环境变量,且端口号值与第四步暴露端口相同。

操作步骤

  1. 登录日志服务控制台。

  2. 在日志应用区域的智能运维页签下,单击全栈可观测。

  3. 在SLS全栈可观测页面,单击目标实例。

  4. 在左侧导航栏中,单击全栈监控。

    首次在该实例中使用全栈监控时,还需单击立即开启。

  5. 在左侧导航栏中,单击数据接入,然后在数据接入配置页面,找到Kubernetes监控区域的Kubernetes JVM监控。

    首次创建目标监控项的接入配置时,打开创建开关,可进入配置页面。如果您已创建过接入配置,则单击创建图标,可进入配置页面。

  6. 单击使用现有机器组。

    安装监控组件后,日志服务自动创建名为k8s-group-${your_k8s_cluster_id}的机器组,您可以直接使用该机器组。

  7. 选中目标机器组(k8s-group-${your_k8s_cluster_id}),将该机器组从源机器组移动到应用机器组,单击下一步。

    重要

    如果机器组心跳为FAIL,您可单击自动重试。如果还未解决,请参见Logtail机器组无心跳进行排查。

  8. 在数据源设置中,配置如下参数,然后单击完成。

    设置完成后,日志服务将自动生成Metricstore等资产。

    参数

    说明

    一般配置

    配置名称

    自定义设置Logtail采集配置的名称。

    集群

    自定义设置Kubernetes集群的名称。

    设置该参数后,日志服务会为通过该Logtail采集配置采集到的Kubernetes JVM监控数据添加cluster=集群名称的标签。

    重要

    请确保该集群名称唯一,否则可能出现数据冲突。

    Jmx用户名

    JMX访问用户名。

    在Kubernetes场景中,建议不设置。

    JMX密码

    JMX访问密码。

    在Kubernetes场景中,建议不设置。

    全局标签

    为采集到的Kubernetes JVM监控数据添加自定义标签,该标签为键值对形式。

    设置该参数后,日志服务会为通过该Logtail采集配置采集到的Kubernetes JVM监控数据添加标签。

    K8s选择器配置

    Namespace

    输入匹配Namespace名称的正则表达式,用于指定待采集的命名空间。

    Pod名称

    输入匹配Pod名称的正则表达式,用于指定待采集的Pod。

    容器名称

    输入匹配容器名称的正则表达式,用于指定待采集的容器。

    环境变量白名单

    环境变量白名单,用于指定待采集的容器。默认为空,表示采集所有容器的JVM监控数据。如果您要设置环境变量白名单,那么EnvKey必填,EnvValue可选填。

    • 如果EnvValue为空,则容器环境变量中包含EnvKey的容器都匹配。
    • 如果EnvValue不为空,则容器环境变量中包含EnvKey=EnvValue的容器才匹配。

      EnvValue默认为字符串匹配,即只有EnvValue和环境变量的值完全相同才会匹配。如果该值以^开头并且以$结尾,则为正则匹配,例如:设置EnvKey为NGINX_SERVICE_PORT,设置EnvValue为^(80|6379)$,表示可匹配服务端口为80、6379的容器。

    多个白名单之间为或关系,即只要容器的环境变量满足任一键值对即可被匹配。

    环境变量黑名单

    环境变量黑名单,用于排除不采集的容器。默认为空,表示不排除任何容器。如果您要设置环境变量黑名单,那么EnvKey必填,EnvValue可选填。

    • 如果EnvValue为空,则容器环境变量中包含EnvKey的容器的日志都将被排除。
    • 如果EnvValue不为空,则容器环境变量中包含EnvKey=EnvValue的容器才会被排除。

      EnvValue默认为字符串匹配,即只有EnvValue和环境变量的值完全相同才会匹配。如果该值以^开头并且以$结尾,则为正则匹配,例如:设置EnvKey为NGINX_SERVICE_PORT,设置EnvValue为^(80|6379)$,表示可匹配服务端口为80、6379的容器。

    多个黑名单之间为或关系,即只要容器的环境变量满足任一键值对即可被排除。

    K8s Label白名单

    通过Kubernetes Label白名单指定待采集的容器。如果您要设置Kubernetes Label白名单,那么LabelKey必填,LabelValue可选填。

    • 如果LabelValue为空,则Kubernetes Label中包含LabelKey的容器都匹配。
    • 如果LabelValue不为空,则Kubernetes Label中包含LabelKey=LabelValue的容器才匹配。

      LabelValue默认为字符串匹配,即只有LabelValue和Kubernetes Label的值完全相同才会匹配。如果该值以^开头并且以$结尾,则为正则匹配。例如设置LabelKey为app,设置LabelValue为^(test1|test2)$,表示匹配Kubernetes Label中包含app:test1、app:test2的容器。

    多个白名单之间为或关系,即只要Kubernetes Label满足任一白名单即可被匹配。

    K8s Label黑名单

    通过Kubernetes Label黑名单排除不采集的容器。如果您要设置Kubernetes Label黑名单,那么LabelKey必填,LabelValue可选填。

    • 如果LabelValue为空,则Kubernetes Label中包含LabelKey的容器都被排除。
    • 如果LabelValue不为空,则Kubernetes Label中包含LabelKey=LabelValue的容器才会被排除。

      LabelValue默认为字符串匹配,即只有LabelValue和Kubernetes Label的值完全相同才会匹配。如果该值以^开头并且以$结尾,则为正则匹配。例如设置LabelKey为app,设置LabelValue为^(test1|test2)$,表示匹配Kubernetes Label中包含app:test1、app:test2的容器。

    多个黑名单之间为或关系,即只要Kubernetes Label满足任一黑名单对即可被排除。

    容器Label白名单

    容器Label白名单,用于指定待采集的容器。默认为空,表示采集所有容器的JVM监控数据。如果您要设置容器Label白名单,那么LabelKey必填,LabelValue可选填。

    • 如果LabelValue为空,则容器Label中包含LabelKey的容器都匹配。
    • 如果LabelValue不为空,则容器Label中包含LabelKey=LabelValue的容器才匹配。

      LabelValue默认为字符串匹配,即只有LabelValue和容器Label的值完全相同才会匹配。如果该值以^开头并且以$结尾,则为正则匹配。例如:配置LabelKey为io.kubernetes.container.name,配置LabelValue为^(nginx|cube)$,表示可匹配名为nginx、cube的容器。

    多个白名单之间为或关系,即只要容器Label满足任一白名单即可被匹配。

    容器Label黑名单

    容器Label黑名单,用于排除不采集的容器。默认为空,表示不排除任何容器。如果您要设置容器Label黑名单,那么LabelKey必填,LabelValue可选填。

    • 如果LabelValue为空,则容器Label中包含LabelKey的容器都将被排除。
    • 如果LabelValue不为空,则容器Label中包含LabelKey=LabelValue的容器才会被排除。

      LabelValue默认为字符串匹配,即只有LabelValue和容器Label的值完全相同才会匹配。如果该值以^开头并且以$结尾,则为正则匹配。例如:设置LabelKey为io.kubernetes.container.name,设置LabelValue为^(nginx|cube)$,表示可匹配名为nginx、cube的容器。

    多个黑名单之间为或关系,即只要容器Label满足任一黑名单对即可被排除。

    高级配置

    K8s Label附带采集

    设置Kubernetes Label标签后,日志服务将在采集到的JVM监控数据中添加Kubernetes Label相关字段。

    例如设置Label名称为app,Label别名为k8s_label_app,当Kubernetes中包含名为app的Label(例如app=serviceA)时,日志服务将在JVM监控数据添加字段k8s_label_app: serviceA。

    环境变量附带采集

    设置环境变量标签后,日志服务将在采集到的JVM监控数据中添加环境变量相关字段。

    例如设置环境变量名称为VERSION,环境变量别名为env_version,当容器中包含名为VERSION的环境变量(例如VERSION=v1.0.0)时,日志服务将在JVM监控数据添加字段env_version: v1.0.0。

    新版垃圾收集器JMX模式

    打开开关后,支持兼容G1等新版垃圾收集器。

    默认JVM指标

    打开开关后,Logtail将采集预定义的核心JVM指标。

    JMX采集范围过滤器

    支持通过JMX Bean范围、JMX Bean正则、JMX Bean类型以及采集JMX属性范围进行采集过滤。

接入案例

例如在名为default的命名空间下启动SpringBoot Demo服务,然后通过环境变量ILOGTAIL_JMX_PORT声明暴露9999端口,在环境变量JAVA_TOOL_OPTIONS中添加针对9999端口暴露JMX指标的JVM启动参数。

说明

使用环境变量JAVA_TOOL_OPTIONS引用环境变量POD_IP时,需要先定义环境变量POD_IP。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: jvm-new-1
  namespace: default
spec:
...
  template:
    metadata:
      labels:
        app: jvm1
    spec:
      containers:
        - image: evanljp/full-stack:jvm-new-0.1
          name: jvm
          env:
            - name: "ILOGTAIL_JMX_PORT"
              value: "9999"
            - name: "ILOGTAIL_JMX_TAGS"
              value: "a=b,c=d"
            - name: POD_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
            - name: JAVA_TOOL_OPTIONS
              value: >-
                -Dcom.sun.management.jmxremote
                -Dcom.sun.management.jmxremote.authenticate=false
                -Dcom.sun.management.jmxremote.ssl=false
                -Dcom.sun.management.jmxremote.local.only=false
                -Dcom.sun.management.jmxremote.port=9999
                -Dcom.sun.management.jmxremote.rmi.port=9999
                -Djava.rmi.server.hostname=$(POD_IP)
                -Dserver.port=8081
          ...
​

基于上述声明,您只需在接入配置中完成如下配置,即可接入Kubernetes JVM监控数据到服务。

JVM监控

后续步骤

接入Kubernetes JVM监控数据后,全栈可观测应用会自动生成专属仪表盘。您可以通过仪表盘分析监控数据。更多信息,请参见查看仪表盘。

相关文章

迁移全栈监控Kubernetes资源 2025-04-22 10:44

在云原生时代,Logs、Trace、Metrics也变得融合,全栈监控(全栈可观测)利用SLS云原生采集器iLogtail能力通过一套架构解决云原生下复杂的可观测数据迁移问题。 背景 iLogtail 历史部署版本分为Log模型与Metrics 模型,Log模型和Metrics 模型分别部署于

无侵入观测概述 2025-04-22 10:44

随着微服务、云原生、DevOps等技术的发展,应用的开发、部署、迭代效率有了巨大提升。同时,开发者对可观测的要求越来越高,例如需要针对多种语言、多种中间件、动态运行的Kubernetes环境定制观测手段。日志服务与阿里云龙蜥社区合作研发了无侵入监控功能,以开放、高性能、无侵入的内核观测技术为广大云上

接入Kubernetes资源监控数据 2025-04-22 10:44

Kubernetes中提供多项监控指标,您可以将Kubernetes中的监控指标接入到全栈可观测应用中,进行可视化展示。另外,基于日志服务与龙蜥社区合作共建的无侵入监控能力,您还可以直观地分析整个Kubernetes的数据流向与瓶颈问题,轻松应对复杂的云原生环境。 前提条件

接入无侵入服务观测 2025-04-22 10:44

Kubernetes数据面监控基于日志服务与龙蜥社区合作共建的无侵入监控能力,您可以直观地分析整个Kubernetes的数据流向与瓶颈问题,轻松应对复杂的云原生环境。 前提条件

接入Kubernetes JVM监控数据 2025-04-22 10:44

Kubernetes JVM监控基于灵活的Logtail Kubernetes能力,通过自动发现等手段,为Kubernetes中所有基于JVM运行的服务提供灵活且一站式的JVM指标采集方案。 前提条件 <

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号