配置告警信息
-
进入容器,操作如图

-
vi alarm-settings.yml 编辑规则,修改回调方法。在docker容器中更推荐挂载此文件。

-
规则说明
# 警报规则 rules: # 规则的唯一名称,必须以`_rule`结尾。 service_sla_rule: # 指标值需要是long、double或int # 指标名称 metrics-name: service_sla # 运算符 op: "<" # 临界点 threshold: 8000 # 评估指标的时间长度 period: 10 # 指标符合条件后多少次会触发警报 count: 2 # 检查多少次,报警触发后报警保持静音,默认为周期。 silence-period: 3 # 报警提示信息,规则说明 message: Successful rate of service {name} is lower than 80% in 2 minutes of last 10 minutes -
写测试接口及回调接口

-
skywalking 界面中报警信息

-
代码中log信息输出

自定义链路跟踪
代码中获取链路跟踪id,方便排查问题
可以将traceId写到表中,例如 订单逻辑,可以直接根据traceId查看某一个订单的链路,排查链路中是否有错误
- jar,版本根据使用的版本决定
<!-- SkyWalking 工具类 -->
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>8.4.0</version>
</dependency>
- 写代码,同一个线程中,traceId是相同的
@RequestMapping(value = "testTrace")
public String testTrace() {
// 往上下文中放入键和值
TraceContext.putCorrelation("myKey", "myValue");
// 根据键获取值
Optional<String> op = TraceContext.getCorrelation("myKey");
log.info("myValue = {} ", op.get());
// 获取跟踪id,此id就是skywalking追踪下方法的id
String traceId = TraceContext.traceId();
log.info("traceId = {} ", traceId);
// 可以直接将此值存入数据库或者日志中,方便系统出问题,跟中请求链路
SentUtil.getInstance().sent();
ReceiveUtil.getInstance().receive();
return new Date().toString();
}
一个业务方法想在ui界面的跟踪链路上显示出来,只需要在业务方法上加上(本项目调用本项目方法)@Trace注解即可(不能用于静态方法);
@Slf4j
public class SentUtil {
public static SentUtil getInstance(){
return new SentUtil();
}
/**
* @Trace 将方法引入追踪链路中,可以查看方法是否有问题
*
*/
@Trace(operationName = "sent_trace_name")
public void sent (){
// 往上下文中放入键和值
TraceContext.putCorrelation("sentKey", "sentValue");
// 根据键获取值
Optional<String> op = TraceContext.getCorrelation("sentKey");
log.info("sentValue = {} ", op.get());
// 获取跟踪id,此id就是skywalking追踪下方法的id
String traceId = TraceContext.traceId();
log.info("sent_traceId = {} ", traceId);
}
}
@Slf4j
public class ReceiveUtil {
public static ReceiveUtil getInstance(){
return new ReceiveUtil();
}
/**
* @Trace 将方法引入追踪链路中,可以查看方法是否有问题
*
*/
@Trace(operationName = "receive_trace_name")
public void receive (){
// 往上下文中放入键和值
TraceContext.putCorrelation("receiveKey", "receiveValue");
// 根据键获取值
Optional<String> op = TraceContext.getCorrelation("receiveKey");
log.info("receiveValue = {} ", op.get());
// 获取跟踪id,此id就是skywalking追踪下方法的id
String traceId = TraceContext.traceId();
log.info("receive_traceId = {} ", traceId);
}
}
- 调用请求,查看日志可以发现同一个请求中,链路的id是相同的

- 查看链路跟踪,自定义的方法也会跟踪

集成logback输出traceId日志
-
jar
<!-- SkyWalking-日志工具类-logback-1.x --> <dependency> <groupId>org.apache.skywalking</groupId> <artifactId>apm-toolkit-logback-1.x</artifactId> <version>8.4.0</version> </dependency> -
修改日志配置文件logback-spring.xml,增加或修改如下配置
- ch.qos.logback.core.encoder.LayoutWrappingEncoder
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout"> <!-- 根据自己的日志输出结构增加%tid即可 --> <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%tid] %highlight([%-5level] %logger{50} - %msg%n)</pattern> </layout> <charset>UTF-8</charset> </encoder>

这样日志中就会输出跟踪id了

- ch.qos.logback.core.encoder.LayoutWrappingEncoder

本文介绍了如何在容器环境中配置SkyWalking告警规则,通过编辑vialarm-settings.yml文件设置回调方法。详细展示了如何编写测试接口和回调接口,并在SkyWalking界面查看告警信息。同时,文章讲解了如何利用SkyWalking的TraceID进行链路跟踪,便于问题排查,以及如何在代码中获取和使用TraceID。此外,还展示了如何通过添加@Trace注解实现方法跟踪,并集成Logback输出包含TraceID的日志。最后,提供了相关依赖库版本和日志配置文件的修改示例。
7784

被折叠的 条评论
为什么被折叠?



