前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用skywalking监控springboot项目

使用skywalking监控springboot项目

作者头像
Vincent-yuan
发布2022-05-06 08:49:58
1.5K0
发布2022-05-06 08:49:58
举报
文章被收录于专栏:Vincent-yuanVincent-yuan
1、SkyWalking简介

SkyWalking是国内开源的基于字节码注入的调用链分析以及应用监控分析工具。

特点是支持多种插件,UI功能较强,接入端无代码侵入。

目前使用厂商最多,版本更新较快,已成为 Apache 基金会顶级项目。

它有哪些功能呢?

  • 多种监控手段。可以通过语言探针和 service mesh 获得监控是数据。
  • 多个语言自动探针。包括 Java,.NET Core 和 Node.JS。
  • 轻量高效。无需大数据平台,和大量的服务器资源。
  • 模块化。UI、存储、集群管理都有多种机制可选。
  • 支持告警。
  • 优秀的可视化解决方案。

它的整体架构

整个架构,分成上、下、左、右四部分:

这里,我们舍弃掉 Metric 指标相关,而着重在 Tracing 链路相关功能。

  • 上部分 Agent :负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 数据信息。而我们目前采用的是,SkyWalking Agent 收集 SkyWalking Tracing 数据,传递给服务器。
  • 下部分 SkyWalking OAP :负责接收 Agent 发送的 Tracing 数据信息,然后进行分析(Analysis Core) ,存储到外部存储器( Storage ),最终提供查询( Query )功能。
  • 右部分 Storage :Tracing 数据存储。目前支持 ES、MySQL、Sharding Sphere、TiDB、H2 多种存储器。而我们目前采用的是 ES ,主要考虑是 SkyWalking 开发团队自己的生产环境采用 ES 为主。
  • 左部分 SkyWalking UI :负责提供控台,查看链路等等。
2. skywalking 的下载与安装

下载

下载地址

 安装

解压后的目录

3. 启动

在bin目录下执行startup.bat即可启动服务

执行startup.bat之后会启动如下两个服务: (1)Skywalking-Collector:追踪信息收集器,通过 gRPC/Http 收集客户端的采集信息 ,Http默认端口 12800,gRPC默认端口 11800。 (2)Skywalking-Webapp:管理平台页面 默认端口 8080

4、配置信息

这里可以用来设置数据存储,如果是本地也可以先采用默认的,先不做修改,这里只是用来查看使用springboot项目集成skywalking之后的效果,可以不用做修改。

4.1 OAP 配置文件

config/application.yml

主要配置SkyWakling集群方式、数据存储,配置文件内容如下

代码语言:javascript
复制
core:
  default:
  restHost: ${SW_CORE_REST_HOST:0.0.0.0}
  restPort: ${SW_CORE_REST_PORT:12800}
  restContextPath: ${SW_CORE_REST_CONTEXT_PATH:/}
  gRPCHost: ${SW_CORE_GRPC_HOST:0.0.0.0}
  gRPCPort: ${SW_CORE_GRPC_PORT:11800}
  downsampling:
    - Hour
    - Day
    - Month
  # Set a timeout on metric data. After the timeout has expired, the metric data will automatically be deleted.
  recordDataTTL: ${SW_CORE_RECORD_DATA_TTL:90} # Unit is minute
  minuteMetricsDataTTL: ${SW_CORE_MINUTE_METRIC_DATA_TTL:90} # Unit is minute
  hourMetricsDataTTL: ${SW_CORE_HOUR_METRIC_DATA_TTL:36} # Unit is hour
  dayMetricsDataTTL: ${SW_CORE_DAY_METRIC_DATA_TTL:45} # Unit is day
  monthMetricsDataTTL: ${SW_CORE_MONTH_METRIC_DATA_TTL:18} # Unit is month
storage:
  h2:
    driver: ${SW_STORAGE_H2_DRIVER:org.h2.jdbcx.JdbcDataSource}
    url: ${SW_STORAGE_H2_URL:jdbc:h2:mem:skywalking-oap-db}
    user: ${SW_STORAGE_H2_USER:sa}
    #  elasticsearch:
    #    # nameSpace: ${SW_NAMESPACE:""}
    #    clusterNodes:     ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}
    #    indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:2}
    #    indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0}
    #    # Batch process setting, refer to https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-docs-bulk-processor.html
    #    bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:2000} # Execute the bulk every 2000 requests
    #    bulkSize: ${SW_STORAGE_ES_BULK_SIZE:20} # flush the bulk every 20mb
    #    flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:10} # flush the bulk every 10 seconds whatever the number of requests
    #    concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2} # the number of concurrent requests
