Skywalking + Springboot + ES搭建流程

简介

skywalking又称应用程序性能管理(APM)工具,它和日志管理工具都具有相同的底线目标:它们可以帮助你更深入地了解应用程序中正在发生的事情。尽管目标相似,但执行方式却不同,并且每个目标都专注于应用程序中的不同方面。

APM工具提供有关应用程序性能的分析。这些分析可以包括执行代码中不同elements所花费的时间,完成某些事务所需的时间等等。

这些工具还使我们能够监视生产环境,应用程序负载(事务,请求和每秒的页面数),计算响应时间以及可能导致延迟响应的总体方向。 。

组件对比

首先有必要说明一下为什么使用skywalking。

针对zipkincatskywalking这几个较为主流的监控产品做了一些调研和对比,整理以后情况汇总如下表:

项目 Cat Zipkin Skywalking
调用链可视化
聚合报表 非常丰富 较丰富
服务依赖图 简单 简单
埋点方式 侵入式 侵入式 非侵入,字节码增强
VM监控指标
支持语言 java/.net 丰富 java/.net/Nodejs/php/go
存储机制 mysql(报表)、本地文件/HDFS(调用链) 内存、es、mysql等 H2、es、mysql等
社区支持 主要在国内 国外主流 Apache支持
使用案例 美团、携程、陆金所 京东、阿里定制后不开源 华为、小米、当当、微众银行
APM
开发基础 eBay cal Google Dapper Google Dapper
是否支持webflux

根据上表说一下为什么我选择用Skywalking,主要理由有以下几点:

  1. 我的微服务体系选用的服务网关是spring-cloud-gateway,是基于webflux实现的,很多监控并不支持,从资料来看cat不支持;

  2. 我想要监控接口级别的指标,如吞吐量、p99等,这些是目前zipkin不足的地方,而Skywalking这方面做得不错;

  3. Skywalking是非侵入式的,通过-javaagent机制运行时注入,即使以后更换监控方案也不需要对代码大动干戈。

架构

我使用的是最新版8.7.0,该版本下Skywalking主要分为oap、webapp和agent三部分,oap和webapp分别用于汇总数据和展示,这两块共同组成了Skywalking的平台;agent是探针,部署在需要收集数据的应用服务器上,并将数据同步到Skywalking的平台。数据持久化方案笔者选用了elasticsearch 6.8.0。

数据持久化

Skywalking提供了多种数据持久化的方案,常见的大致分为:

  • elasticsearch(7.x以下版本)

  • elasticsearch7

  • h2(默认方案)

  • mysql

  • tidb

  • influxdb (时序数据库)

  • postgresql

根据网上资料,influxdb较其他持久化方案是最优的。但是笔者还没有研究过influxdb,并且公司也没有使用,出于实际性的考虑,还是采用了elasticsearch作为持久化存储

搭建过程

环境依赖

JDK8

由于笔者选用的方案是skywalking 8.7.0 + elasticsearch 6.8.18, 而elasticsearch6.x版本需要依赖jdk8及以上版本,所以需要安装JDK

1、elasticsearch 下载安装

下载地址

Download Elasticsearch Free | Get Started Now | Elastic | Elastic

版本依赖关系

Elastic Support Matrix | Elasticsearch

在这里插入图片描述
image.gif

环境依赖

elasticsearch 需要依赖jdk环境。

需要注意的是:7.x版本以上需要jdk11及以上版本, 否则会启动时会报错

也可以通过ES内置的JDK包进行环境设置

参考链接:ES 启动 warning future versions of Elasticsearch will require Java 11_走码观花-CSDN博客

安装流程

  • 下载好后对elasticsearch进行解压

tar -zxvf elasticsearch-6.8.18.tar.gz

  • 创建操作用户及分组

因为安全问题elasticsearch 不让用root用户直接运行,否则启动时会报错:

Exception in thread "main" java.nio.file.AccessDeniedException: /home/elasticsearch-6.8.18/config/jvm.options

所以要创建新用户。

具体操作如下:

useradd es

passwd es

再输入两次密码(自定义)

为用户赋权限

chown -R es:es /opt/elasticsearch-6.8.18

然后使用es用户启动 :su es

cd /opt/elasticsearch-6.8.18/bin

启动es命令:./elasticsearch -d

2、skywalking 下载安装

下载地址

Downloads | Apache SkyWalking

image
image.gif

安装流程

  • 对下载好的skywalking进行解压

tar -zxvf apache-skywalking-apm-8.7.0.tar.gz

  • 修改skywalking config,修改存储方式用es

