本实践详细描述了三个微服务应用安装ArmsAgent及部署的过程。并在实践最后简单介绍了ARMS监控应用的部分功能及图片效果展示。

背景信息

最佳实践概述

应用实时监控服务ARMS(Application Real-Time Monitoring Service)是一款应用性能管理产品,包含前端监控、应用监控和Prometheus监控三大子产品,涵盖了浏览器、小程序、APP、分布式应用和容器环境等性能管理,借助本产品,您可以基于前端、应用、业务自定义等维度,迅速便捷地为企业构建秒级响应的业务监控能力。

本次最佳实践基于ARMS对EDAS部署的应用进行监控,总共准备了三个微服务应用。将微服务应用Jar包打成镜像并上传至阿里云容器镜像仓库,然后通过EDAS的自定义部署功能,把应用部署在EDAS上。在应用打成镜像的过程中,在Dockerfile里添加了安装ARMS探针和日志采集文件,实现EDAS部署完成后,ARMS将能够监听到EDAS部署的应用。

最佳实践价值

在开源Spring Cloud微服务开发过程中对应用进行监控需要使用Hystrix Dashboard和Turbine组件结合,而对调用链的监控则需要使用Seluth结合Zipkin组件,然后启动Zipkin Jar包,以访问其对应控制台的形式监控微服务应用。而对于Arms,无需编写过多对应的监控代码,便捷微服务应用无侵入式监控,并且ARMS的功能丰富,可以对应用进行多方面的监控,还能对数据库MySQL、RocketMQ使用等的监控。因此本次最佳实践描述ARMS的使用,提供给广大客户参考。

应用环境

  • ARMS基于专有云企业版V3.9.0。
  • Spring Cloud框架基于Finchley.SR1版本。
  • EDAS注册中心Nacos是基于V2.1.0 RELEASE版本。

步骤一 创建Kubernetes集群

您需要按照以下步骤填写需要配置的一系列集群参数来创建Kubernetes集群。

  1. 登录EDAS控制台。
  2. 单击左侧导航中的集群 > 集群,单击右上角的创建Kubernetes集群
  3. 设置集群的基本信息。
    表 1. 集群参数配置表
    名称 描述
    集群名称 要创建的集群的名称。可以包含1~63个字符,包括数字、中文字符、英文字符和短划线(-)。
    说明 集群名称在同一个用户下必须唯一。
    地域 所创建集群将要部署到的地域。
    可用区 集群的可用区。
    专有网络 您可以在已有 VPC 列表中选择所需的VPC。
    • 如果您使用的VPC中当前已有NAT网关,容器服务会使用已有的NAT网关。
    • 如果VPC中没有 NAT 网关,系统会默认自动为您创建一个NAT网关。如果您不希望系统自动创建NAT网关,可以取消勾选页面下方的为专有网络配置 SNAT
    说明 若选择不自动创建NAT网关,您需要自行配置NAT网关实现VPC安全访问公网环境,或者手动配置SNAT,否则VPC内实例将不能正常访问公网,会导致集群创建失败。
    节点类型 计划支持两种节点类型:按量付费和包年包月,包年包月暂未开放。
    Master配置 选择实例规格和系统盘:
    • 实例规格:参见ECS云服务器 用户指南中关于实例规格族的文档。
    • 系统盘:支持SSD云盘和高效云盘。
    • Master实例数量:支持添加3个实例。
    Worker实例 您可选择新增实例或添加已有实例。
    Worker配置 Worker实例选择新增实例,可进行如下配置。
    • 实例规格:参见ECS云服务器 用户指南中关于实例规格族的文档。
    • 数量:选择Worker的数量。
    • 系统盘:支持SSD云盘和高效云盘。
    • 挂载数据盘:支持SSD云盘、高效云盘和普通云盘。
    Docker 版本Kubernetes 版本 显示当前支持的Docker版本和Kubernetes版本,您可查看对应版本,并根据需要进行选择。
    登录密码 设置节点的登录密码。
    确认密码 确认设置的节点登录密码。
    网络插件 支持Flannel和Terway,默认启用Flannel。
    Pod网络CIDRService CIDR(可选项) 选择使用已有专有网络时可配置。
    配置 SNAT 可选,若不选择,需要自行配置NAT网关,或手动配置SNAT。
    公网SLB 会创建一个公网SLB,同时把Master节点的6443端口(对应API Server)暴露出来,用户可以在外网通过kubeconfig连接/操作集群。
    SSH登录
    • 选择开放公网SSH登录,您可以SSH访问集群。
    • 选择不开放公网SSH登录,将无法通过SSH访问集群,也无法通过 kubectl 连接集群。您可手动进行配置 。
    日志服务 您可使用已有Project或新建一个Project。勾选使用日志服务,会在集群中自动配置日志服务插件。
    集群删除保护 防止通过控制台或 API 误删除集群。
    高级选项
    • 节点Pod数量:单节点可运行Pod数量的上限。
    • 集群CA:设置是否开启集群CA。
  4. 在集群设置页面的右上角,最后单击创建集群
  5. 当前配置确认页面,所有项目检查通过后,单击确认,启动部署。

