文章目录

  • 下载包
  • 配置
  • 启动运行
  • idea配置运行skywalking的程序配置jvm参数
  • 创建spring-cloud-skywalking-demo项目
    • 修改pom.xml
    • 创建logback-spring.xml
    • 创建application.yml
    • 修改SpringCloudSkywalkingDemoApplication
    • 创建IndexController
    • 创建ProfileController
    • 创建UserController
    • 创建UserMapper
    • 创建User
    • 创建UserService
    • 创建UserServiceImpl
    • 验证Spring Cloud Skywalking是否工作

下载包

APM为v8.9.1
Agents为v8.10.0
如下图(示例):
百度云盘分享:
链接:https://pan.baidu.com/s/16zpZHcKqSoui3HUiUrqGnQ?pwd=2022
提取码:2022

配置

数据库使用默认的H2数据库,我使用默认配置,暂时不作修改
application.yml的storage可以选择数据库
如下图(示例):
如果需要修改访问端口可以在这里修改
如下图(示例):
webapp的webapp.yml修改server.port即可,我这里还是用的默认的

启动运行

运行前需要保证电脑配置了JAVA_HOME
如下图(示例):

双击文件直接运行
如下图(示例):
访问http://127.0.0.1:8080
如下图(示例):

idea配置运行skywalking的程序配置jvm参数

如下图(示例):
①配置VM options(skywalking-agent.jar所在位置):-javaagent:E:/skywalking/skywalking-agent/skywalking-agent.jar
注意事项:由于Skywalking 默认是不支持 Spring Cloud Gateway ,若为Cloud服务,需要将optional-plugins目录中最新的apm-spring-cloud-gateway*放入plugins目录中
②配置 Program arguments(Your_ApplicationName为当前的服务名称):-Dskywalking.agent.service_name=Your_ApplicationName
③配置指向写入链路数据的服务器地址-Dskywalking.collector.backend_service=localhost:11800

文章目录

  • 下载包
  • 配置
  • 启动运行
  • idea配置运行skywalking的程序配置jvm参数
  • 创建spring-cloud-skywalking-demo项目
    • 修改pom.xml
    • 创建logback-spring.xml
    • 创建application.yml
    • 修改SpringCloudSkywalkingDemoApplication
    • 创建IndexController
    • 创建ProfileController
    • 创建UserController
    • 创建UserMapper
    • 创建User
    • 创建UserService
    • 创建UserServiceImpl
    • 验证Spring Cloud Skywalking是否工作

创建spring-cloud-skywalking-demo项目

项目代码:https://gitee.com/java_wxid/java_wxid/tree/master/demo/spring-cloud-skywalking-demo
项目结构如下(示例):

修改pom.xml

代码如下(示例):

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.2.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>spring-cloud-skywalking-demo</artifactId><version>0.0.1-SNAPSHOT</version><name>spring-cloud-skywalking-demo</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--        lombok插件--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.14</version><scope>provided</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope><version>8.0.17</version></dependency><!-- mybatis自动配置依赖--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.0.0</version></dependency><!-- SkyWalking 工具类 --><dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-trace</artifactId><version>8.10.0</version></dependency><!-- apm-toolkit-logback-1.x --><dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-logback-1.x</artifactId><version>8.10.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

创建logback-spring.xml

代码如下(示例):

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true"  debug="false"><springProperty scop="context" name="spring.application.name" source="spring.application.name" defaultValue=""/><!--日志存放路径--><property name="PATH" value="logs"/><property name="FILE_NAME" value="${spring.application.name}"/><appender name="Console" 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>%black(%d{ISO8601}) [%tid] %highlight(${LOG_LEVEL_PATTERN:-%5p}) [%blue(%t)] %yellow(%C{1.}): %msg%n%throwable</Pattern></layout></encoder></appender><!--trace--><appender name="TRACE_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${PATH}/${FILE_NAME}_trace.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><FileNamePattern>${PATH}/${FILE_NAME}_trace.%d{yyyy-MM-dd}.log</FileNamePattern><maxHistory>60</maxHistory><totalSizeCap>1GB</totalSizeCap></rollingPolicy><encoder><pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %highlight([%-5level]) %green([%15.15thread]) %cyan([%logger:%line])--%mdc{client} %msg%n</pattern></encoder></appender><!--error--><appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${PATH}/${FILE_NAME}_error.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><FileNamePattern>${PATH}/${FILE_NAME}_error.%d{yyyy-MM-dd}.log</FileNamePattern><maxHistory>60</maxHistory><totalSizeCap>1GB</totalSizeCap></rollingPolicy><encoder><pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %highlight([%-5level]) %green([%15.15thread]) %cyan([%logger:%line])--%mdc{client} %msg%n</pattern></encoder><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>ERROR</level></filter></appender><root level="info"><appender-ref ref="Console" /><appender-ref ref="TRACE_FILE" /><appender-ref ref="ERROR_FILE" /></root></configuration>

