Skywalking【分布式链路追踪】

1、Skywalking概述

1.1、什么是APM系统

1.1.1、APM系统概述

APM(Applicaiton performance management)即应用性能管理系统,是对企业系统即时监控以实现对应用程序性能管理和故障管理的系统化的解决方案。应用性能管理,主要指对企业的关键业务应用进行监测、优化,提高企业应用的可靠性和质量,保证用户得到良好的服务,降低IT成本。

APM系统是可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题。

1.1.2、分布式链路追踪

随着分布式系统和微服务架构的出现,一次用户的请求会经过多个系统,不同服务之间的调用关系十分复杂,任何一个系统出错都可能影响整个请求的处理结果。以往的监控系统往往只能知道单个系统的健康状况、一次请求的成功和失败,无法快速定位失败的根本原因。

复杂的分布式系统也存在以下2个问题:

  • 性能分析:一个服务器依赖很多服务,被依赖的服务也依赖了其他服务。如果某个接口耗时突然变长,那未必是直接调用的下游服务慢了,也可能是下游的下游慢了导致的,如何快速定位耗时变长的根本原因?
  • 链路梳理:需求迭代快,系统之间调用关系变化频繁,靠人工很难梳理清楚系统链路的拓扑。

为了解决这些问题,Google推出了一个分布式链路跟踪系统Dapper,之后各个互联网公司都参照Dapper的思路推出了自己的分布式链路跟踪系统,而这些系统就是分布式系统下的APM系统。

1.1.3、什么是OpenTracing

分布式链路追踪最先是由Google在Dapper论文中提出,而OpenTracing通过提供平台无关、厂商无关的API,使得开发人员能够方便的添加(或更换)追踪系统的实现。

下图是一个分布式调用的例子,客户端发起请求,请求首先到达负载均衡器,接着经过认证服务,订单服务,然后请求资源,最后返回结果。

虽然这种图,对于看清各个组件的组合关系是有用的,但是存在下面2个问题:

  • 它不能很好显示组件的调用时间,是串行调用还是并行调用,如果展现更复杂的调用关系,会更加复杂,甚至无法画出这样的图。
  • 这种图无法显示调用的时间间隔以及是否通过定时调用来启动调用。

一种更有限的展现一个调用过程的图:

基于OepnTracing我们就可以很轻松地构建上面的这幅图。

主流的开源APM产品有以下几个:

1.2、什么是Skywalking?

1.3、docker容器化skywalking验证

1、拉取elasticsearch镜像,部署单节点es

docker pull elasticsearch:6.8.18

docker run -itd -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:6.8.18

2、拉取skywalking-oap-server镜像,部署oap

docker pull apache/skywalking-oap-server:8.7.0-es6

docker run --name oap --restart always -itd -p 11800:11800 -p 12800:12800 -e SW_STORAGE=elasticsearch -e SW_STORAGE_ES_CLUSTER_NODES=10.64.160.188:9200 apache/skywalking-oap-server:8.7.0-es6

3、拉取skywalking-ui镜像,部署ui

docker pull apache/skywalking-ui:8.7.0

docker run -d --name skywalking-ui --link oap:oap -p 8088:8080 -e --collector.ribbon.listOfServers=oap:12800 apache/skywalking-ui:8.7.0

4、应用中部署探针,验证
下载agent:
wget https://mirrors.tuna.tsinghua.edu.cn/apache/skywalking/8.7.0/apache-skywalking-apm-8.7.0.tar.gz

把agent拷贝到dockerfile的目录中,制作应用镜像,编写dockerfile:

FROM openjdk:8-jdk-alpine

COPY  qingyun-eureka-server-1.0-SNAPSHOT.jar app.jar
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
COPY agent /usr/local/agent 

EXPOSE 30080

ENTRYPOINT java -server -javaagent:/usr/local/agent/skywalking-agent.jar -Dskywalking.agent.service_name=qingyun-eureka-server -Dskywalking.collector.backend_service=10.64.160.188:11800 -Djava.security.egd=file:/dev/./urandom -jar /app.jar

构建镜像:

docker build -t qingyun/eureka-server:v2 -f dockerfile .

应用启动:

docker run -itd -p 30080:30080 --name eureka-test qingyun/eureka-server:v2

访问skywalking的ui,查看追踪数据:

posted @ 2021-08-16 09:16  烟雨浮华  阅读(123)  评论(0编辑  收藏  举报