SkyWalking分布式系统应用程序性能监控工具-中

本文介绍了SkyWalking作为分布式系统性能监控工具的使用,包括代码级性能剖析、日志管理和告警功能。文章详细阐述了SkyWalking Agent的无侵入实现原理,涉及字节码操作和Java Agent技术,如premain和agentmain方法,以及ByteBuddy字节码操作库的使用。此外,还展示了如何通过ByteBuddy实现类的动态增强和方法耗时统计。
摘要由CSDN通过智能技术生成

🚀 优质资源分享 🚀

学习路线指引(点击解锁) 知识定位 人群定位
🧡 Python实战微信订餐小程序 🧡 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
💛Python量化交易实战💛 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

其他功能

性能剖析

在系统性能监控方法上,Skywalking 提出了代码级性能剖析这种在线诊断方法。这种方法基于一个高级语言编程模型共性,即使再复杂的系统,再复杂的业务逻辑,都是基于线程去进行执行的,而且多数逻辑是在单个线程状态下执行的;代码级性能剖析就是利用方法栈快照,并对方法执行情况进行分析和汇总;并结合有限的分布式追踪 span 上下文,对代码执行速度进行估算。有如下优势:

  • 精确的问题定位,直接到代码方法和代码行
  • 无需反复的增删埋点,大大减少了人力开发成本
  • 不用承担过多埋点对目标系统和监控系统的压力和性能风险
  • 按需使用,平时对系统无消耗,使用时的消耗稳定可能

SkyWalking的跟踪或者说性能剖析,选择某个服务

image-20220724103438399

根据选择端点的名称及相应的规则建立任务,后续再调用任务列表的端口会自动记录剖析剖析当前端口数据并生成剖析结果

image-20220724103238954

为了更好演示在库存微服务的创建订单方法中增加一个睡眠3秒,然后重新启动订单微服务

image-20220724104053481

再次多次访问创建订单接口 http://localhost:4070/order/create/1000/1001/2 ,需要连续执行多次请求,因为存在采样设置。如果执行次数少,可能不会出现采样数据,每个服务,相同时间只能添加一个任务,添加的任务不能更改,也不能删除,只能等待过期后自动删除。

日志

在库存和订单微服务中引入依赖


 org.apache.skywalking
 apm-toolkit-logback-1.x
 8.11.0



在库存和订单微服务中,增加分布式链路追踪ID在logback.xml加入如下配置,[%tid]

    <appender name="STDOUT" 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>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%nPattern>
            layout>
        encoder>
    appender>

gRPC reporter上报日志在logback.xml加入如下配置:

    <appender name="grpc-log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%nPattern>
            layout>
        encoder>
    appender>

image-20220725140444858

访问订单接口 http://localhost:4070/order/create/1000/1001/2,查看订单和库存微服务的日志中已带有 TID

image-20220726090542914

也通过GRPC上传到SkyWalking后端,通过Log页面可以查看日志信息

image-20220726090354102

可以通过TID查询对应日志详细信息

image-20220726092614890

告警

在config/alarm-settings.yml ,已经默认若干项告警,我们简单修改告警信息内容,增加一串标识"Itxs Alarm"例如,配置webhooks

rules:
  # Rule unique name, must be ended with `\_rule`.
  service\_instance\_resp\_time\_rule:
    metrics-name: service\_instance\_resp\_time
    op: ">"
    threshold: 1000
    period: 10
    count: 2
    silence-period: 5
    message: Itxs Alarm esponse time of service instance {name} is more than 1000ms in 2 minutes of last 10 minutes
  endpoint\_relation\_resp\_time\_rule:
    metrics-name: endpoint\_relation\_resp\_time
    threshold: 1000
    op: ">"
    period: 10
    count: 2
    message: Itxs Alarm esponse time of endpoint relation {name} is more than 1000ms in 2 minutes of last 10 minutes
webhooks:
  - http://192.168.4.210:8080/alarm/

新建一个webhooks接口服务端,创建AlarmMessage实体类

package com.aotain.entity;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class AlarmMessage implements Serializable {
    private String scopeId;
    private String scope;
    private String name;
    private String id0;
    private String id1;
    private String ruleName;
    //告警的消息
    private String alarmMessage;
    //告警的产生时间
    private Long startTime;
}

创建一个控制器AlarmController,提供/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

[虚幻私塾】

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值