随着微服务架构的流行,一些微服务架构下的问题也会越来越突出,比如一个请求会涉及多个服务,而服务本身可能也会依赖其他服务,整个请求路径就构成了一个网状的调用链,而在整个调用链中一旦某个节点发生异常,整个调用链的稳定性就会受到影响。当企业应用进入分布式微服务时代,应用服务依赖会越来越多,skywalking可以很好的解决服务调用链路追踪的问题,而且基于java探针技术,基本对应用零侵入零耦合。
skywalking是什么,有什么用?
Skywalking是一个APM系统,即应用性能监控系统,为微服务架构和云原生架构系统设计。它通过探针自动收集所需的指标,并进行分布式追踪。通过这些调用链路以及指标,Skywalking APM会感知应用间关系和服务间关系,并进行相应的指标统计。目前支持链路追踪和监控应用组件如下,基本涵盖主流框架和容器,如国产PRC Dubbo、主流MQ、kafka等,国际化的spring boot,spring cloud都支持了。
下面展示一下skywalking的官网demo,启动程序,请求的追踪结果就会被记录下来,通过 SkyWalking UI 查看:
Overview dashboard
Discovery topological graph of application clusters automatically.
Applicationoverview
Servermetrics
Servicemetrics
Trace
Alarm
环境要求
1、JDK8+
2、Elasticsearch 6.x
3、8080,10800,11800,12800 端口不被占用
Elasticsearch下载安装参考官方教程, 安装完成后需要对 config/elasticsearch.yml 做如下修改:
# 修改
# 如果 cluster.name 不设置为 CollectorDBCluster ,则需要修改 SkyWalking 的配置文件
cluster.name: CollectorDBCluster
network.host: 0.0.0.0
# 增加
thread_pool.bulk.queue_size: 1000
如果是 linux 环境,Elasticsearch 安装可能没有那么顺利,请参考Linux 环境下安装 Elasticsearch 5.x、6.x 问题汇总。
在启动 SkyWalking 之前,请确保 Elasticsearch 已启动。如果一切顺利,这时候就可以通过http://localhost:8080来查看 SkyWalking UI 了(默认全是0),默认账号/密码:admin/admin。
skywalking搭建分两种模式:
单机模式,后台使用h2内嵌数据库(不太支持使用这种方式)
集群模式,后台使用zookeeper和elk(即Elasticsearch,Logstash 和 Kibana)
skywalking是使用jvm启动插件插入发方式启动(即java.lang.instrustment的代理),配置更加简单。
全链路性能跟踪展示页面:
下面来看下调用dubbo和db的效果:
skywalking的原理:
skywalaking总体架构分为三部分:
1、skywalking-collector:链路数据归集器,数据可以落地ElasticSearch,单机也可以落地H2,不推荐,H2仅作为临时演示用
2、skywalking-web:web可视化平台,用来展示落地的数据
3、skywalking-agent:探针,用来收集和发送数据到归集器
skywalking的核心在于agent部分,下图展示了一次调用跨多个进程里agent的详细的运行过程:
skywalking的限制
1.只支持已知的代理,如果使用的中间件还未被支持,需要自己写插件。
2.跨线程的场景不支持自动代理,比如任务分配,任务池,批处理的场景。
网友评论