【java_wxid项目】【第十五章】【Spring Cloud Skywalking集成】
文章目录
- 下载包
- 配置
- 启动运行
- 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集成】相关推荐
- 【云原生微服务>SCG网关篇十二】Spring Cloud Gateway集成Sentinel API实现多种限流方式
文章目录 一.前言 二.Gateway集成Sentinel API 0.集成Sentinel的核心概念 1)GatewayFlowRule 和 ApiDefinition 2)GatewayFlowR ...
- 第十二章 Spring Cloud Config 统一配置中心详解
目录 一.配置问题分析及解决方案 1.问题分析 2.解决方案 二.Spring Cloud Config 介绍 1.Spring Cloud Config特性 2.Spring Cloud Confi ...
- SpringBoot | 第三十五章:Mybatis的集成和使用
2019独角兽企业重金招聘Python工程师标准>>> 前言 最近收到公众号留言说,单纯的Mybatis的集成和使用.前面在第九章:Mybatis-plus的集成和使用介绍了基于my ...
- 《深入理解 Spring Cloud 与微服务构建》第十五章 微服务监控 Spring Boot Admin
<深入理解 Spring Cloud 与微服务构建>第十五章 微服务监控 Spring Boot Admin 文章目录 <深入理解 Spring Cloud 与微服务构建>第十 ...
- 《深入理解 Spring Cloud 与微服务构建》第十六章 Spring Boot Security 详解
<深入理解 Spring Cloud 与微服务构建>第十六章 Spring Boot Security 详解 文章目录 <深入理解 Spring Cloud 与微服务构建>第十 ...
- 第十五章 Python和Web
第十五章 Python和Web 本章讨论Python Web编程的一些方面. 三个重要的主题:屏幕抓取.CGI和mod_python. 屏幕抓取 屏幕抓取是通过程序下载网页并从中提取信息的过程. 下载 ...
- 第五章 Spring进阶-注解方式实现AOP(1)
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 徒弟:师傅,我 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十五章:第一人称摄像机和动态索引...
Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十五章:第一人称摄像机和动态索引 原文:Introduction to 3 ...
- Gradle 1.12用户指南翻译——第三十五章. Sonar 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- 鸟哥的Linux私房菜(基础篇)- 第十五章、磁碟配额(Quota)与进阶文件系统管理
第十五章.磁碟配额(Quota)与进阶文件系统管理 最近升级日期:2009/09/10 如果您的 Linux 服务器有多个用户经常存取数据时,为了维护所有使用者在硬盘容量的公平使用,磁碟配额 (Quo ...
最新文章
- 2022-2028年中国特高压电网行业深度调研及投资前景预测报告
- 代替国足踢决赛?马宁当选卡日大战第四官员
- 7. 基于策略的强化学习——蒙特卡洛策略梯度REINFORCE算法
- Django REST framework【学习内容】
- Qt工作笔记-MySQL获取select表头(域)数据
- formidable上传文件时出错EXDEV, rename.....
- 语音识别技术的前世今生
- Eprime 倒计时代码
- Android个人日记本开发背景,毕业设计(论文)-手机app移动开发论文个人心情日记本的设计实现 .doc...
- 便捷注册live、MSN邮箱
- 抖音无水印视频下载,不用借助第三方网站【详细教程】
- python电影推荐系统_电影推荐系统---协同过滤算法(SVD,NMF)
- 补遗篇之单行道标志const
- 单片机微型计算机原理及接口技术,单片机微型计算机原理及接口技术课后习题答案第4章.docx...
- 【小算法】求约数个数
- 计算机为什么设ip,怎么设置电脑ip
- Debug:‘boost::this_thread‘ has not been declared; undefined reference to ‘boost::this_thread...‘
- 2021年牛宝宝起名取名,惊艳有诗意的三字女孩名
- 如何给安卓设备一键截图到电脑
- 天嵌IMX6核心板竞品分析(启杨IMX6)