介绍(摘自上一篇 “skywalking5.X使用笔记”):html
skywalking 简介(链路跟踪与分析)java
随着业务愈来愈复杂,企业应用也进入了分布式服务化的阶段,随着模块的不断增多,一次请求可能会涉及到十几个甚至几十个服务的协同处理,那么如何准确快速的定位到线上故障和性能瓶颈,便成为咱们不得不面对的棘手问题,传统的日志监控等方式没法很好达到跟踪调用,排查问题等需求。在谷歌论文《 Dapper,大规模分布式系统的跟踪系统》的指导下,许多优秀的APM应运而生。mysql
分布式追踪系统发展很快,种类繁多,给咱们带来很大的方便。但在数据采集过程当中,有时须要侵入用户代码,而且不一样系统的 API 并不兼容,这就致使了若是您但愿切换追踪系统,每每会带来较大改动。OpenTracing为了解决不一样的分布式追踪系统 API 不兼容的问题,诞生了 OpenTracing 规范。OpenTracing 是一个轻量级的标准化层,它位于应用程序/类库和追踪或日志分析程序之间。详细介绍见linux
Skywalking是一款国内开源的应用性能监控工具,支持对分布式系统的监控、跟踪和诊断。git
Skywalking是一款APM(应用程序性能监视器),尤为适用于微服务,Cloud Native和基于容器的架构系统。也称为分布式跟踪系统。它提供了一种自动检测应用程序的方法:无需更改目标应用程序的任何源代码; 以及具备高效流媒体模块的收集器。github
针对分布式系统的APM(应用性能监控)系统,特别针对微服务、cloud native和容器化(Docker, Kubernetes, Mesos)架构, 其核心是个分布式追踪系统。web
该项目由国人吴晟基于OpenTracking实现的开源项目skywalking(码云、github)sql
2017年12月8日,Apache软件基金会孵化器项目管理委员会 ASF IPMC宣布“SkyWalking全票经过,进入Apache孵化器”数据库
官方的首页的图片上能够到skywalking大体架构;apache
特性:
存储,集群管理多种机制可选;
优秀的可视化方案;
多种监控手段,语言探针和服务网格;
轻量高效,不须要大数据(官网这句没懂);
支持告警;
多语言自动探针,Java,.NET Core和Node.JS;
模块化,用户界面化;
目前最新版的可以支持jdk1.9;
国内众多一线大厂在采用skywalking作为监控与链路性能分析平台,如:华为、当当、小米、招商等;
2019年4月SkyWalking已毕业成为Apache顶级项目,有多位大牛技术支撑以及社区有大量受众参与;
性能好,针对单实例5000tps的应用,在全量采集的状况下,只增长 10% 的CPU开销。详细评测见《skywalking agent performance test》。
采用探针技术,在使用过程当中,彻底是0代码,无侵入,分布式自动采集与监控系统运行;
支持自动及手动探针;
自动探针:Java支持的中间件、框架与类库列表;
手动探针:OpenTrackingApi、@Trace注解、trackId集成到日志中。
整体特性(来源于官网博客):
1.Skywalking Agent:使用Javaagent作字节码植入,无侵入式的收集,并经过HTTP或者gRPC方式发送数据到Skywalking Collector。
2. Skywalking Collector :链路数据收集器,对agent传过来的数据进行整合分析处理并落入相关的数据存储中。
3. Storage:Skywalking的存储,时间更迭,sw已经开发迭代到了6.x版本,在6.x版本中支持以ElasticSearch、Mysql、TiDB、H二、做为存储介质进行数据存储。
4. UI :Web可视化平台,用来展现落地的数据。
参见官方(博客):http://skywalking.apache.org/zh/blog/2019-01-03-monitor-microservice.html
官网
apache官网:http://skywalking.apache.org/zh/
github:https://github.com/apache/skywalking/
官方示例:http://122.112.182.72:8080/
官方文档(可用谷歌翻译看):https://github.com/apache/skywalking/tree/master/docs
下载
全文检索引擎:elasticsearch-6.6.2
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.2.tar.gz
elasticsearch-head管理插件
wget https://codeload.github.com/mobz/elasticsearch-head/zip/master
apache-skywalking6.4安装包
wget https://mirrors.tuna.tsinghua.edu.cn/apache/skywalking/6.4.0/apache-skywalking-apm-6.4.0.zip
注意:skywalking6.4使用数据源elasticsearch-6.x系统版本(我下载最新的elasticsearch-7.x版本折腾了半天,最后放弃,因skywalking会向elasticsearch建立大量template索引模板,因elasticsearch-7.x的版本过新,其中部份字段配置有变化,导制没法建立成功)
安装步骤
安装数据源与插件(相关安装与使用,网上资料众多)
elasticsearch-6.6.2(安装过程省略,请自行百度)
elasticsearch-head(安装过程省略,请自行百度)
解压apache-skywalking-apm-6.4.0.zip,目录说明:
agent:监控代理程序,请在系统服务所在的主机保留该目录内全部内容(该目录作为独立程序);
bin:启动脚本
webapp:UI程序与服务目录
config:相关数据源、注册中心等配置存放目录
配置数据源
使用elasticsearch
打开config/application.yml配置文件 ,在storage节点,注释h2数据源,启用elasticsearch全文检索引擎作为数据源存储;
h2是默认自带的内嵌式数据库(有兴趣可自行百度)
注意其中的几个核心参数:
# 配置你的elasticsearch服务的IP和端口,集群IP请用“,”逗号隔开 clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:192.168.110.35:9200} #存储最多7天的内容,过时数据将会清理。所以请根据实际需求进行调整 recordDataTTL: ${SW_STORAGE_ES_RECORD_DATA_TTL:7} # Unit is day # 每10秒刷新数据到收集器中 flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:10} # 提供2个并发请求,若是系统业务量大,日志产生的很是快,请根据实况调整 concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2}
使用mysql
打开config/application.yml配置文件 ,在storage节点,一样将h2注释掉,将mysql的配置打开
打开config/datasource-settings.properties配置文件,根据自身的配置进行修改
后续本文演示的内容均基于elasticsearch数据源进行展现;
修改agent代理配置
注意如下修改:
# 将Your_ApplicationName修改成自已的项目名称 agent.service_name=${SW_AGENT_NAME:Your_ApplicationName} # 将代理程序的指向收集器服务的IP和端口 collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.110.35:11800}
运行
运行收集器与UI程序
进入bin目录(我是上传到linux环境下运行,若是是windows请双击运行 startup.bat)
./startup.sh
也能够分别单独启动
单独启动collector,运行
./oapService.sh
单独启动UI,运行
./webappService.sh
使用agnet
在apache-skywalking-apm-bin解压包下的agent目录中为代理程序独立包目录。该agent文件夹,能够单独复制出放在项目系统所在服务器的任意目录下。
agent文件夹下的skywalking-agent.jar即为监控代理程序,只须要在jvm的启动命令中加载该jar包,便可完成监控代理;
部署 java agent
Linux Tomcat 7, Tomcat 8
修改 tomcat/bin/catalina.sh,在首行加入以下信息:
CATALINA_OPTS="$CATALINA_OPTS -javaagent:/opt/apache-skywalking-apm-bin/agent/skywalking-agent.jar"; export CATALINA_OPTS
Windows Tomcat 7, Tomcat 8
修改 tomcat/bin/catalina.bat,在首行加入以下信息:
set "CATALINA_OPTS=-javaagent:/opt/apache-skywalking-apm-bin/agent/skywalking-agent.jar"
JAR file
在启动你的应用程序的命令行中添加 -javaagent 参数. 并确保在-jar参数以前添加它. 例如:
java -javaagent:/opt/apache-skywalking-apm-bin/agent/skywalking-agent.jar -jar yourApp.jar
IDAE配置Agent
在IDEA中配置本地程序agent代理,在VM options中-javaagent:D:\test\apache-skywalking-apm-bin\agent\skywalking-agent.jar,配置完毕直接运行便可;
运行项目系统后,打开系统界面进行业务操做,则skywalking-agent.jar会根据代理计划,收集相关日志发送到skywalking收集器服务中。
skywalkingUI界面
打开skywalking管理界面(skywalking服务部署的IP):
刷新界面,便可获取agent发送的监控数据;
界在相对比较简洁,功能很少,但都比较实用,能够在多个项目与数据库之间切换,相关指标能够看懂,不在本文详细描述,具体操做以下:
首页概览
URL链路追踪
链接拓扑图
当前数据库
全局信息
当前服务
当前实例
总结
简洁又好用的软件,比大众点评的cat要容易上手(我的认为不如cat功能强大与复杂),已经知足对于系统的链路跟踪与分析需求,最后再次向skywalking原始做者大牛吴晟致敬;
附上个人《skywalking 5.X 分布式链路跟踪 使用笔记》里面有关于项目代码中使用手动探针:OpenTrackingApi、@Trace注解、trackId集成到日志中。