服务痛点介绍
随着微服务架构的流行,一些微服务架构下的问题也会越来越突出,比如一个请求会涉及多个服务,而服务本身可能也会依赖其他服务,整个请求路径就构成了一个网状的调用链,而在整个调用链中一旦某个节点发生异常,整个调用链的稳定性就会受到影响。因此我们需要一个可以追踪服务调用链路的工具来对服务进行接口追踪。
面对以上情况, 我们就需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题,这时候 APM Application Performance Management(应用性能管理 对企业系统即时监控以实现对应用程序性能管理和故障管理的系统化的解决方案。)工具就该闪亮登场了。
目前主要的一些 APM 工具有: Cat、Zipkin、Pinpoint、SkyWalking,这里主要介绍 SkyWalking ,它是一款优秀的国产 APM 工具,包括了分布式追踪、性能指标分析、应用和服务依赖分析等。
下面是 SkyWalking 6.x 的架构图:
工具原理说明
SkyWalking 的核心是数据分析和度量结果的存储平台,通过 HTTP 或 gRPC 方式向 SkyWalking Collecter 提交分析和度量数据,SkyWalking Collecter 对数据进行分析和聚合,存储到 Elasticsearch、H2、MySQL、TiDB 等其一即可,最后我们可以通过 SkyWalking UI 的可视化界面对最终的结果进行查看。Skywalking 支持从多个来源和多种格式收集数据:多种语言的 Skywalking Agent 、Zipkin v1/v2 、Istio 勘测、Envoy 度量等数据格式。
整体架构看似模块有点多,但在实际上还是比较清晰的,主要就是通过收集各种格式的数据进行存储,然后展示。所以搭建 Skywalking 服务我们需要关注的是 SkyWalking Collecter、SkyWalking UI 和 存储设备,SkyWalking Collecter、SkyWalking UI 官方下载安装包内已包含,最终我们只需考虑存储设备即可。
使用和部署
使用skywalking+elasticsearch的集成部署。
启动Elasticsearch
Elasticsearch我们使用docker部署,因为需要设置时区,所以我们选择了已经配置好时区的docker镜像
导入镜像的脚本和镜像包已经准备好,执行命令即可。
docker run -p 9200:9200 -p 9300:9300 -e cluster.name=elasticsearch -d wutang/elasticsearch-shanghai-zone:6.6.2
启动elasticsearch之后,会开放两个端口,9200和9300 我们skywalking连接使用的9200端口。在浏览器输入localhost:9200可以查看服务信息
其中我们要使用的cluster_name要与skywalking的Collecter nameSpace服务配置的信息一致。
启动 Skywalking UI + Skywalking collector
tar –zxvf apache-skywalking-apm-6.1.0.tar.gz
修改config/application.yml文件配置storage:elasticsearch的环境配置
nameSpace: ${SW_NAMESPACE:"elasticsearch"}
clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}
启动 sh startup.sh 默认端口是8080.可以修改webapp/webapp.yml修改端口号。访问localhost :8080界面显示如图。然后设置agent
部署 skywalking javaagent
- 拷贝agent目录到所需位置. 日志,插件和配置都包含在包中,请不要改变目录结构.
- 增加JVM启动参数, -javaagent:/path/to/skywalking-agent/skywalking-agent.jar. 参数值为skywalking-agent.jar的绝对路径。
新的 agent package 目录结构如下:
+-- skywalking-agent +-- activations apm-toolkit-log4j-1.x-activation.jar apm-toolkit-log4j-2.x-activation.jar apm-toolkit-logback-1.x-activation.jar ... +-- config agent.config +-- plugins apm-dubbo-plugin.jar apm-feign-default-http-9.x.jar apm-httpClient-4.x-plugin.jar ..... skywalking-agent.jar
- 启动被监控应用.
部署 java agent FAQs
- Linux Tomcat 7, Tomcat 8
修改tomcat/bin/catalina.sh
,在首行加入如下信息.
CATALINA_OPTS="$CATALINA_OPTS -javaagent:/path/to/skywalking-agent/skywalking-agent.jar"; export CATALINA_OPTS
- Windows Tomcat 7, Tomcat 8
修改tomcat/bin/catalina.bat
,在首行加入如下信息.
set "CATALINA_OPTS=-javaagent:/path/to/skywalking-agent/skywalking-agent.jar"
- JAR file
在启动你的应用程序的命令行中添加-javaagent
参数. 并确保在-jar
参数之前添加它. 例如:
java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar -jar yourApp.jar
说明:我们需要修改agent的配置,把数据发送到制定的Collecter服务上
至此skywalking部署完毕。使用客户端发起一个请求,就能监控到请求调用的各个子系统的链路,以及请求耗时情况
参考文献:Google Dapper-大规模分布式系统的基础跟踪设施
https://github.com/apache/skywalking/blob/5.x/docs/README_ZH.md skywalking官方中文文档
https://github.com/apache/skywalking github地址