目录
1、skywalking是什么
1.2 链路追踪框架对比
1.3 性能对比
1.4 Skywalking主要功能特性
2、 SkyWalking 环境搭建部署
2.1 下载 SkyWalking
2.2 搭建SkyWalking OAP 服务
2.3 SkyWalking中三个概念
3、 SkyWalking 接入微服务
3.1 linux环境—通过jar包方式接入
3.2 windos环境—在IDEA中使用Skywalking
3.3 Skywalking跨多个微服务跟踪
4、 Skywalking持久化跟踪数据
4.1 基于mysql持久化
5、 自定义SkyWalking链路追踪
5.1 @Trace将方法加入追踪链路
编辑 5.2 加入@Tags或@Tag
6.性能分析
7.Skywalking集成日志框架
7.1Skywalking通过grpc上报日志 (需要v8.4.0+)
8.SkyWalking 告警功能
8.1告警规则
8.2Webhook(网络钩子)
8.3邮件告警功能实践
9.Skywalking高可用
10.demo源码:springcloudAlibaba: Alibaba微服务学习demo
根据需求下载对应版本解压即可。
日志信息存储在logs目录
页面的右下角可以中英文切换,可以切换选择要展示的时间区间的跟踪数据
#!/bin/sh
# SkyWalking Agent配置
export SW_AGENT_NAME=springboot‐skywalking‐demo #Agent名字,一般使用`spring.application.name`
export SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 #配置 Collector 地址。
export SW_AGENT_SPAN_LIMIT=2000 #配置链路的最大Span数量,默认为 300。
export JAVA_AGENT=‐javaagent:/usr/local/soft/apache‐skywalking‐apm‐bin‐es7/agent/skywalking‐agent.jar
java $JAVA_AGENT ‐jar springboot‐skywalking‐demo‐0.0.1‐SNAPSHOT.jar #jar启动
java ‐javaagent:/usr/local/soft/apache‐skywalking‐apm‐bin‐es7/agent/skywalking‐agent.jar
‐DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800
‐DSW_AGENT_NAME=springboot‐skywalking‐demo ‐jar springboot‐skywalking‐demo‐0.0.1‐SNAPSHOT.jar
-javaagent:E:\apache-skywalking-apm-8.5.0\apache-skywalking-apm-bin\agent\skywalking-agent.jar
-DSW_AGENT_NAME=api-gateway
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800
访问8444端口:
3. 添加对应版本的mysql数据驱动包到oap-libs目录下
4. 启动Skywalking
测试:重启skywalking,验证跟踪数据会不会丢失
org.apache.skywalking
apm-toolkit-trace
8.5.0
测试
测试
引入依赖
org.apache.skywalking
apm-toolkit-logback-1.x
8.5.0
添加logback-spring.xml文件,并配置 %tid 占位符
-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} [%tid] %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}
-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} [%tid] %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}
%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n
plugin.toolkit.log.grpc.reporter.server_host=${SW_GRPC_LOG_SERVER_HOST:127.0.0.1}
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}
Skywalking UI效果
[{"scopeId": 1,"scope": "SERVICE","name": "serviceA","id0": "12","id1": "","ruleName": "service_resp_time_rule","alarmMessage": "alarmMessage xxxx","startTime": 1560524171000}, {"scopeId": 1,"scope": "SERVICE","name": "serviceB","id0": "23","id1": "","ruleName": "service_resp_time_rule","alarmMessage": "alarmMessage yyy","startTime": 1560524171000}]
org.springframework.boot spring‐boot‐starter‐mail
server:port: 9134#邮箱配置spring:mail:host: smtp.163.com#发送者邮箱账号username: 你的邮箱@163.com#发送者密钥password: 你的邮箱服务密钥default‐encoding: utf‐8port: 465 #端口号465或587protocol: smtpproperties:mail:debug:falsesmtp:socketFactory:class: javax.net.ssl.SSLSocketFactory
@Data
public class SwAlarmDTO {
private Integer scopeId;
private String scope;
private String name;
private Integer id0;
private Integer id1;
private String ruleName;
private String alarmMessage;
private Long startTime;
}
@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/alarm")
public class SwAlarmController {
private final JavaMailSender sender;
@Value("${spring.mail.username}")
private String from;
/**
* 接收skywalking服务的告警通知并发送至邮箱
*/
@PostMapping("/receive")
public void receive(@RequestBody List alarmList) {
SimpleMailMessage message = new SimpleMailMessage();
// 发送者邮箱
message.setFrom(from);
// 接收者邮箱
message.setTo(from);
// 主题
message.setSubject("告警邮件");
String content = getContent(alarmList);
// 邮件内容
message.setText(content);
sender.send(message);
log.info("告警邮件已发送...");
}
private String getContent(List alarmList) {
StringBuilder sb = new StringBuilder();
for (SwAlarmDTO dto : alarmList) {
sb.append("scopeId: ").append(dto.getScopeId())
.append("\nscope: ").append(dto.getScope())
.append("\n目标 Scope 的实体名称: ").append(dto.getName())
.append("\nScope 实体的 ID: ").append(dto.getId0())
.append("\nid1: ").append(dto.getId1())
.append("\n告警规则名称: ").append(dto.getRuleName())
.append("\n告警消息内容: ").append(dto.getAlarmMessage())
.append("\n告警时间: ").append(dto.getStartTime())
.append("\n\n‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐\n\n");
}
return sb.toString();
}
}
@Override
@Trace
@Tag(key="getAll",value="returnedObj")
public List all() throws InterruptedException {
TimeUnit.SECONDS.sleep(2);
return orderMapper.selectAll();
}
可以选择性修改监听端口
2. 配置ui服务webapp.yml文件的listOfServers,写两个地址
3.启动服务测试
‐DSW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.3.10:11800,192.168.3.12:1180