监控ACK集群下的Java应用

通过本教程,您将学习如何将ACK集群下的Java应用接入ARMS应用监控,体验应用性能分析和调用链分析等功能,并配置告警。

说明

如需将其他环境下的Java应用或Golang应用接入应用监控,请参见应用接入

使用流程

  1. 为应用安装探针。

    1. 安装ack-onepilot组件:ack-onepilot是阿里云容器服务Kubernetes提供的系统组件,可以让部署在容器服务Kubernetes中的JavaGolang应用接入ARMS。

    2. 更新YAML:通过在应用的YAML中添加labels,开启监控并配置应用在ARMS中的展示名称。

  2. 查看监控数据。

  3. 为监控数据配置告警。

准备环境和资源

  • ACK:

    • 创建Kubernetes集群。具体操作,请参见创建ACK托管集群

    • 创建Java应用:

      如果您没有可以使用的Java应用,可以参考以下示例YAML创建。具体操作,请参见创建无状态工作负载Deployment

      说明

      示例YAML创建了以下资源:

      • 空间名称:arms-demo。以下所有资源均创建在arms-demo命名空间下。

      • 无状态应用:arms-springboot-demoarms-springboot-demo-subcomponent

      • 服务:arms-demo-component

      • 数据库:arms-demo-mysql

      展开查看完整示例YAML文件(Java)

      apiVersion: v1
      kind: Namespace
      metadata:
        name: arms-demo
      ---
      apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
      kind: Deployment
      metadata:
        name: arms-springboot-demo
        namespace: arms-demo
        labels:
          app: arms-springboot-demo
      spec:
        replicas: 2
        selector:
          matchLabels:
            app: arms-springboot-demo
        template:
          metadata:
            labels:
              app: arms-springboot-demo
          spec:
            containers:
              - resources:
                  limits:
                    cpu: 0.5
                image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-springboot-demo:v0.1
                imagePullPolicy: Always
                name: arms-springboot-demo
                env:
                  - name: SELF_INVOKE_SWITCH
                    value: "true"
                  - name: COMPONENT_HOST
                    value: "arms-demo-component"
                  - name: COMPONENT_PORT
                    value: "6666"
                  - name: MYSQL_SERVICE_HOST
                    value: "arms-demo-mysql"
                  - name: MYSQL_SERVICE_PORT
                    value: "3306"
      ---
      apiVersion: apps/v1 
      kind: Deployment
      metadata:
        name: arms-springboot-demo-subcomponent
        namespace: arms-demo
        labels:
          app: arms-springboot-demo-subcomponent
      spec:
        replicas: 2
        selector:
          matchLabels:
            app: arms-springboot-demo-subcomponent
        template:
          metadata:
            labels:
              app: arms-springboot-demo-subcomponent
          spec:
            containers:
              - resources:
                  limits:
                    cpu: 0.5
                image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-springboot-demo:v0.1
                imagePullPolicy: Always
                name: arms-springboot-demo-subcomponent
                env:
                  - name: SELF_INVOKE_SWITCH
                    value: "false"
                  - name: MYSQL_SERVICE_HOST
                    value: "arms-demo-mysql"
                  - name: MYSQL_SERVICE_PORT
                    value: "3306"
      ---
      apiVersion: v1
      kind: Service
      metadata:
        labels:
          name: arms-demo-component
        name: arms-demo-component
        namespace: arms-demo
      spec:
        ports:
          # the port that this service should serve on
          - name: arms-demo-component-svc
            port: 6666
            targetPort: 8888
        # label keys and values that must match in order to receive traffic for this service
        selector:
          app: arms-springboot-demo-subcomponent
      ---
      apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
      kind: Deployment
      metadata:
        name: arms-demo-mysql
        namespace: arms-demo
        labels:
          app: mysql
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: mysql
        template:
          metadata:
            labels:
              app: mysql
          spec:
            containers:
              - resources:
                  limits:
                    cpu: 0.5
                image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-demo-mysql:v0.1
                name: mysql
                ports:
                  - containerPort: 3306
                    name: mysql
      ---
      apiVersion: v1
      kind: Service
      metadata:
        labels:
          name: mysql
        name: arms-demo-mysql
        namespace: arms-demo
      spec:
        ports:
          # the port that this service should serve on
          - name: arms-mysql-svc
            port: 3306
            targetPort: 3306
        # label keys and values that must match in order to receive traffic for this service
        selector:
          app: mysql
      ---
  • ARMS:

    已开通应用监控计费版本。

    应用监控每月提供50 GB的免费额度,当月未使用完的试用额度不会结转至次月,当月超出免费额度的部分,按照写入的数据量进行收费。收费详情,请参见计费说明

