02-APM监控微服务项目

微服务监控需求

随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务。这些服务可能不同编程语言开发,不同团队开发,可能部署很多副本。因此,就需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题。“APM系统”就在这样的问题背景下产生了。

APM系统从整体维度到局部维度展示各项指标,将跨应用的所有调用链性能信息集中展现,可方便度量整体和局部性能,并且方便找到故障产生的源头,生产上可极大缩短故障排除时间。

APM监控系统是什么

APM(ApplicationPerformance Management)是一种应用性能监控工具,通过汇聚业务系统各处理环节的实时数据,分析业务系统各事务处理的交易路径和处理时间,实现对应用的全链路性能监测。

相比接触的Prometheus、Zabbix这类监控系统,APM系统主要监控对应用程序内部,例如:

  • 请求链路追踪:通过分析服务调用关系,绘制运行时拓扑信息,可视化展示
  • 调用情况衡量:各个调用环节的性能分析,例如吞吐量、响应时间、错误次数
  • 运行情况反馈:告警,通过调用链结合业务日志快速定位错误信息
02-APM监控微服务项目

APM监控系统选择依据

APM类监控系统有:Skywalking、Pinpoint、Zipkin

关于选型,可以从以下方面考虑:

探针的性能消耗
APM组件服务的影响应该做到足够小,数据分析要快,性能占用小。

代码的侵入性
即也作为业务组件,应当尽可能少入侵或者无入侵其他业务系统,对于使用方透明,减少开发人员的负担。

监控维度
分析的维度尽可能多。

可扩展性
一个优秀的调用跟踪系统必须支持分布式部署,具备良好的可扩展性。能够支持的组件越多当然越好。

Skywalking介绍

Skywalking 是一个分布式应用程序性能监控系统,针对微服务体系结构而设计。

功能:
•多种监控手段。可以通过语言探针和service mesh 获得监控式数据。
•多个语言自动探针。包括Java,.NET Core 和Node.JS。
•轻量高效。无需大数据平台,和大量的服务器资源。
•模块化。UI、存储、集群管理都有多种机制可选。
•支持告警。
•优秀的可视化解决方案。

Skywalking架构

02-APM监控微服务项目
02-APM监控微服务项目

Skywalking部署(这里选择192.168.1.13这台机器)

1、部署ES数据库

docker run --name elasticsearch -p 9200:9200 -e "discovery.type=single-node" -d elasticsearch:7.7.0

2、部署Skywalking OAP

# 软件包下载地址:
https://archive.apache.org/dist/skywalking/8.3.0/
yum install java-11-openjdk –y
tar zxvf apache-skywalking-apm-es7-8.3.0.tar.gz
cd apache-skywalking-apm-bin-es7/

指定数据源:

vi config/application.yml
storage:
  selector: ${SW_STORAGE:elasticsearch7} #这里使用elasticsearch7
  ...
  elasticsearch7:
    nameSpace: ${SW_NAMESPACE:""}
    clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:192.168.1.13:9200} # 指定ES地址

启动OAP和UI:

./bin/startup.sh
02-APM监控微服务项目

访问UI:http://IP:8080

02-APM监控微服务项目

微服务接入Skywalking监控

内置Agent包路径:apache-skywalking-apm-bin-es7/agent/

启动Java程序以探针方式集成Agent:

将服务端安装的apache-skywalking-apm-bin-es7/agent下的内容复制到客户端每个微服务的skywalking目录下

simple-microservice/eureka-service/skywalking
simple-microservice/gateway-service/skywalking
simple-microservice/order-service/order-service-biz/skywalking
simple-microservice/portal-service/skywalking
simple-microservice/product-service/product-service-biz/skywalking
simple-microservice/stock-service/stock-service-biz/skywalking

Dockerfile最后指定监控并最后修改为:

java -jar -javaagent:/skywalking/skywalking-agent.jar=agent.service_name=<项目名称>,agent.instance_name=<实例名称>,collector.backend_service=<Skywalking服务器>:11800xxx.jar

下面修改的Dockerfile有:

simple-microservice/product-service/product-service-biz/Dockerfile

FROM lizhenliang/java:8-jdk-alpine
LABEL maintainer www.aliangedu.cn
RUN  sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
     apk add -U tzdata && \
     ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY ./target/product-service-biz.jar ./
COPY skywalking /skywalking
EXPOSE 8010
CMD java -jar -javaagent:/skywalking/skywalking-agent.jar=agent.service_name=ms-product,agent.instance_name=$(echo $HOSTNAME | awk -F- '{print $1"-"$NF}'),collector.backend_service=192.168.1.13:11800 /product-service-biz.jar

simple-microservice/order-service/order-service-biz/Dockerfile

FROM lizhenliang/java:8-jdk-alpine
LABEL maintainer www.aliangedu.cn
RUN  sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
     apk add -U tzdata && \
     ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY ./target/order-service-biz.jar ./
COPY skywalking /skywalking
EXPOSE 8020
CMD java -jar -javaagent:/skywalking/skywalking-agent.jar=agent.service_name=ms-order,agent.instance_name=$(echo $HOSTNAME | awk -F- '{print $1"-"$NF}'),collector.backend_service=192.168.1.13:11800 /order-service-biz.jar

