一. 介绍

1. 基本信息

SkyWalking 创建于2015年,提供分布式追踪功能。从5.x开始,项目进化为一个完成功能的Application Performance Monitoring系统。
他被用于追踪、监控和诊断分布式系统,特别是使用微服务架构,云原生或容积技术。提供以下主要功能:

  • 分布式追踪和上下文传输
  • 应用、实例、服务性能指标分析
  • 根源分析
  • 应用拓扑分析
  • 应用和服务依赖分析
  • 慢服务检测
  • 性能优化

特点

  • 性能好:针对单实例5000tps的应用,在全量采集的情况下,只增加 10% 的CPU开销
  • 支持多语言探针
  • 支持自动及手动探针:其中手动探针通过OpenTrackingApi、@Trace注解、trackId集成到日志中。

2. SkyWalking的主要部分及其功能

SkyWalking主要由三大部分组成:Agent,Collector,Web;

  • Agent:作用是使用JavaAgent字节码增强技术将Agent的代码织入程序中,完成Agent无代码侵入地获取程序内方法的上下文并进行增强和收集信息并发送给Collector;与Collector进行心跳,表明Agent客户端的存活。
  • Collector:作用是维护存活的Agent实例,并收集从Agent发送至Collector的数据,进行处理及持久化;

Web:作用是将Collector收集的参数进行不同维度的展示

链路追踪的主要流程.png
 

下面是 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 官方下载安装包内已包含,最终我们只需考虑存储设备即可。

SW总体可以分为四部分:
1.Skywalking Agent:使用Javaagent做字节码植入,无侵入式的收集,并通过HTTP或者gRPC方式发送数据到Skywalking Collector。
2. Skywalking Collector :链路数据收集器,对agent传过来的数据进行整合分析处理并落入相关的数据存储中。
3. Storage:Skywalking的存储,时间更迭,sw已经开发迭代到了6.x版本,在6.x版本中支持以ElasticSearch、Mysql、TiDB、H2、作为存储介质进行数据存储。
4. UI :Web可视化平台,用来展示落地的数据。

Skywalking Agent配置

通过了解配置,可以对一个组件功能有一个大致的了解。让我们一起看一下skywalking的相关配置。
解压开skywalking的压缩包,在agent/config文件夹中可以看到agent的配置文件。
从skywalking支持环境变量配置加载,在启动的时候优先读取环境变量中的相关配置。

skywalking agent使用javaagent无侵入式的配合collector实现对分布式系统的追踪和相关数据的上下文传递。

Skywalking Collector关键配置
Collector支持集群部署,zookeeper、kubernetes(如果你的应用是部署在容器中的)、consul(GO语言开发的服务发现工具)是sw可选的集群管理工具,结合大家具体的部署方式进行选择。详细配置大家可以去Skywalking官网下载介质包进行了解。

Collector端口设置

downsampling: 采样汇总统计维度,会分别按照分钟、【小时、天、月】(可选)来统计各项指标数据。
通过设置TTL相关配置项可以对数据进行自动清理。
Skywalking 在6.X中简化了配置。collector提供了gRPC和HTTP两种通信方式。
UI使用rest http通信,agent在大多数场景下使用grpc方式通信,在语言不支持的情况下会使用http通信。
关于绑定IP和端口需要注意的一点是,通过绑定IP,agent和collector必须配置对应ip才可以正常通信。

Collector存储配置
在application.yml中配置的storage模块配置中选择要使用的数据库类型,并填写相关的配置信息。

Collector Receiver
Receiver是Skywalking在6.x提出的新的概念,负责从被监控的系统中接受指标数据。用户完全可以参照OpenTracing规范来上传自定义的监控数据。Skywalking官方提供了service-mesh、istio、zipkin的相关能力。

现在Skywalking支持服务端采样,配置项为sampleRate,比例采样,如果配置为5000则采样率就是50%。

关于采样设置的一点注意事项

关于服务采样配置的一点建议,如果Collector以集群方式部署,比如:Acollector和Bcollector,建议Acollector.sampleRate = Bcollector.sampleRate。如果采样率设置不相同可能会出现数据丢失问题。