为应用安装探针

1. 安装ack-onepilot组件

  1. 容器服务管理控制台集群列表页面单击目标集群名称。

  2. 在左侧导航栏选择运维管理 > 组件管理,然后在右侧页面通过关键字搜索ack-onepilot

  3. ack-onepilot卡片上单击安装,然后在弹出的对话框单击确定

    image

2. 更新YAML

  1. 工作负载 > 无状态页面选择应用所在的命名空间,然后在目标应用右侧选择更多 > 查看Yaml

    image

  2. 编辑YAML中将以下labels添加到spec.template.metadata层级下,然后单击更新

    labels:
      armsPilotAutoEnable: "on"
      armsPilotCreateAppName: "<your-deployment-name>"    #应用在ARMS中的展示名称。

    例如,在arms-springboot-demoarms-springboot-demo-subcomponent应用的YAML中添加配置,开启监控并配置在ARMS中的展示名称分别为arms-k8s-demoarms-k8s-demo-subcomponent

    arms-springboot-demo应用

    image

    arms-springboot-demo-subcomponent应用

    image

  3. 待容器完成自动重新部署后,等待1~2分钟,在ARMS控制台应用监控 > 应用列表页面单击应用名称,查看应用的监控指标。更多信息,请参见查看监控详情(新版)

    image

查看监控详情

调用链分析

调用链分析功能可以通过自由组合筛选条件与聚合维度进行实时分析,并支持通过错/慢Trace分析功能,定位系统或应用产生错、慢调用的原因。

arms-k8s-demo应用

image

调用链详情:

image

arms-k8s-demo-subcomponent应用

image

调用链详情:

image

监控指标

  • 应用概览

    arms-k8s-demo应用

    image

    arms-k8s-demo-subcomponent应用

    image

  • 应用拓扑

    arms-k8s-demo应用

    image

    arms-k8s-demo-subcomponent应用

    image

配置告警

通过配置告警,您可以制定针对特定应用的告警规则。当告警规则被触发时,系统会以您指定的通知方式向告警联系人或钉群发送告警信息,以提醒您采取必要的解决措施。具体操作,请参见应用监控告警规则

image

释放资源

完成教程后:

相关文档

  • ARMS支持多种调用链采样模式,您可以根据自身场景选择合适的调用链采样模式,从而以较低成本获取想要的调用链数据。更多信息,请参见调用链采样模式选择(3.2.8及以上探针版本)

  • ARMS应用监控支持在应用的业务日志中关联调用链的TraceId信息,从而在应用出现问题时,能够通过调用链的TraceId快速关联到业务日志,及时定位、分析并解决问题。更多信息,请参见业务日志关联调用链的TraceId信息

  • 当您的线上应用出现CPU、内存资源使用率高或大量慢调用问题时,可以通过ARMS持续剖析功能生成的火焰图对其进行根因定位。更多信息,请参见持续剖析

  • 阿里云可观测监控 Prometheus 版默认集成了ARMS应用监控数据源,您可以直接在可观测监控 Prometheus 版下获取应用监控相关数据、查看应用监控预置大盘,并根据需求进行二次开发。更多信息,请参见通过Prometheus监控获取ARMS应用监控数据