simple-microservice/stock-service/stock-service-biz/Dockerfile

FROM lizhenliang/java:8-jdk-alpine
LABEL maintainer www.aliangedu.cn
RUN  sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
     apk add -U tzdata && \
     ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY ./target/stock-service-biz.jar ./
COPY skywalking /skywalking
EXPOSE 8030
CMD java -jar -javaagent:/skywalking/skywalking-agent.jar=agent.service_name=ms-stock,agent.instance_name=$(echo $HOSTNAME | awk -F- '{print $1"-"$NF}'),collector.backend_service=192.168.1.13:11800 /stock-service-biz.jar

simple-microservice/eureka-service/Dockerfile

FROM lizhenliang/java:8-jdk-alpine
LABEL maintainer www.aliangedu.cn
RUN  sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
     apk add -U tzdata && \
     ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY ./target/eureka-service.jar ./
COPY skywalking /skywalking
EXPOSE 8888
CMD java -jar -javaagent:/skywalking/skywalking-agent.jar=agent.service_name=ms-eureka,agent.instance_name=$(echo $HOSTNAME | awk -F- '{print $1"-"$NF}'),collector.backend_service=192.168.1.13:11800 -Deureka.instance.hostname=${MY_POD_NAME}.eureka.ms /eureka-service.jar

simple-microservice/gateway-service/Dockerfile

FROM lizhenliang/java:8-jdk-alpine
LABEL maintainer www.aliangedu.cn
RUN  sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
     apk add -U tzdata && \
     ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY ./target/gateway-service.jar ./
COPY skywalking /skywalking
EXPOSE 9999
CMD java -jar -javaagent:/skywalking/skywalking-agent.jar=agent.service_name=ms-gateway,agent.instance_name=$(echo $HOSTNAME | awk -F- '{print $1"-"$NF}'),collector.backend_service=192.168.1.13:11800 /gateway-service.jar

simple-microservice/portal-service/Dockerfile

FROM lizhenliang/java:8-jdk-alpine
LABEL maintainer www.aliangedu.cn
RUN  sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
     apk add -U tzdata && \
     ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY ./target/portal-service.jar ./
COPY skywalking /skywalking
EXPOSE 8080
CMD java -jar -javaagent:/skywalking/skywalking-agent.jar=agent.service_name=ms-portal,agent.instance_name=$(echo $HOSTNAME | awk -F- '{print $1"-"$NF}'),collector.backend_service=192.168.1.13:11800 /portal-service.jar

重新按照顺序部署所有微服务应用

Skywalking UI使用

更新后相关微服务会更新到服务端:

02-APM监控微服务项目

UI介绍:

02-APM监控微服务项目
全局:
•Service Load:CPM 每分钟回调次数
•Slow Services:慢响应服务,单位ms
•Un-Health Services:不健康的服务,1为满分
•Slow Endpoints:慢端点,单位ms
•Global Response Latency:百分比响应延时,不同百分比的延时时间,单位ms
•Global Heatmap:服务响应时间热力分布图,根据时间段内不同响应时间的数量显示颜色深度
•底部栏:展示数据的时间区间,点击可以调整。
02-APM监控微服务项目
Service(当前服务和service UI都需要点击):
•Service Apdex(数字):当前服务的评分
•ServiceApdex(折线图):当前服务评分趋势图
•Service Avg Response Times:服务平均响应时间,单位ms
•Service Response Time Percentile:服务响应时间百分比,单位ms
•Successful Rate(数字):请求成功率
•Successful Rate(折线图):请求成功率趋势图
•Servce Load(数字):每分钟请求数
•Servce Load(折线图):每分钟请求数趋势图
•Servce Instances Load:服务实例的每分钟请求数
•Slow Service Instance:慢服务实例,单位ms
•Service Instance Successful Rate:服务实例成功率
02-APM监控微服务项目
Instance:
•Service Instance Load:当前实例的每分钟请求数
•Service Instance Successful Rate:当前实例的请求成功率
•Service Instance Latency:当前实例的响应延时
•JVM CPU:jvm占用CPU的百分比
•JVM Memory:JVM堆内存,单位MB
•JVM GC Time:JVM垃圾回收时间,包含YGC和OGC
•JVM GC Count:JVM垃圾回收次数,包含YGC和OGC
•JVM Thread Count:JVM线程统计CLR XX:.NET服务的指标,类似JVM虚拟机
02-APM监控微服务项目
Endpoint:
•Endpoint Load in Current Service:每个端点的每分钟请求数
•Slow Endpoints in Current Service:每个端点的最慢请求时间,单位ms
•Successful Rate in Current Service:每个端点的请求成功率
•Endpoint Load:端点请求数趋势图
•Endpoint Avg Response Time:端点平均响应时间趋势图
•Endpoint Response Time Percentile:端口响应时间的百分位数
•Endpoint Successful Rate:端点请求成功率

拓扑图

02-APM监控微服务项目

发布者:LJH,转发请注明出处:https://www.ljh.cool/40831.html

(0)
上一篇 2024年2月7日 下午7:03
下一篇 2024年2月21日 下午5:37

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注