微服务监控需求



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




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


APM监控系统 微服务接入SkyWalking_java

 

APM监控系统是什么



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



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



• 请求链路追踪:通过分析服务调用关系,绘制运行时拓扑信息,可视化展示



• 调用情况衡量:各个调用环节的性能分析,例如吞吐量、响应时间、错误次数



• 运行情况反馈:告警,通过调用链结合业务日志快速定位错误信息


 

APM监控系统选择依据



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


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


探针的性能消耗


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


代码的侵入性


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


监控维度


分析的维度尽可能多。


可扩展性


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


Skywalking介绍



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

功能:


• 多种监控手段。可以通过语言探针和 service mesh 获得监控是数据。


• 多个语言自动探针。包括 Java,.NET Core 和 Node.JS。


• 轻量高效。无需大数据平台,和大量的服务器资源。


• 模块化。UI、存储、集群管理都有多种机制可选。


• 支持告警。


• 优秀的可视化解决方案




Skywalking架构


APM监控系统 微服务接入SkyWalking_docker_02

 

APM监控系统 微服务接入SkyWalking_docker_03

Skywalking部署



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/
[root@monitor apache-skywalking-apm-bin-es7]# ls
agent bin config LICENSE licenses NOTICE oap-libs README.txt tools webapp

#使用哪块配置
storage:
selector: ${SW_STORAGE:elasticsearch7}

#指定使用具体IP地址
elasticsearch7:
nameSpace: ${SW_NAMESPACE:""}
clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:127.0.0.1:9200}

#启动OAP和UI
[root@monitor bin]# ./startup.sh
SkyWalking OAP started successfully!
SkyWalking Web Application started successfully!


[root@monitor apache-skywalking-apm-bin-es7]# cd logs/
[root@monitor logs]# ls
oap.log skywalking-oap-server.log webapp-console.log webapp.log
[root@monitor logs]# tail -f skywalking-oap-server.log


[root@monitor logs]# netstat -tpln | grep -w 8080
tcp6 0 0 :::8080 :::* LISTEN 14641/java

APM监控系统 微服务接入SkyWalking_jar_04

微服务接入监控


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


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


java -jar -javaagent:/skywalking/skywalking-agent.jar=agent.service_name=<项目名称
>,agent.instance_name=<实例名称>,collector.backend_service=<Skywalking服务器>:11800 xxx.jar
[root@master product-service]# cd product-service-biz/
[root@master product-service-biz]# ls
Dockerfile pom.xml skywalking src
[root@master product-service-biz]# cat Dockerfile
FROM lizhenliang/java:8-jdk-alpine
LABEL maintainer www.ctnrs.com
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.31.90:11800 /product-service-biz.jar


[root@master order-service-biz]# kubectl get pod -n ms
NAME READY STATUS RESTARTS AGE
eureka-0 1/1 Running 1 27d
eureka-1 1/1 Running 1 27d
eureka-2 1/1 Running 1 27d
gateway-fcdff7b65-2jn7f 1/1 Running 1 36d
order-5775448c6-rz74g 1/1 Running 1 36d
portal-586dbdfc8-hm85c 1/1 Running 1 36d
product-69b4846b89-tbzsh 1/1 Running 0 15m
stock-67d849958d-5jk5v 1/1 Running 0 3m41s
[root@master order-service-biz]# HOSTNAME=product-69b4846b89-tbzsh
[root@master order-service-biz]# echo $HOSTNAME | awk -F- '{print $1"-"$NF}'
product-tbzsh



[root@master product-service-biz]# docker build -t reg.harbor.com/microservice/product:skywalking .
Sending build context to Docker daemon 96.2MB
Step 1/6 : FROM java:8-jdk-alpine
---> 3fd9dd82815c
Step 2/6 : RUN apk add -U tzdata && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
---> Using cache
---> 3d79cdf17999
Step 3/6 : COPY ./target/product-service-biz.jar ./
---> Using cache
---> af45498b45de
Step 4/6 : COPY skywalking /skywalking
---> 972d1d84872b
Step 5/6 : EXPOSE 8010
---> Running in 35409311758b
Removing intermediate container 35409311758b
---> 1ce48f156ad9
Step 6/6 : 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.0.13:11800 /product-service-biz.jar
---> Running in b43839309d41
Removing intermediate container b43839309d41
---> 67c0ec036979
Successfully built 67c0ec036979
Successfully tagged reg.harbor.com/microservice/product:skywalking
[root@master product-service-biz]# docker push reg.harbor.com/microservice/product:skywalking
The push refers to repository [reg.harbor.com/microservice/product]
b594484b0bd9: Pushed
a7eb54fcd329: Layer already exists
1a6781d58798: Layer already exists
a1e7033f082e: Layer already exists
78075328e0da: Layer already exists
9f8566ee5135: Layer already exists
skywalking: digest: sha256:a7205a5e0b823b65006a711af155206d615371a2101ed1b36c4d264c8335fad4 size: 1582