receiver-register:
    default:
receiver-trace:
    default:
bufferPath: ${SW_RECEIVER_BUFFER_PATH:../trace-buffer/}  # Path to trace buffer files, suggest to use absolute path
bufferOffsetMaxFileSize: ${SW_RECEIVER_BUFFER_OFFSET_MAX_FILE_SIZE:100} # Unit is MB
bufferDataMaxFileSize: ${SW_RECEIVER_BUFFER_DATA_MAX_FILE_SIZE:500} # Unit is MB
bufferFileCleanWhenRestart: ${SW_RECEIVER_BUFFER_FILE_CLEAN_WHEN_RESTART:false}
sampleRate: ${SW_TRACE_SAMPLE_RATE:10000} # The sample rate precision is 1/10000. 10000 means 100% sample in default.
receiver-jvm:
    default:
#service-mesh:
5.部署探针
5.1.IDEA 部署探针

 修改项目启动的 VM 运行参数

 1、点击菜单栏中的 Run -> EditConfigurations...

 2、增加如下参数到VM options中:

代码语言:javascript
复制
-javaagent:C:\Users\ke\Desktop\apache-skywalking-apm-6.6.0\apache-skywalking-apm-bin\agent\skywalking-agent.jar 
-Dskywalking.agent.service_name=service-myapp

-javaagent:用于指定探针路径 -Dskywalking.agent.service_name:用于重写 agent/config/agent.config 配置文件中的服务名

-Dskywalking.collector.backend_service:用于重写 agent/config/agent.config 配置文件中的服务地址

启动后看到如下启动日志:

代码语言:javascript
复制
  INFO 2020-02-13 14:57:36:310 main SnifferConfigInitializer : Config file found in C:\Users\ke\Desktop\apache-skywalking-apm-6.6.0\apache-skywalking-apm-bin\agent\config\agent.config.
5.2、Java 命令行启动方式
代码语言:javascript
复制
java -javaagent:C:\Users\ke\Desktop\apache-skywalking-apm-6.6.0\apache-skywalking-apm-bin\agent/skywalking-agent.jar=-Dskywalking.agent.service_name=service-myapp,-Dskywalking.collector.backend_service=localhost:11800 -jar service-myapp.jar
5.3. 脚本启动

编写脚本(可修改后使用)

代码语言:javascript
复制
[root@basenode demo]# vi startup.sh 

#!/bin/sh
# SkyWalking Agent配置
export SW_AGENT_NAME=springboot-skywalking-wudl #Agent名字,一般使用`spring.application.name`
export SW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.1.180:11800 #配置 Collector 地址。
export SW_AGENT_SPAN_LIMIT=2000 #配置链路的最大Span数量,默认为 300。
export JAVA_AGENT=-javaagent:/opt/module/skywalking-apm-bin-es7/agent/skywalking-agent.jar
java $JAVA_AGENT -jar /opt/module/demo/user-center-0.0.1-SNAPSHOT.jar #jar启动

运行

代码语言:javascript
复制
[root@basenode demo]# sh startup.sh 
DEBUG 2021-09-12 18:01:30:050 main AgentPackagePath : The beacon class location is jar:file:/opt/module/skywalking-apm-bin-es7/agent/skywalking-agent.jar!/org/apache/skywalking/apm/agent/core/boot/AgentPackagePath.class. 
INFO 2021-09-12 18:01:30:051 main SnifferConfigInitializer : Config file found in /opt/module/skywalking-apm-bin-es7/agent/config/agent.config. 

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.2.RELEASE)