假设Agent端将所有数据发送到后端Collector处,A采样率设置为30%,B采样率为50%。

假设有30%的数据,发送到A上,这些数据被全部正确接受并存储,极端情况(与期望的采样数据量相同)下,如果剩下20%待采样的数据发送到了B,这个时候一切都是正常的,如果这20%中有一部分数据被送到了A那么,这些数据将是被忽略的,由此就会造成数据丢失。

二、业务调用链路监控

Service Topology监控

调用链路监控可以从两个角度去看待。我们先从整体上来认识一下我们所监控的系统。
通过给服务添加探针并产生实际的调用之后,我们可以通过Skywalking的前端UI查看服务之间的调用关系。
我们简单模拟一次服务之间的调用。新建两个服务,service-provider以及service-consumer,服务之间简单的通过Feign Client 来模拟远程调用。

从图中可以看到:

有两个服务节点:provider & consumer
有一个数据库节点:localhost【mysql】
一个注册中心节点

consumer消费了provider提供出来的接口。

一个系统的拓扑图让我们清晰的认识到系统之间的应用的依赖关系以及当前状态下的业务流转流程。细心的可能发现图示节点consumer上有一部分是红色的,红色是什么意思呢?
红色代表当前流经consumer节点的请求有一断时间内是响应异常的。当节点全部变红的时候证明服务现阶段内就彻底不可用了。运维人员可以通过Topology迅速发现某一个服务潜在的问题,并进行下一步的排查并做到预防。

Skywalking Trace监控

Skywalking通过业务调用监控进行依赖分析,提供给我们了服务之间的服务调用拓扑关系、以及针对每个endpoint的trace记录。

我们在之前看到consumer节点服务中发生了错误,让我们一起来定位下错误是发生在了什么地方又是什么原因呢?

在每一条trace的信息中都可以看到当前请求的时间、GloableId、以及请求被调用的时间。我们分别看一看正确的调用和异常的调用。

Trace调用链路监控

图示展示的是一次正常的响应,这条响应总耗时19ms,它有4个span:

span1 /getStore = 19ms  响应的总流转时间
span2 /demo2/stores = 14ms  feign client 开始调用远程服务后的响应的总时间
span3 /stores = 14ms 接口服务响应总时间
span4 Mysql = 1ms  服务提供端查询数据库的时间

这里span2和span3的时间表现相同,其实是不同的,因为这里时间取了整。

在每个Span中可以查看当前Span的相关属性。

组件类型: SpringMVC、Feign                  
 Span状态: false
 HttpMethod: GET
 Url: http://192.168.16.125:10002/demo2/stores

这是一次正常的请求调用Trace日志,可能我们并不关心正常的时候,毕竟一切正常不就是我们期待的么!

我们再来看下,异常状态下我们的Trace以及Span又是什么样的呢。

发生错误的调用链中Span中的is error标识变为true,并且在名为Logs的TAB中可以看到错误发生的具体原因。根据异常情况我们就可以轻松定位到影响业务的具体原因,从而快速定位问题,解决问题。

通过Log我们看到连接被拒,那么可能是我们的网络出现了问题(可能性小,因为实际情况如果网络出现问题我们连这个trace都看不到了),也有可能是服务端配置问题无法正确建立连接。通过异常日志,我们迅速就找到了问题的关键。

实际情况是,我把服务方停掉了,做了一次简单的模拟。可见,通过拓扑图示我们可以清晰的看到众多服务中哪个服务是出现了问题的,通过trace日志我们可以很快就定位到问题所在,在最短的时间内解决问题。

三、服务性能指标监控 

Skywalking还可以查看具体Service的性能指标,根据相关的性能指标可以分析系统的瓶颈所在并提出优化方案。

Skywalking 性能监控

在服务调用拓扑图上点击相应的节点我们可以看到该服务的

SLA: 服务可用性(主要是通过请求成功与失败次数来计算)
CPM: 每分钟调用次数
Avg Response Time: 平均响应时间

