当前位置: 首页 > news >正文

基于Skywalking开发分布式监控(一)

接手为微服务系统搞链路监控项目一年多,也和skywalking打了一年多的交道,也应该有个总结,主要谈一下搭建监控系统遇到的难点和解决方案。
说明: 本文的代码均由本地演示代码替代,非实际代码

为啥选skywalking,因为由于微服务分成多个团队在开发,有平台,有应用,日志分析已经力不从心,下决心引入分布式监控,skywalking对我们来说有两个基本好处,1) 代码入侵非常低(最后仅仅在多线程跟踪,加了几处装饰器),监控基本可以独立安排版本或者变更,这对管理友好 2) Agent+插件模式对应用性能影响不大,预估不太会出幺蛾子…

开发过程中,我们遇到一些问题,本篇先聚焦第一个问题:
Agent插件二次开发,分两类
1) 修改,例如对dubbo-plugin,把DubboInstrumentation.java中

public class DubboInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {// add loggerprivate static final ILog LOGGER = LogManager.getLogger(DubboInstrumentation.class);private static final String ENHANCE_CLASS = "com.alibaba.dubbo.monitor.support.MonitorFilter";  //需修改private static final String INTERCEPT_CLASS = "org.apache.skywalking.apm.plugin.dubbo.DubboInterceptor";@Overrideprotected ClassMatch enhanceClass() {return NameMatch.byName(ENHANCE_CLASS);}@Overridepublic ConstructorInterceptPoint[] getConstructorsInterceptPoints() {return null;}@Overridepublic InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() {return new InstanceMethodsInterceptPoint[] {new InstanceMethodsInterceptPoint() {@Overridepublic ElementMatcher<MethodDescription> getMethodsMatcher() {//LOGGER.info("Dubbo Class is {}", ENHANCE_CLASS);return named("invoke");}@Overridepublic String getMethodsInterceptor() {return INTERCEPT_CLASS;}@Overridepublic boolean isOverrideArgs() {return false;}}};}
}

新增一个DubboProviderInstrumentation,根据本地应用改成 ENHANCE_CLASS = “com.comstar.cnp.common.infrastructure.DubboProviderFilter”;
以及 DubboComsumerInstrumentation,根据本地应用改成 ENHANCE_CLASS = “com.comstar.cnp.common.infrastructure.DubboConSumerFilter”;

并修改skyworking-plugin.def文件
dubbo=org.apache.skywalking.apm.plugin.dubbo.DubboInstrumentation
dubbo=org.apache.skywalking.apm.plugin.dubbo.DubboProviderInstrumentation
dubbo=org.apache.skywalking.apm.plugin.dubbo.DubboComsumerInstrumentation

保证dubbo跟踪链正常

2 ) 另外如基于netty的非标应用,就需要开发自定义Agent
按SkyWalking Agent的开发规范,需要开发Instrumentation,定义拦截点的位置(类和方法),并开发拦截器Interceptor,在beforeMethod创建 Span 并把需要的参数,塞到上下文Tag(标签)中,

