1. 前言
SkyWalking
开源项目由吴晟2015年创建,同年10月在GitHub上作为个人项目开源。SkyWalking
项目的核心目标,是针对微服务、Cloud Native
、容器化架构,提供应用性能监控和分布式调用链追踪能力。 目前已加入Apache
孵化器。目前支持链路追踪和监控应用组件如下,基本涵盖主流框架和容器,如国产PRC Dubbo
和motan
等,国际化的spring boot,spring cloud
。提供以下主要功能:
- 分布式追踪和上下文传输
- 应用、实例、服务性能指标分析
- 根源分析
- 应用拓扑分析
- 应用和服务依赖分析
- 慢服务检测
- 性能优化
下面是 SkyWalking 6.x的架构图:
工作原理:
- 在应用程序中添加
SkyWalking Agent
,就可以将接口、服务、数据库、MQ
等进行追踪,将追踪结果通过HTTP
或gRPC
发送到OAPServer
,经过分析和聚合,将结果存储到Elasticsearch
或H2
,SkyWalking
同时提供了一个SkyWalking UI
的可视化界面,UI
以GraphQL + HTTP
方式获取存储数据进行展示。
相关资料:
2. APM与其它对比
性能损耗对比:
从上表可以看出,在三种链路监控组件中,skywalking
的探针对吞吐量的影响最小,zipkin
的吞吐量居中。pinpoint
的探针对吞吐量的影响较为明显,在500并发用户时,测试服务的吞吐量从1385降低到774,影响很大。然后再看下CPU
和memory
的影响,在内部服务器进行的压测,对CPU
和memory
的影响都差不多在10%之内。
2.1 Zipkin
调用链:
优点:与spring-cloud
项目整合非常方便,而且支持以spring-boot
的方式部署zipkin-collector
缺点:功能比较少,而且有代码入侵(jar
包和配置项)
2.2 Pinpoint
首页:
调用链:
优点:功能比较全,UI
比较好,而且调用链的跟踪粒度非常细,并且依靠HBase
强大的存储能力适合日志量非常庞大的场景
缺点:由于采集信息太过详细所以对性能的损耗最大,并且HBase
的维护代价有点大,需要有能力hold住一套HBase
集群
2.3 Skywalking
首页:
应用拓扑图:
优点:功能比较全,UI比较好,性能损耗较少,主流中间件和数据库的监控基本都支持
缺点:es强在检索能力但存储能力偏弱
3. Server安装部署
Step1 :准备所需的第三方软件:
- 需要服务器8080、11800、12800这3个端口未被占用
JDK6+
(被监控的应用程序运行在jdk6及以上版本)JDK8+
(SkyWalking oapServer
和WebUI
部署在jdk8及以上版本)Elasticsearch
5.x+(集群模式或不使用)- 被监控应用的宿主服务器系统时间(包含时区)与
oapServer
、webUI
部署的宿主服务器时间设置正确且相同
Step2 :下载发布版:
Step3 :修改配置:
- 修改
config
目录下的application.yml
文件(只需修改storage的配置,其他默认就可以了)
Step4 :启动:
- 启动命令在
bin
目录下,需要启动oap
和webapp
,执行以下命令:
sh startup.sh
可以分别单独启动oap
和webapp
,也可以通过startup.sh
两个一齐启动:
Step5 :访问:
- http://127.0.0.1:8080/
- admin/admin
4. Agent安装
4.1 拷贝agent
拷贝agent目录到所需位置(被监控的应用程序服务器):
- agent在server的目录下,插件和配置都包含在包中,请不要改变目录结构
agent目录介绍:
- 配置文件在
/config
目录中 - 插件全部放置在
/plugins
目录中.新的插件,也只需要在启动阶段,放在目录中,就自动生效,删除则失效.
-Log
默认使用文件输出到/logs
目录中.
4.2 修改配置
agent
的配置可通过修改配置文件或者添加启动参数配置:
vim config/agent.config
agent.service_name
:应用名collector.backend_service
:server端地址
4.3 添加trace-ignore插件
复制optional-plugins
里面的apm-trace-ignore-plugin-x.jar
到plugins里面:
cp optional-plugins/apm-trace-ignore-plugin-6.0.0-GA.jar plugins/
可以通过配置skywalking.trace.ignore_path
环境变量去设置忽略的url
,多个以,隔开:
-Dskywalking.trace.ignore_path=/your/path/1/**,/your/path/2/**
4.4 安装agent
应用程序的命令行中添加-javaagent
参数. 并确保在-jar
参数之前添加它:
java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar -jar yourApp.jar
下面是通过启动参数配置来配置agent的例子:
java -javaagent:/opt/skywalking/agent/skywalking-agent.jar \ -Dskywalking.trace.ignore_path=/actuator/** \ -Dskywalking.agent.service_name=zlt-uaa \ -Dskywalking.collector.backend_service=127.0.0.1:11800 \ -jar \ yourApp.jar \
5. 日志信息清理
需要清理的有两部分数据:
- ES的索引数据
- skywalking的oap-server的log文件
5.1 ES索引数据清理
可通过修改skywalkingconf/application.yml
的ttl
配置来自动清理:
5.2 oap-server的log文件清理
1.创建清理脚本
vim sw-log-clear.sh #/bin/bash #只保留5天内的日志文件 LAST_DATA=`date -d "-5 days" "+%Y-%m-%d"` #删除5天前的所有日志 rm -f /opt/skywalking/logs/skywalking-oap-server-${LAST_DATA}-*.log
2.添加定时任务
#编辑crontab文件,添加相应的任务 vim /etc/crontab #设置每天的凌晨一点清除索引 0 1 * * * root sh /opt/sw_script/sw-log-clear.sh