一.背景

之前在公司做日志收集进行技术选型的时候考虑过ELK,但是由于其有点笨重,而且不支持链路追踪,于是在gitee上看到一个GVP项目Plumelog,并且在测试服进行了使用。这个项目对代码的入侵较小,但是还是需要配置,最近看到了另外一款 APM系统skywalking,这款开源软件2015年由个人吴晟(华为开发者,gitee上的Gitee封面人物中还有他的一篇专栏)开源 , 2017年加入Apache孵化器,使用java探针字节码增加技术,实现对整个应用的监控,对代码实现了真正的零侵入。Apache的开源项目,你值得拥有。

二.简介

SkyWalking:一个开源的观测平台, 用于从服务和云原生基础设施收集, 分析, 聚合以及可视化数据.

SkyWalking 为你提供了一种简便的方式来清晰地观测分布式系统, 甚至可以观测横跨不同云的系统.

SkyWalking 更是一种现代的应用程序性能监控(Application Performance Monitoring)工具, 尤其是专为云原生, 基于容器以及分布式的系统.

在许多不同的场景下, SkyWalking 为观察和监控分布式系统提供了解决方案. 首先是像传统的方式那样, SkyWalking 为服务提供了自动打点代理, 如 Java, C# 和 Node.js. 同时也提供了手动打点 SDK, 像 Go (尚未支持) , C++ (尚未支持). 随着越来越多的编程语言需要获得支持, 运行时操作代码的危险性, 以及云原生基础设施越来越强大, SkyWalking 还可以使用服务网格基础探针来收集数据, 以帮助了解整个分布式系统. 总之, SkyWalking 为 服务(service), 服务实例(service instance), 以及 端点(endpoint) 提供了观测能力.

服务(Service), 实例(Instance) 以及 端点(Endpoint) 等概念在如今随处可见, 所以让我们先了解一下他们在 SkyWalking 中都表示什么意思.

  • 服务(Service). 表示对请求提供相同行为的一系列或一组工作负载. 在使用打点代理或 SDK 的时候, 你可以定义服务的名字. 如果不定义的话, SkyWalking 将会使用你在平台上定义的名字, 如 Istio.
  • 服务实例(Service Instance). 上述的一组工作负载中的每一个工作负载称为一个实例. 就像 Kubernetes 中的 pods 一样, 服务实例未必就是操作系统上的一个进程. 但当你在使用打点代理的时候, 一个服务实例实际就是操作系统上的一个真实进程.
  • 端点(Endpoint). 对于特定服务所接收的请求路径, 如 HTTP 的 URI 路径和 gRPC 服务的类名 + 方法签名.

使用 SkyWalking 时, 你可以看到服务与端点之间的拓扑结构, 每个服务/服务实例/端点的性能指标, 还可以设置报警规则.

除此之外, 你还可以通过 SkyWalking 原生代理, SDK 以及 Zipkin, Jaeger 和 OpenCensus 来进行分布式追踪.

网上有很多关于Skywalking和其他APM系统的对比

比如下面这篇文章:

下面也贴出一个对比表格:(摘自:https://blog.csdn.net/weixin_34393428/article/details/92408030?utm_term=skywalking%E5%AF%B9%E6%AF%94&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allsobaiduweb~default-3-92408030&spm=3001.4430)

pinpoint

zipkin

jaeger

skywalking

OpenTracing兼容





客户端支持语言

java、php

java,c#,go,php等

java,c#,go,php等

Java, .NET Core, NodeJS and PHP

存储

hbase

ES,mysql,Cassandra,内存

ES,kafka,Cassandra,内存

ES,H2,mysql,TIDB,sharding sphere

传输协议支持

thrift

http,MQ

udp/http

gRPC

ui丰富程度





实现方式-代码侵入性

字节码注入,无侵入

拦截请求,侵入

拦截请求,侵入

字节码注入,无侵入

扩展性





trace查询

不支持

支持

支持

支持

告警支持

支持

不支持

不支持

支持

jvm监控

支持

不支持

不支持

支持

性能损失





下面是skywalking的项目地址和文档地址

skywalking项目地址:

码云项目地址:https://gitee.com/OpenSkywalking/sky-walking

Apache 项目地址:http://skywalking.incubator.apache.org/

中文文档地址:https://skyapm.github.io/document-cn-translation-of-skywalking/

三.安装及配置

1. 下载

下载页面:http://skywalking.apache.org/downloads/

先选择APM包的方式进行安装

skywalking es 生产版本推荐_java

点击source选择想要的版本进行下载,右侧的Distribution是对每个版本的描述,当然如果这里没有你想要的版本,也可以将页面下拉

skywalking es 生产版本推荐_java_02

点击此处可以看到更多的版本并下载,此处我选择的是6.1.0版本的。

2. 解压

解压后得到apache-skywalking-apm-bin目录,目录结构如下

skywalking es 生产版本推荐_java_03

skywalking的agent包结构如下

+-- 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
         .....
    +-- optional-plugins
         apm-gson-2.x-plugin.jar
         .....
    +-- bootstrap-plugins
         jdk-http-plugin.jar
         .....
    +-- logs
    skywalking-agent.jar

3. 运行

bin目录下,有很多运行脚本,其中点击startup.bat(windows)或startuo.sh(linux)即可启动oapServicewebappService

skywalking es 生产版本推荐_skywalking_04

windows启动后会有两个窗口,放置在那里即可

skywalking es 生产版本推荐_jar_05

4. 项目配置agent

在使用java -jar命令运行你的jar包时,加入-javaagent:skywalking path\agent\skywalking-agent.jar -Dskywalking.agent.service_name=test -Dskywalking.collector.backend_service=127.0.0.1:11800(在-jar之前)。此处我就不单独使用jar包演示,而是使用idea来启动项目

skywalking es 生产版本推荐_Apache_06

  • -javaagent:skywalking path\agent\skywalking-agent.jar:指定的是刚刚解压好的skywalking的文件下的agent目录下的skywalking-agent.jar的位置
  • -Dskywalking.agent.service_name=test:在日志记录时,这个工程的名称
  • Dskywalking.collector.backend_serviceskywalking-collector(OAP-service)服务的地址,默认是127.0.0.1:11800,可以在OAP-service的配置文件中修改

四. 查看日志

配置好以上内容后,启动项目,当看到日志中有以下输出内容代表agent配置是正确的

skywalking es 生产版本推荐_Apache_07

访问localhost:8080(UI项目的默认端口是8080,可以在配置文件中修改),默认账号密码admin/admin,可以看到如下界面。展示了你被访问的接口、服务、端点等信息。

skywalking es 生产版本推荐_jar_08


skywalking es 生产版本推荐_java_09

skywalking es 生产版本推荐_jar_10


skywalking es 生产版本推荐_skywalking_11

还可以看到实时的拓扑图

skywalking es 生产版本推荐_skywalking_12

当然,最重要的是 日志打印以及链路追踪

skywalking es 生产版本推荐_skywalking_13

五. 总结

skywalking是一款非常成熟的APM系统,在链路追踪日志记录等方面十分专业,而且速度很快,性能影响不大,UI页面十分友好,并且对代码实现了真正的完全无侵入,非常推荐去了解和部署