2021-09-12 18:01:39.170  INFO 5590 --- [           main] c.wudl.usercenter.UserCenterApplication  : Starting UserCenterApplication v0.0.1-SNAPSHOT on basenode with PID 5590 (/opt/module/demo/user-center-0.0.1-SNAPSHOT.jar started by root in /opt/module/demo)
2021-09-12 18:01:39.177  INFO 5590 --- [           main] c.wudl.usercenter.UserCenterApplication  : The following profiles are active: dev
2021-09-12 18:01:43.948  INFO 5590 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 9909 (http)
2021-09-12 18:01:44.050  INFO 5590 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2021-09-12 18:01:44.050  INFO 5590 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.29]
2021-09-12 18:01:44.196  INFO 5590 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2021-09-12 18:01:44.197  INFO 5590 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 4819 ms
2021-09-12 18:01:47.260  INFO 5590 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2021-09-12 18:01:47.956  INFO 5590 --- [           main] t.m.m.autoconfigure.MapperCacheDisabler  : Clear tk.mybatis.mapper.util.MsUtil CLASS_CACHE cache.
2021-09-12 18:01:47.956  INFO 5590 --- [           main] t.m.m.autoconfigure.MapperCacheDisabler  : Clear tk.mybatis.mapper.genid.GenIdUtil CACHE cache.
2021-09-12 18:01:47.957  INFO 5590 --- [           main] t.m.m.autoconfigure.MapperCacheDisabler  : Clear tk.mybatis.mapper.version.VersionUtil CACHE cache.
2021-09-12 18:01:47.957  INFO 5590 --- [           main] t.m.m.autoconfigure.MapperCacheDisabler  : Clear EntityHelper entityTableMap cache.
2021-09-12 18:01:48.365  INFO 5590 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 9909 (http) with context path ''
2021-09-12 18:01:48.370  INFO 5590 --- [           main] c.wudl.usercenter.UserCenterApplication  : Started UserCenterApplication in 11.576 seconds (JVM running for 18.419)
6.简单测试

完事,可以去 SkyWalking UI 查看是否链路收集成功。

1、首先,使用浏览器,访问下 http://127.0.0.1:8079/demo/echo 地址,请求下 Spring Boot 应用提供的 API。因为,我们要追踪下该链路。

2、然后,继续使用浏览器,打开 http://127.0.0.1:8080/ 地址,进入 SkyWalking UI 界面。如下图所示:

这里,我们会看到 SkyWalking 中非常重要的三个概念:

  • 服务(Service) :表示对请求提供相同行为的一系列或一组工作负载。在使用 Agent 或 SDK 的时候,你可以定义服务的名字。如果不定义的话,SkyWalking 将会使用你在平台(例如说 Istio)上定义的名字。 这里,我们可以看到 Spring Boot 应用的服务为 "demo-application",就是我们在环境变量 SW_AGENT_NAME 中所定义的。
  • 服务实例(Service Instance) :上述的一组工作负载中的每一个工作负载称为一个实例。就像 Kubernetes 中的 pods 一样, 服务实例未必就是操作系统上的一个进程。但当你在使用 Agent 的时候, 一个服务实例实际就是操作系统上的一个真实进程。 这里,我们可以看到 Spring Boot 应用的服务为 {agent_name}-pid:{pid}@{hostname},由 Agent 自动生成。关于它,我们在「5.1 hostname」小节中,有进一步的讲解,胖友可以瞅瞅。
  • 端点(Endpoint) :对于特定服务所接收的请求路径, 如 HTTP 的 URI 路径和 gRPC 服务的类名 + 方法签名。 这里,我们可以看到 Spring Boot 应用的一个端点,为 API 接口 /demo/echo

3、之后,点击「拓扑图」菜单,进入查看拓扑图的界面。如下图所示:

 4、再之后,点击「追踪」菜单,进入查看链路数据的界面。如下图所示:

7.其他

你也可以搭建skywalking的集群环境,步骤如下:

搭建一个 SkyWalking 集群环境,步骤如下:

  • 第一步,搭建一个 Elasticsearch 服务的集群。
  • 第二步,搭建一个注册中心的集群。目前 SkyWalking 支持 Zookeeper、Kubernetes、Consul、Nacos 作为注册中心。
  • 第三步,搭建一个 SkyWalking OAP 服务的集群,同时参考《SkyWalking 文档 —— 集群管理》,将 SkyWalking OAP 服务注册到注册中心上。
  • 第四步,启动一个 Spring Boot 应用,并配置 SkyWalking Agent。另外,在设置 SkyWaling Agent 的 SW_AGENT_COLLECTOR_BACKEND_SERVICES 地址时,需要设置多个 SkyWalking OAP 服务的地址数组。
  • 第五步,搭建一个 SkyWalking UI 服务的集群,同时使用 Nginx 进行负载均衡。另外,在设置 SkyWalking UI 的 collector.ribbon.listOfServers 地址时,也需要设置多个 SkyWalking OAP 服务的地址数组。

 设置告警等。

 参考:

https://skywalking.apache.org/zh/2020-04-19-skywalking-quick-start/

https://www.jianshu.com/p/5524b4545421

https://www.jianshu.com/p/5bb6e9d289c8

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-01-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、SkyWalking简介
  • 2. skywalking 的下载与安装
  • 3. 启动
  • 4、配置信息
  • 5.部署探针
    • 5.1.IDEA 部署探针
      • 5.2、Java 命令行启动方式
        • 5.3. 脚本启动
        • 6.简单测试
        • 7.其他
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档