创建application.yml

代码如下(示例):

server:port: 8199spring:application:name: springboot-skywalking-demodatasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://139.224.137.74:3306/syncdemo?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=falseusername: rootpassword: ca0a997ee4770063

修改SpringCloudSkywalkingDemoApplication

代码如下(示例):

package com.example.springcloudskywalkingdemo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.mybatis.spring.annotation.MapperScan;@MapperScan("com.example.springcloudskywalkingdemo.dao")
@SpringBootApplication
public class SpringCloudSkywalkingDemoApplication {public static void main(String[] args) {SpringApplication.run(SpringCloudSkywalkingDemoApplication.class, args);}}

创建IndexController

代码如下(示例):

package com.example.springcloudskywalkingdemo.controller;import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** @author zhiwei Liao* @Description* @Date create in 2022/9/12 0012 21:03*/
@RestController
public class IndexController {@RequestMapping("/")public String hello(){return "hello fox";}@RequestMapping("/notify")public String notify(@RequestBody Object obj){//TODO 告警信息,给技术负责人发短信,钉钉消息,邮件,微信通知等System.err.println(obj.toString());return "notify successfully";}
}

创建ProfileController

代码如下(示例):

package com.example.springcloudskywalkingdemo.controller;import org.apache.skywalking.apm.toolkit.trace.Trace;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;/*** @author zhiwei Liao* @Description* @Date create in 2022/9/12 0012 21:03*/
@RestController
public class ProfileController {@RequestMapping("/profile")public String profile(){process();return "success";}@Traceprivate void process(){ExecutorService executorService = Executors.newFixedThreadPool(2);CountDownLatch countDownLatch = new CountDownLatch(2);executorService.submit(new Runnable() {@Overridepublic void run() {countDownLatch.countDown();}});executorService.submit(new Runnable() {@Overridepublic void run() {// countDownLatch.countDown();}});try {countDownLatch.await(500, TimeUnit.MILLISECONDS);} catch (InterruptedException e) {e.printStackTrace();}}
}

创建UserController

代码如下(示例):

package com.example.springcloudskywalkingdemo.controller;import com.example.springcloudskywalkingdemo.entity.User;
import com.example.springcloudskywalkingdemo.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.apache.skywalking.apm.toolkit.trace.TraceContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Optional;/*** @author zhiwei Liao* @Description* @Date create in 2022/9/12 0012 21:03*/
@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {@Autowiredprivate UserService userService;@RequestMapping("/info/{id}")public User info(@PathVariable("id") Integer id){if(id==4){throw new IllegalArgumentException("参数异常");}try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}return userService.getById(id);}@RequestMapping("/list")public List<User> list(){//TraceContext可以绑定key-valueTraceContext.putCorrelation("name", "liaozhiwei");Optional<String> op = TraceContext.getCorrelation("name");log.info("name = {} ", op.get());//获取跟踪的traceIdString traceId = TraceContext.traceId();log.info("traceId = {} ", traceId);return userService.list();}}

创建UserMapper

代码如下(示例):

package com.example.springcloudskywalkingdemo.dao;import com.example.springcloudskywalkingdemo.entity.User;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
import java.util.List;
/*** @author zhiwei Liao* @Description* @Date create in 2022/9/12 0012 21:03*/
@Repository
public interface UserMapper {@Select("select * from user")List<User> list();@Select("select * from user where id=#{id}")User getById(Integer id);
}

创建User

代码如下(示例):

package com.example.springcloudskywalkingdemo.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;/*** @author zhiwei Liao* @Description* @Date create in 2022/9/12 0012 21:03*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private Integer id;private String name;}

创建UserService

代码如下(示例):

package com.example.springcloudskywalkingdemo.service;import com.example.springcloudskywalkingdemo.entity.User;
import java.util.List;/*** @author zhiwei Liao* @Description* @Date create in 2022/9/12 0012 21:03*/
public interface UserService {List<User> list();User getById(Integer id);
}

创建UserServiceImpl

代码如下(示例):

package com.example.springcloudskywalkingdemo.service.impl;import com.example.springcloudskywalkingdemo.dao.UserMapper;
import com.example.springcloudskywalkingdemo.entity.User;
import com.example.springcloudskywalkingdemo.service.UserService;
import org.apache.skywalking.apm.toolkit.trace.Tag;
import org.apache.skywalking.apm.toolkit.trace.Tags;
import org.apache.skywalking.apm.toolkit.trace.Trace;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;/*** @author zhiwei Liao* @Description* @Date create in 2022/9/12 0012 21:03*/
@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Trace@Tag(key = "list", value = "returnedObj")@Overridepublic List<User> list(){return userMapper.list();}@Trace@Tags({@Tag(key = "param", value = "arg[0]"),@Tag(key = "user", value = "returnedObj")})@Overridepublic User getById(Integer id){return userMapper.getById(id);}
}

验证Spring Cloud Skywalking是否工作

调用接口
如下图(示例):
TID查询的追踪ID
如下图(示例):
调用链路显示
如下图(示例):

【java_wxid项目】【第十五章】【Spring Cloud Skywalking集成】相关推荐

  1. 【云原生微服务>SCG网关篇十二】Spring Cloud Gateway集成Sentinel API实现多种限流方式

    文章目录 一.前言 二.Gateway集成Sentinel API 0.集成Sentinel的核心概念 1)GatewayFlowRule 和 ApiDefinition 2)GatewayFlowR ...