从应用整体外部来看我们可以监测到应用在一定时间段内的

服务可用性指标SLA
每分钟平均响应数
平均响应时间
服务进程PID
服务所在物理机的IP、HostName、Operation System

Service JVM信息监控

还可以监控到Service运行时的CPU、堆内存、非堆内存使用率、以及GC情况。这些信息来源于JVM。注意这里的数据可不是机器本身的数据。

四、服务告警

前文我们提到了通过查看拓扑图以及调用链路可以定位问题,可是运维人员又不可能一直盯着这些数据,那么我们就需要告警能力,在异常达到一定阈值的时候主动的提示我们去查看系统状态。

在Sywalking 6.x版本中新增了对服务状态的告警能力。它通过webhook的方式让我们可以自定义我们告警信息的通知方式。诸如:邮件通知、微信通知、短信通知等。

Skywalking 服务告警

先来看一下告警的规则配置。在alarm-settings.xml中可以配置告警规则,告警规则支持自定义。

一份告警配置由以下几部分组成:

service_resp_time_rule:告警规则名称 ***_rule (规则名称可以自定义但是必须以’_rule’结尾
indicator-name:指标数据名称: 定义参见http://t.cn/EGhfbmd
op: 操作符: > , < , = 【当然你可以自己扩展开发其他的操作符】
threshold:目标值:指标数据的目标数据 如sample中的1000就是服务响应时间,配合上操作符就是大于1000ms的服务响应
period: 告警检查周期:多久检查一次当前的指标数据是否符合告警规则
counts: 达到告警阈值的次数
silence-period:忽略相同告警信息的周期
message:告警信息
webhooks:服务告警通知服务地址

Skywalking通过HttpClient的方式远程调用在配置项webhooks中定义的告警通知服务地址。

了解了SW所传送的数据格式我们就可以对告警信息进行接收处理,实现我们需要的告警通知服务啦!

我们将一个服务停掉,并将另外一个服务的某个对外暴露的接口让他休眠一定的时间。然后调用一定的次数观察服务的状态信息以及告警情况。

总结:

本文简单的通过skwaylking的配置来对skywlaking的功能进行一次初步的了解,对skwaylking新提出的概念以及新功能进行简单的诠释,方便大家了解和使用。通过使用APM工具,可以让我们方便的查看微服务架构中系统瓶颈以及性能问题等。

二、如何安装SkyWalking(Java)(本机)

1、在安装SkyWalking之前,需要选择数据的存在方式并进行搭建环境,SkyWalking支持两种存储方式:H2、mysql和ES

2、获取Apache的最新发布的稳定版本或者下载github上面的源码在稳定版本的tag上进行编译完成之后会获取到如下图所示的文件结构

下载skywalking6.0.0
http://skywalking.apache.org/downloads/

http://mirrors.tuna.tsinghua.edu.cn/apache/skywalking/6.5.0/apache-skywalking-apm-6.5.0.zip,解压即可。

下载jdk8
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
经测试高于jdk8不支持。

3、安装collector模块

修改collector的配置:找到config目录下的application.yml文件,找到以下的配置,

MySQL配置方法:

找个mysql-connector-java-5.1.47.jar
放入apache-skywalking-apm-incubating\oap-libs
经测试mysql/j版本是6.x.x和8.x.x会有问题

mysql配置
打开apache-skywalking-apm-incubating\config\application.yml
注释掉storage:h2 解锁mysql
打开apache-skywalking-apm-incubating\config\datasource-settings.properties
修改mysql的配置

加入dataSource.useSSL=false (可选)

  mysql:
properties:
jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://10.200.110.4:3306/duan"}
dataSource.user: ${SW_DATA_SOURCE_USER:duan}
dataSource.password: ${SW_DATA_SOURCE_PASSWORD:123456}
dataSource.cachePrepStmts: ${SW_DATA_SOURCE_CACHE_PREP_STMTS:true}
dataSource.prepStmtCacheSize: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_SIZE:250}
dataSource.prepStmtCacheSqlLimit: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_LIMIT:2048}
dataSource.useServerPrepStmts: ${SW_DATA_SOURCE_USE_SERVER_PREP_STMTS:true}
dataSource.useSSL: false
metadataQueryMaxSize: ${SW_STORAGE_MYSQL_QUERY_MAX_SIZE:5000} 