vi /opt/apache-skywalking-apm-bin/config/application.yml

找到storage,修改selector为:${SW_STORAGE:elasticsearch}

image
image.gif
  • 修改启动端口。由于默认端口为8080,会跟一些应用存在冲突,所以需要修改启动端口来避免端口冲突。

vi /opt/apache-skywalking-apm-bin/webapp/webapp.yml

修改server.port

image
image.gif
  • 启动skywalking

cd /opt/apache-skywalking-apm-bin/bin

./startup.sh

在浏览器中输入ip:port

image
image.gif

3、skywalking应用监控

skywalking的应用监控是无侵入型监控,需要把探针agent,部署在需要收集数据的应用服务器上,并在启动时加上探针位置参数即可完成数据收集。

  • 将部署的skywalking的agent文件夹拷贝出来放到需要收集数据的应用服务器上

  • 修改项目启动参数。

nohup /opt/jdk1.8.0_291/bin/java -javaagent:/opt/apache-skywalking-apm-bin/agent/skywalking-agent.jar -Dskywalking.agent.service_name=abc -Dskywalking.collector.backend_service=127.0.0.1:11800 -jar -Xms1024m -Xmx1024m $file_name --spring.profiles.active=test >/dev/null 2>&1 &

参数说明:

-javaagent:{1} -Dskywalking.agent.service_name={2} -Dskywalking.collector.backend_service=${3}

${1}:agent文件夹下的skywalking-agent.jar的路径

${2}:注册到skywalking的服务名称,用于在skywalking拓扑图上展示

${3}:skywalking接收agent发送采集数据的服务及端口。端口默认11800

4、skywalking日志追踪

配置方式

官方默认支持三种日志框架。引入版本号取决于安装的skywalking的版本,如skywalking.version:8.7.0

log4j

依赖引入

<pre><dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-log4j-1.x</artifactId>
<version>${skywalking.version}</version>
</dependency></pre>

配置 log4j.properties

<pre>log4j.appender.CONSOLE.layout=TraceIdPatternLayout # 设置日志输出格式 log4j.appender.CONSOLE.layout.ConversionPattern=%d [%T] %-5p %c{1}:%L - %m%n</pre>

log4j2

依赖引入

<pre><dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-log4j-2.x</artifactId>
<version>${skywalking.version}</version>
</dependency></pre>

配置 log4j2.xml

<pre><Configuration status="debug">
<Appenders>

<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d [%traceId] %-5p %c{1}:%L - %m%n"/>
</Console>

<GRPCLogClientAppender name="grpc-log">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</GRPCLogClientAppender>
</Appenders>
<Loggers>
<logger name="com.a.eye.skywalking.ui" level="debug" additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="grpc-log"/>
</logger>
<logger name="org.apache.kafka" level="INFO"></logger>
<logger name="org.apache.skywalking.apm.dependencies" level="INFO"></logger>
<Root level="debug">
<AppenderRef ref="Console"/>
<AppenderRef ref="grpc-log"/>
</Root>
</Loggers>
</Configuration>

</pre>

Logback

依赖引入

<pre><dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-logback-1.x</artifactId>
<version>${skywalking.version}</version>
</dependency></pre>

配置 logback.xml

<pre><configuration>  

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%mdc] [%thread] %-5level %logger{36} -%msg%n</Pattern>
</layout>
</encoder>
</appender>
<! -- 配置异步记录 AsyncAppender -->
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>1024</queueSize>
<neverBlock>true</neverBlock>
<appender-ref ref="STDOUT"/>
</appender>

<appender name="grpc-log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n</Pattern>
</layout>
</encoder>
</appender>


<root level="DEBUG">  
<appender-ref ref="STDOUT"/> 
<appender-ref ref="ASYNC"/> 
<appender-ref ref="grpc-log"/>
</root>

</configuration></pre>

如果是使用GRPCLogClientAppender, 需要在agent的config/agent.config文件中加上grpc的配置,否则会默认访问127.0.0.1:11800的端口上传日志,导致远程日志上传失败

plugin.toolkit.log.grpc.reporter.server_host=${SW_GRPC_LOG_SERVER_HOST:xx.xx.xx.xx}

plugin.toolkit.log.grpc.reporter.server_port=${SW_GRPC_LOG_SERVER_PORT:11800}

plugin.toolkit.log.grpc.reporter.max_message_size=${SW_GRPC_LOG_MAX_MESSAGE_SIZE:10485760}

plugin.toolkit.log.grpc.reporter.upstream_timeout=${SW_GRPC_LOG_GRPC_UPSTREAM_TIMEOUT:30}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容