步骤二 安装ArmsAgent

你需要按照以下步骤在Spring Cloud服务中安装ArmsAgent。

  1. 登录容器镜像服务控制台页面。
  2. 单击右侧创建镜像仓库
  3. 创建镜像仓库对话框中,设置命名空间、仓库名称、摘要和仓库类型,本例选择私有镜像仓库类型。然后单击下一步
    创建仓库
  4. 单击创建镜像仓库
  5. 单击目标仓库右侧操作列中的管理,进入仓库详情页面。
  6. 执行下列代码,将nacos-service-consumer-0.0.1-SNAPSHOT.jarnacos-service-broker-0.0.1-SNAPSHOT.jarnacos-service-provider-0.0.1-SNAPSHOT.jar三个应用jar打成镜像并上传至镜像仓库。
    说明 ArmsAgent.zip与ArmsAgent同目录,dragoon与StartAgent同目录、white_ip.conf与StartAgent同目录。
    FROM centos:7
    
    RUN rm -f /etc/yum.repos.d/*.repo
    ADD CentOS.repo /etc/yum.repos.d/CentOS.repo
    RUN yum clean all
    
    RUN yum -y install unzip telnet lsof net-tools initscripts
    RUN yum -y install java-1.8.0-openjdk-devel
    
    ENV ADMIN_HOME /home/admin
    ENV LANG="en_US.UTF-8"
    ENV TERM=xterm
    ENV JAVA_OPTS=""
    
    RUN mkdir -p /home/admin/app/
    
    ADD ArmsAgent.zip /home/admin/ArmsAgent.zip
    RUN unzip /home/admin/ArmsAgent.zip -d /home/admin/
    
    RUN mkdir -p /usr/alisys
    ADD dragoon /root/dragoon
    RUN ln -s   /root/dragoon /usr/alisys/dragoon
    RUN rm -f /usr/alisys/dragoon/conf/white_ip.conf
    ADD white_ip.conf /usr/alisys/dragoon/conf/white_ip.conf
    
    ADD nacos-service-consumer-0.0.1-SNAPSHOT.jar /home/admin/app/app.jar
    
    RUN echo 'bash /usr/alisys/dragoon/bin/agent.sh start' > /home/admin/start.sh
    RUN echo 'java -jar $CATALINA_OPTS -Dalicloud.deployment.mode=EDAS_MANAGED -javaagent:/home/admin/ArmsAgent/arms-bootstrap-1.7.0-SNAPSHOT.jar -Darms.licenseKey=1870773007797099@f81ca8a7547e62b -Darms.appName=k8s-nacos-consumer  /home/admin/app/app.jar --server.port=8080' >> /home/admin/start.sh
    RUN chmod +x /home/admin/start.sh
    WORKDIR $ADMIN_HOME
    CMD ["/bin/bash", "/home/admin/start.sh"]
    上传
  7. 执行docker build -t cr.registry.cloud.poc2.com/pdsa/k8s-nacos-consumer:v1构成镜像。
  8. 执行docker login --username=dtdep-3-1573007796981cr.registry.cloud.poc2.com登录阿里云Docker Registry。
  9. 执行docker push cr.registry.cloud.poc2.com/pdsa/k8s-nacos-consumer:v1上传镜像,上传完之后即可去镜像仓库查看镜像版本。
    上传镜像

步骤三 部署应用

您可以按照以下操作步骤部署应用。

  1. 在左侧导航栏中,单击应用管理 > 应用列表,进入应用列表页面。
  2. 应用列表页面,单击左上角创建应用按钮。
  3. 应用基本信息页面中设置应用的基本信息和参数,然后单击下一步
    • 命名空间:在左侧下拉列表选择地域;在右侧下拉列表选择命名空间,如果不做选择命名空间则设置为默认
    • 集群类型:在左侧下拉列表中选择集群类型为 容器服务 K8s 集群,右侧下拉列表内选择具体的集群。
    • K8s Namespace:K8s Namespace 通过将系统内部的对象分配到不同的 Namespace 中,形成逻辑上分组的不同项目、小组或用户组,便于不同的分组在共享使用整个集群的资源的同时还能被分别管理。
      • default:没有其他命名空间的对象的默认命名空间。
      • kube-system:系统创建的对象的命名空间。
      • kube-public:此命名空间是自动创建的,并且可供所有用户(包括未经过身份验证的用户)读取。
    • 应用名称:输入应用名称。
    • 应用描述:填写应用的基本情况。
    创建应用
  4. 应用配置页面配置镜像。应用部署方式默认选择为镜像。在我的镜像区域选择您创建的镜像。
    选择镜像
  5. 设置完成后,单击确认创建

应用监控

当应用成功接入ARMS后,ARMS将全方位监控您的应用。您可以在应用总览页面快速查看应用的健康状况关键指标,通过应用拓扑图预览应用的上下游依赖组件。

您可以按照以下步骤进入功能入口:

  1. 登录ARMS控制台,在左侧导航栏中选择应用监控 > 应用列表
  2. 应用列表中选择您想查看的应用,进入应用总览页面。
    您可以在应用总览页顶部选择概览分析拓扑图页签查看相应信息。
  • 功能介绍
    • 应用关键指标
      概览分析页签上展示以下关键指标:
      • 选定时间内的总请求量、平均响应时间、错误数、实时实例数、FullGC次数、慢SQL次数、异常次数和慢调用次数,以及这些指标和上一天的环比、上周的同比升降幅度。
      • 应用提供服务:应用提供服务的请求量和平均响应时间的时序曲线。
      • 应用依赖服务:应用依赖服务的请求量、平均响应和应用实例数的时序曲线,以及HTTP-状态码统计。
      • 系统信息:CPU、MEM和负载的时序曲线。
      • 统计分析:异常类型分析。
      应用总览
    • 应用拓扑
      在拓扑图页签上,您可以通过拓扑图更加直观地看到应用的上下游组件以及与它们的调用关系,从而更快速地找出应用的瓶颈。拓扑图
  • 应用详情

    在左侧导航栏中单击应用详情,可以查看被调用应用、数据库和MQ的概览图。

    • JVM 监控

      JVM 监控页签内展示了GC瞬时次数、GC瞬时耗时、堆内存详情、非堆内存详情和JVM线程数的时序曲线。

    • 主机监控

      主机监控页签内展示了CPU、MEM(内存)、Disk(磁盘)、Load(负载)、网络流量和网络数据包的时序曲线。

    • SQL分析

      SQL 分析页签展示的是左侧选中服务的代码段内所发起的 SQL 请求列表。借助此页签,您可以找出是哪一个SQL造成某个服务过慢。您还可以单击某个SQL中的接口快照来查看一个SQL执行逻辑所处的完整代码链路。

    • 异常分析

      异常分析页签展示的是左侧选中服务的代码段内所抛出的Java异常。您还可以单击某个异常中的接口快照来查看一个异常堆栈所处的完整代码链路。

    • 错误分析

      错误分析页签展示应用的错误和HTTP状态码统计数据。您还可以单击需要查看的TraceId,即可在新页面查看调用链路相关信息。

    • 接口快照

      在服务链路快照中,您可以看到该服务接口中单次调用的调用堆栈、执行的明细SQL、抛出的具体异常信息,以及接口中的参数详情。

  • 接口调用

    在左侧导航栏中单击接口调用,可以查看调用接口名称、调用接口响应时间、请求数、错误数和异常数。

    图 1. 点击接口快照
    点击接口快照
    图 2. 点击TraceId,查看调用链和应用IP地址
    点击TraceId,跳转到应用监控系统界面,可以查看调用链及应用IP地址
    图 3. 点击方法栈查看调用方法、行号、扩展信息
    点击方法栈查看调用方法、行号、扩展信息
  • 数据库调用

    数据库调用页面可展示各 SQL 语句的调用次数、平均耗时和相关调用链路,帮助您定位 SQL 性能问题。

    在左侧导航栏中单击数据库调用,然后在 SQL 分析页签上查看以下指标:

    • 选定时间内的每分钟 SQL 调用次数和平均耗时图表。
    • 选定时间内具体 SQL 语句的调用次数和平均耗时。

    在 SQL 分析页签上,按需执行以下操作:

    • 操作列中单击调用统计,即可查看选定时间内具体 SQL 语句的每分钟调用次数和平均耗时图表。
    • 操作列中单击链路查询,即可在调用链路页签上查看与对应 SQL 语句相关的所有调用链路。
  • MQ监控
    ARMS应用监控的MQ监控可展示消息队列Apache RocketMQ版的Topic发布和订阅消息的情况。MQ监控

    MQ监控页面具备以下功能:

    • 在拓扑图中展示应用与MQ数据源之间的消息发布和订阅关系。
    • 展示消息发布的统计数据,包括请求数、响应时间和错误数。
    • 展示消息订阅的统计数据,包括消息请求数、响应时间和错误数。
    • 提供关于消息发布和订阅的接口快照,您可以通过TraceId链接查看完整调用链以及诊断问题原因。

    MQ监控页面支持的操作如下:

    • 在页面右上角的时间选择框内选择需要查看统计数据的起止时间。
    • 单击发布端统计订阅端统计页签,查看消息发布和订阅的统计数据。
    • 单击接口快照页签,查看关于消息发布和订阅的接口快照,必要时可通过TraceId链接查看完整调用链以及诊断问题原因。
    • 单击返回总览,回到MQ监控页面。