ublic class seckillwithPoolAndMQInterceptor implements InstanceMethodsAroundInterceptor {@Overridepublic void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class<?>[] classes, MethodInterceptResult methodInterceptResult) throws Throwable {String methodName = method.getName();System.out.println("before..."+methodName);String operationName ="seckillwithPoolAndMQ";ContextCarrier contextCarrier = new ContextCarrier();CarrierItem carrierItem = contextCarrier.items();Object pid= allArguments[0];Object uid= allArguments[1];//carrierItem.setHeadValue(ctxName.name());//创建一个EntrySpan//AbstractSpan span= ContextManager.createEntrySpan(operationName, contextCarrier);AbstractSpan span= ContextManager.createLocalSpan(operationName);span.setComponent(ComponentsDefine.TOMCAT);span.tag(new StringTag(10, "method"), methodName);span.tag(new StringTag(20, "pid"), pid.toString());span.tag(new StringTag(30, "uid"), uid.toString());span.setLayer(SpanLayer.CACHE);//缓存上下文objInst.setSkyWalkingDynamicField(ContextManager.capture());}

最后修改skyworking-plugin.def文件,保证插件正常运行
testdemo2-0.1=org.apache.skywalking.apm.plugin.demo2.define1.Demo2Instrumentation

解决插件的问题后,我们进一步发现Skywalking原生提供100多种插件,监控数据项多达数万项,但是这些数据,并不是全部都需要重点关注,冗余的监控数据,一方面会影响正常监控,另一方面,我们也发现过多的监控数据甚至会影响 OAP的性能,最夸张的问题可能是云服务和大量监控导致 SW sgementId产生重复,者迫使我们要采取适当的措施,后续,我们将聚焦对SkyWalking 监控数据分类筛选和展示

相关文章:

基于Skywalking开发分布式监控(一)

接手为微服务系统搞链路监控项目一年多&#xff0c;也和skywalking打了一年多的交道&#xff0c;也应该有个总结&#xff0c;主要谈一下搭建监控系统遇到的难点和解决方案。 说明&#xff1a; 本文的代码均由本地演示代码替代&#xff0c;非实际代码 为啥选skywalking&#xf…...

高防服务器什么意思

高防服务器什么意思&#xff0c;为什么要用高防服务器&#xff0c;小编为您整理发布高防服务器什么意思的解读。 高防服务器是指具备较高防御能力的服务器&#xff0c;能够抵御DDoS/CC等网络攻击。 高防服务器通常用于保护游戏、APP、金融、电商等业务&#xff0c;这些领域因为…...

C/C++ - Auto Reference

目录 auto Reference auto 当使用auto​​关键字声明变量时&#xff0c;C编译器会根据变量的初始化表达式推断出变量的类型。 自动类型推断&#xff1a;auto​​关键字用于自动推断变量的类型&#xff0c;使得变量的类型可以根据初始化表达式进行推导。 初始化表达式&#x…...

springboot项目快速引入knife4j

引入依赖 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.3</version> </dependency>knife4j配置文件 basePackage改为自己存放接口的包名 /*** Kn…...

SpringBlade微服务开发平台

采用前后端分离的模式&#xff0c;前端开源两个框架&#xff1a;Sword (基于 React、Ant Design)、Saber (基于 Vue、Element-UI)后端采用SpringCloud全家桶&#xff0c;并同时对其基础组件做了高度的封装&#xff0c;单独开源出一个框架&#xff1a;BladeToolBladeTool已推送至…...

【运维】Ubuntu18.04系统docker方式安装ElasticSearch和kibana

前言 最近需要搭建一套测试环境&#xff0c;用到了ElasticSearch( 简称es)搜索引擎&#xff0c;安装过程有些曲折&#xff0c;记录下来作为经验。 正文 环境 Ubuntu18.04 操作系统Docker Server Version: 20.10.7ElasticSearch Version: 8.5.3Kibana Version: 8.5.3 说明 E…...

五种单例模式

在整个程序中&#xff0c;保持只有一个实例对象&#xff0c;就是单例模式。 单例模式可以减少构建&#xff0c;GC的次数&#xff0c;提升性能&#xff0c;还能减少堆内存的开销。 1. 懒汉式 在需要使用对象的时候&#xff0c;才进行创建 通过private构造方法&#xff0c;确保…...

【ceph】ceph关于清洗数据scrub的参数分析

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…...

自然语言NLP学习

2-7 门控循环单元&#xff08;GRU&#xff09;_哔哩哔哩_bilibili GRU LSTM 双向RNN CNN 卷积神经网络 输入层 转化为向量表示 dropout ppl 标量 在物理学和数学中&#xff0c;标量&#xff08;Scalar&#xff09;是一个只有大小、没有方向的量。它只用一个数值就可以完全…...

js实现填涂画板

文章目录 1实现效果2 实现代码 凑个数&#xff0c;存粹是好玩儿&#xff0c;哈哈... 1实现效果 最上方一栏&#xff1a; 左侧是颜色按钮&#xff0c;点击选中颜色&#xff0c; 中间是功能按钮&#xff0c;重置颜色、清空画板、回退、涂改液&#xff08;填涂色置为白色&#xff…...

springboot农机电招平台源码和论文

随着农机电招行业的不断发展&#xff0c;农机电招在现实生活中的使用和普及&#xff0c;农机电招行业成为近年内出现的一个新行业&#xff0c;并且能够成为大群众广为认可和接受的行为和选择。设计农机电招平台的目的就是借助计算机让复杂的销售操作变简单&#xff0c;变高效。…...

TensorFlow 深度学习 开发环境搭建 全教程

PyTorch 深度学习 开发环境搭建 全教程 TensorFlow 深度学习 开发环境搭建 全教程 1、指定清华源命令 -i https://pypi.tuna.tsinghua.edu.cn/simple2、conda安装 这是AI开发环境的全家桶&#xff0c;官网下载链接Anaconda | Start Coding Immediately 尽量不要选择太新版本…...

Qt —— QCharts之曲线示波器(附源码)

示例效果 介绍 Qt5.7 版本后 Qt Charts 的发布。Qt Charts可以创建时尚的、交互式的、以数据为中心的用户界面。Qt Charts使用Qt Charts来简化集成。图表组件可以用作或对象或QML类型。 该类管理不同类型的系列和其他图表相关对象(如图例和轴)的图形表示形式。是一个可以在 .…...

【秒剪】如何更换视频画幅比例以及画面背景?

Step1&#xff1a;点击上方显示的画幅比例 Step2&#xff1a;在下方选择合适的视频画幅或更换画面背景 Step3&#xff1a;点击上方【填充方式】 Step4&#xff1a;选择合适的填充方式即可 Step5&#xff1a;点击这里即可自定义视频背景...

HarmonyOS鸿蒙学习笔记(23)监听Wifi状态变化

监听Wifi状态变化 前言创建接收状态变化的Bean对象创建订阅者和订阅事件参考资料&#xff1a; 前言 本篇博文通过动态订阅公共事件来说明怎么使用HarmonyOS监听Wifi状态的变化。关于动态订阅公共事件的概念&#xff0c;官网有详细说明&#xff0c;再次就不在赘述。博文相关项目…...

mac 安装配置oh-my-zsh

1. 安装brew /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 按照步骤安装即可 安装完成查看版本 brew -v 2. 安装zsh brew install zsh 查看版本 zsh --version 3. 安装oh-my-zsh github官网链…...

[pytorch入门] 2. tensorboard

tensorboard简介 TensorBoard 是一组用于数据可视化的工具。它包含在流行的开源机器学习库 Tensorflow 中.但是也可以独立安装&#xff0c;服务Pytorch等其他的框架 可以常常用来观察训练过程中每一阶段如何输出的 安装pip install tensorboard启动tensorboard --logdir<d…...

基于卡尔曼滤波的平面轨迹优化

文章目录 概要卡尔曼滤波代码主函数代码CMakeLists.txt概要 在进行目标跟踪时,算法实时测量得到的目标平面位置,是具有误差的,连续观测,所形成的轨迹如下图所示,需要对其进行噪声滤除。这篇博客将使用卡尔曼滤波,对轨迹进行优化。 优化的结果为黄色线。 卡尔曼滤波代码…...

GBASE南大通用分享如何更新嵌套的集合

如果您想要更新集合的集合&#xff0c;则必须声明游标来访问外层的集合&#xff0c;然后声明嵌套的游标来 访问内层的集合。 例如&#xff0c;假设 manager 表有一附加的列 scores&#xff0c;它包含一其元素类型为整数的 MULTISET 的 LIST&#xff0c;如下图所示。 更新集合…...

Maya------插入循环边

11.maya 常用建模命令1.插入循环边 多切割_哔哩哔哩_bilibili 与边相对距离 逐渐变化...

大模型Agent面试通关秘籍!小白程序员必备,附收藏版学习资源

大模型Agent面试通关秘籍&#xff01;小白程序员必备&#xff0c;附收藏版学习资源 本文分享了作者在阿里巴巴大模型Agent应用算法岗面试中的真实经验&#xff0c;涵盖了从一面到三面的高频技术问题及答题思路&#xff0c;包括大模型Agent核心模块解析、微调与提示工程关系、Ag…...

DelphiOpenAI:原生集成OpenAI API,赋能Delphi开发者构建智能应用

1. 项目概述&#xff1a;DelphiOpenAI&#xff0c;一个为Delphi开发者打造的AI桥梁如果你是一名Delphi开发者&#xff0c;看着Python、JavaScript社区热火朝天地集成各种AI能力&#xff0c;自己却苦于没有成熟、好用的原生库&#xff0c;只能望“AI”兴叹&#xff0c;那么今天介…...

华为会议转任务AI精准识别整理,省事更清晰,轻松搞定工作落地

"找2026华为会议转任务AI的朋友&#xff0c;你要的精准识别整理、落地工作的真实测评来了。不管你是做学术研究要整访谈、转讲座&#xff0c;还是开会长音频要扒任务&#xff0c;我测了大半个月&#xff0c;直接给你掏实底。我接触太多做学术的朋友&#xff0c;都踩过AI转…...

C语言指针:从零掌握指针(5) 完结篇

文章目录C语言指针&#xff1a;从零掌握指针&#xff08;5&#xff09; 完结前言一、回调函数1.1 什么是回调函数&#xff1f;1.2 使用回调函数二、qsort函数2.1 qsort基础2.2 排序整形数据2.3 排序浮点型数据2.4 排序结构数据三&#xff0c;qsort函数模拟实现C语言指针&#x…...

白嫖新网免费云主机,挂QQ机器人亲测可用

申请门槛低&#xff1a;只要手机号&#xff0c;不需要人脸识别&#xff0c;不想太麻烦就选择阿贝云 配置够用&#xff1a;1核1G 20G SSD&#xff0c;挂QQ机器人完全够 国内速度快&#xff1a;独立公网IP&#xff0c;延迟低&#xff0c;不掉线申请花了不到5分钟&#xff0c;装完…...

数字永生:将意识上传云端的技术与伦理极限

——一个软件测试从业者的技术解构与风险分析各位同行&#xff0c;当你看到“数字永生”这四个字时&#xff0c;脑海里浮现的是什么&#xff1f;是马斯克口中2045年即将实现的意识上传&#xff0c;还是《黑镜》里那些被困在虚拟牢笼中的数字灵魂&#xff1f;作为一个每天与需求…...

技术生态依赖的实质与破局:从Android到自主可控的实践路径

1. 项目背景与核心议题解析最近在整理行业资料时&#xff0c;翻到一篇2013年的旧文&#xff0c;讨论的是当时中国工信部对国内移动产业过度依赖Android系统的担忧。虽然时过境迁&#xff0c;但文中提到的“技术自主可控”与“全球生态融入”之间的张力&#xff0c;在今天看来依…...

为AI智能体构建可编程邮箱:mailbot实战指南

1. 项目概述&#xff1a;为AI智能体打造专属的“可编程邮箱”如果你正在开发一个AI智能体&#xff0c;无论是客服机器人、自动化工作流还是个人助理&#xff0c;让它具备收发邮件的能力往往是刚需。传统的做法是什么&#xff1f;要么去折腾Gmail的API&#xff0c;忍受OAuth授权…...

WP Pinch:通过MCP协议为WordPress站点集成AI助手管理能力

1. 项目概述&#xff1a;当你的WordPress站点“长出”AI的爪子 如果你和我一样&#xff0c;每天大部分时间都泡在Slack、Telegram或者WhatsApp里&#xff0c;和团队沟通、处理信息&#xff0c;那么你肯定也烦透了那种“这个内容不错&#xff0c;等我回到电脑前再发到网站上”的…...

终极百度网盘加速解决方案:BaiduPCS-Web完整使用指南

终极百度网盘加速解决方案&#xff1a;BaiduPCS-Web完整使用指南 【免费下载链接】baidupcs-web 项目地址: https://gitcode.com/gh_mirrors/ba/baidupcs-web 还在为百度网盘那令人抓狂的下载速度而烦恼吗&#xff1f;当下载进度条像蜗牛一样缓慢移动时&#xff0c;你是…...