ES配置方法:

storage:
elasticsearch:
clusterName: CollectorDBCluster //修改集群名称为你的ES的集群名称
clusterNodes: localhost:9300 //修改集群节点为你的ES的集群节点地址

然后启动bin目录下的startup.sh就可以将collector和Web模块启动起来了。访问本地的8080端口即可登录页面,账号密码都为admin。

核对webapp
apache-skywalking-apm-incubating\webapp\webapp.yml
server:
port为网站端口,默认的8080容易与其他软件冲突,建议改一下比如18080
server:
ip设置为0.0.0.0 (可选)
collector:ribbon:listOfServers设置为127.0.0.1:12800(多个以逗号隔开)

保证18080,10800,11800,12800端口不被占用

启动前先初始化 执行oapServiceInit.bat

然后执行:startup.bat,启动skywalking

web模块如果启动正常,可以通过访问:http://10.200.110.100:18080/,看到如下页面:

collector模块如果启动正常,会在MySQL中创建很多表及数据:

创建windows服务
复制oapService.bat为oapService1.bat
注释::start "%OAP_PROCESS_TITLE%" 注意,后面%_EXECJAVA%开始的部分不要注释掉
复制webappService.bat为webappService1.bat
注释::start "%WEBAPP_PROCESS_TITLE%" 注意,后面%_EXECJAVA%开始的部分不要注释掉
然后用nssm将其发布成windows服务
nssm install SkywalkingOap
nssm install SkywalkingWebapp

4、agent

4.1、agent配置

使用javaagent无侵入式的配合collector实现对分布式系统的追踪和相关数据的上下文传递。

配置文件位置
apache-skywalking-apm-incubating\agent\config\agent.config