  2. 第十二章 Spring Cloud Config 统一配置中心详解

    目录 一.配置问题分析及解决方案 1.问题分析 2.解决方案 二.Spring Cloud Config 介绍 1.Spring Cloud Config特性 2.Spring Cloud Confi ...

  3. SpringBoot | 第三十五章:Mybatis的集成和使用

    2019独角兽企业重金招聘Python工程师标准>>> 前言 最近收到公众号留言说,单纯的Mybatis的集成和使用.前面在第九章:Mybatis-plus的集成和使用介绍了基于my ...

  4. 《深入理解 Spring Cloud 与微服务构建》第十五章 微服务监控 Spring Boot Admin

    <深入理解 Spring Cloud 与微服务构建>第十五章 微服务监控 Spring Boot Admin 文章目录 <深入理解 Spring Cloud 与微服务构建>第十 ...

  5. 《深入理解 Spring Cloud 与微服务构建》第十六章 Spring Boot Security 详解

    <深入理解 Spring Cloud 与微服务构建>第十六章 Spring Boot Security 详解 文章目录 <深入理解 Spring Cloud 与微服务构建>第十 ...

  6. 第十五章 Python和Web

    第十五章 Python和Web 本章讨论Python Web编程的一些方面. 三个重要的主题:屏幕抓取.CGI和mod_python. 屏幕抓取 屏幕抓取是通过程序下载网页并从中提取信息的过程. 下载 ...

  7. 第五章 Spring进阶-注解方式实现AOP(1)

    <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 徒弟:师傅,我 ...

  8. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十五章:第一人称摄像机和动态索引...

    Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十五章:第一人称摄像机和动态索引 原文:Introduction to 3 ...

  9. Gradle 1.12用户指南翻译——第三十五章. Sonar 插件

    本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  10. 鸟哥的Linux私房菜(基础篇)- 第十五章、磁碟配额(Quota)与进阶文件系统管理

    第十五章.磁碟配额(Quota)与进阶文件系统管理 最近升级日期:2009/09/10 如果您的 Linux 服务器有多个用户经常存取数据时,为了维护所有使用者在硬盘容量的公平使用,磁碟配额 (Quo ...

最新文章

  1. 2022-2028年中国特高压电网行业深度调研及投资前景预测报告
  2. 代替国足踢决赛?马宁当选卡日大战第四官员
  3. 7. 基于策略的强化学习——蒙特卡洛策略梯度REINFORCE算法
  4. Django REST framework【学习内容】
  5. Qt工作笔记-MySQL获取select表头(域)数据
  6. formidable上传文件时出错EXDEV, rename.....
  7. 语音识别技术的前世今生
  8. Eprime 倒计时代码
  9. Android个人日记本开发背景,毕业设计(论文)-手机app移动开发论文个人心情日记本的设计实现 .doc...
  10. 便捷注册live、MSN邮箱
  11. 抖音无水印视频下载,不用借助第三方网站【详细教程】
  12. python电影推荐系统_电影推荐系统---协同过滤算法(SVD,NMF)
  13. 补遗篇之单行道标志const
  14. 单片机微型计算机原理及接口技术,单片机微型计算机原理及接口技术课后习题答案第4章.docx...
  15. 【小算法】求约数个数
  16. 计算机为什么设ip,怎么设置电脑ip
  17. Debug:‘boost::this_thread‘ has not been declared; undefined reference to ‘boost::this_thread...‘
  18. 2021年牛宝宝起名取名,惊艳有诗意的三字女孩名
  19. 如何给安卓设备一键截图到电脑
  20. 天嵌IMX6核心板竞品分析(启杨IMX6)

热门文章

  1. 添加个人博客音乐外链
  2. 计算机u盘 硬盘无法读取,如何解决u盘启动盘读不出来硬盘的问题
  3. excel自动求和_excel工作表的行或列怎么自动求和
  4. ANT 下载,ant的配法 整理
  5. java 如何读取解析 mac 下的 pages 文稿,实现数据库正向工程
  6. 三国群英传服务器维护是几点,20191112维护公告
  7. 系统漏洞利用与提权攻击机场景
  8. 安卓平板“枯木回春”,vivo能分杯羹吗?
  9. 大写的贵,如履泥潭 DeFi 如何突破手续费困境?
  10. Coroutine协成