配置说明

  • agent.namespace: 跨进程链路中的header,不同的namespace会导致跨进程的链路中断
  • agent.service_name:一个服务(项目)的唯一标识,这个字段决定了在sw的UI上的关于service的展示名称--是应用程序名(//改为你的项目名字)
  • agent.sample_n_per_3_secs: 客户端采样率,默认是-1代表全采样
  • agent.authentication: 与collector进行通信的安全认证,需要同collector中配置相同
  • agent.ignore_suffix: 忽略特定请求后缀的trace
  • collecttor.backend_service: agent需要同collector进行数据传输的IP和端口--是agent的地址
  • logging.level: agent记录日志级别

这个配置可在.net core程序中重写

3.2、agent启动

D:\gitspace\appsflyer-reflux\build\libs>java -javaagent:D:\soft\skywalking\apache-skywalking-apm-bin\agent\skywalking-agent.jar -jar appsflyer-reflux-201905241004.jar

Skywalking入门介绍,skywalking6.5.0 +mysql (windows) 搭建的更多相关文章

  1. MySQL入门介绍(mysql-8.0.13)

    MySQL入门介绍(mysql-8.0.13单机部署) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL数据库介绍 1>.MySQL是一种开放源代码的关系型数据库 ...

  2. 基于.net core 2.0+mysql+AceAdmin搭建一套快速开发框架

    前言 .net core已经出来一段时间了,相信大家对.net core的概念已经很清楚了,这里就不再赘述.笔者目前也用.net core做过一些项目,并且将以前framework下的一些经验移植到了 ...

  3. 【数据库】3.0 MySQL入门学习(三)——Windows系统环境下MySQL安装

    1.0 我的操作系统是window10 专业版 64位.,不过至少windows7以上系统都是一样的. 关于MySQL如何下载,请参考博文: [数据库]2.0 如何获得MySQL以及MySQL安装 h ...

  4. [Python爬虫] 在Windows下安装PhantomJS和CasperJS及入门介绍(上)

    最近在使用Python爬取网页内容时,总是遇到JS临时加载.动态获取网页信息的困难.例如爬取CSDN下载资源评论.搜狐图片中的“原图”等,此时尝试学习Phantomjs和CasperJS来解决这个问题 ...

  5. 【数据库】7.0 MySQL入门学习(七)——MySQL基本指令:帮助、清除输入、查询等

    1.0 help == ? 帮助指令,查询某个指令的解释.用法.说明等.详情参考博文: [数据库]6.0 MySQL入门学习(六)——MySQL启动与停止.官方手册.文档查询 https://www. ...

  6. 【数据库】4.0 MySQL入门学习(四)——linux系统环境下MySQL安装

    1.0 我的操作系统是CentOS Linux release 7.6.1810  (Core) 系统详细信息如下: Linux version 3.10.0-957.1.3.el7.x86_64 ( ...

  7. 《从0到1学习Flink》—— 介绍Flink中的Stream Windows

    前言 目前有许多数据分析的场景从批处理到流处理的演变, 虽然可以将批处理作为流处理的特殊情况来处理,但是分析无穷集的流数据通常需要思维方式的转变并且具有其自己的术语(例如,"windowin ...

  8. 学习Mysql过程中拓展的其他技术栈:Docker入门介绍

    一.Docker的介绍和安装 1. Docker是什么 百度百科的介绍: Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linu ...

  9. 【数据库】6.0 MySQL入门学习(六)——MySQL启动与停止、官方手册、文档查询

    1.0 MySQL主要有四种启动方式:直接启动.安全启动.服务启动.多实例启动. 直接启动: 服务器启动: 安全启动(最常用): 多实例启动: 2.0如何获得MySQL帮助 2.1官方手册 下面提供百 ...

随机推荐

  1. jmeter-分布式压测部署之负载机的设置

    本文分三个部分: 1.windows下负载机的配置 2.Linux下负载机的配置 3.遇到的问题 *************************************************** ...

  2. Python游戏开发——打砖块

    打砖块游戏向来大家也不会很陌生,今天来用python来开发一下这个小游戏 1.引用对应数据库 import pygame from pygame.locals import * import sys, ...

  3. spring cloud 框架源码 activiti工作流 vue.js html 跨域 前后分离 springboot

    1.代码生成器: [正反双向](单表.主表.明细表.树形表,快速开发利器)freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本.处理类.service等完整模块2. ...

  4. delphi webbrowser用法集锦

    delphi webbrowser用法集锦 (2012-05-13 08:29:00) 标签: it 分类: 软件_Software WebBrowser1.GoHome; //到浏览器默认主页 We ...

  5. 汇编push,pop

    版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明.2019-08-24,00:40:12作者By-----溺心与沉浮----博客园 1.BASE,TOP是2个32位的通用寄存器,里面存储的 ...

  6. [b0014] HDFS 常用JAVA 操作实战

    目的: 学习用java进行的常用hdfs操作 参考: [b0002] Hadoop HDFS cmd常用命令练手 环境: hadoop2.6.4 win7 下的eclipse环境调试已经配置好,参考前 ...

  7. java Random类生成随机数

    封装一个方法: import java.util.Random; public class RandomUtil { /** * nextInt(num) 产生[0 ~ (num-1)]的随机数, 闭 ...

  8. 基于JieBaNet+Lucene.Net实现全文搜索

    实现效果: 上一篇文章有附全文搜索结果的设计图,下面截一张开发完成上线后的实图: 基本风格是模仿的百度搜索结果,绿色的分页略显小清新. 目前已采集并创建索引的文章约3W多篇,索引文件不算太大,查询速度 ...

  9. kubernetes CRI 前世今生

    在学习kubernetes的过程中,我们会遇到CRI.CNI.CSI.OCI 等术语,本文试图先通过分析k8s目前默认的一种容器运行时架构,来帮助我们更好理解k8s 运行时背后设计逻辑.进而引出CRI ...

  10. Highways POJ - 1751

    题目链接:https://vjudge.net/problem/POJ-1751 思路: 最小生成树板子,只需要多记录每个dis[x]的权值是从哪个点到x这个点的. #include <stdi ...