首页 文章 精选 留言 我的

精选列表

搜索[请求],共10000篇文章
优秀的个人博客,低调大师

监控系统如何做埋点,监控数据库和HTTP请求

【大咖・来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》 JDBC做过java开发的都知道JDBC是干什么的,RestApi其实就是http的调用,http的调用就是调用第三方的服务的时候,第三方的服务并不是在自己的系统范围内,如果出现不稳定挂掉,对自身来说是不可控了,所以第三方服务而言对我们而言是非常的明感的。JDBC和RestApi的监控对系统来讲意义很大,数据库得多重要,在系统的内部进行监控更能良好的反应sql的执行性能。 (一)JDBC调用拦截 JDBC插桩目的 哪些监控怼开发运维来说最有用的。 SQL语句、SQL参数、用了多长时间、SQL类型、结果集大小、返回字段、规范、Join次数 拦截监听SQL语句 找出慢查询语句 模型结构 字段类型描述sqltextsql语句paramsjson参数resultSizeint结果大小urlvarchar数据库连接路径userNamevarchar数据库用户名errortext异常堆栈useTimeint用时 JDBC插桩位置 这些user,框架,连接池,驱动都依赖jdbc,jdbc是一个什么东西?jdbc是一种规范,一堆接口组成的规范j2se,由驱动来实现的。servlet也是一种接口规范,是j2ee的规范,由tomcat,jetty等容器实现的。任任何一层都可以做为插桩的切入点,但是选用User 层、框架层、连接池&数据源层、驱动层其实现是多样的,无法做到普适性。所以在此选用JDBC 作为插桩切入 点。 JDBC插桩机制 从上图可以分析出JDBC执行过程 1.从驱动获取连接(Connection) 2.基于连接构建预处理对象(prepareStatement) 3.执行SQL 4.读取结果集(ResultSet) 5.关闭释放连接。 其中涉及对象构建逻辑如下: Driver==》Connection==》prepareStatement==》ResultSet (二)Http调用拦截 Http埋点目的 很多时候我们会调用第三方API。比如:消息推送、短信发送、第三方支付接口等,因为服务是第三方提供,如果服务出现性能或可用性问题对于我方而言不可控,所以这类接口的稳定性是我们需要重点关注的对象。 通常这类接口会基于Http协议实现,所对Htpp协议监控,即实现了对第三方接口的监控。 Http埋点位置 1.user层:无法判断User具体执行方法,基于配置又做不到普适性。 2.Http协议层:能找到具体方法,也能做到普适性。需要对Http协议进行全面解析,而且Http协议为文本协议,解析难度更大,实现成本居高。 3.专有SDK、与自定义封装的Http工具包,跟具体业务偶合同样无法做到普适应。 4.java net URL 与 HttpClient 都是Http client 基于二者实现可以在一定程度上达成我们的目标。 Http埋点机制(java.net.URL) URL常用写法: URLurl=newURL("https://www.baidu.com"); URLConnectionconn=url.openConnection(); conn.setDoInput(true); conn.setDoOutput(true); conn.connect(); OutputStreamoutput=conn.getOutputStream(); output.write("a=c&b=1".getBytes()); InputStreaminput=conn.getInputStream(); byte[]bytes=IOUtils.readFully(input,-1,false); System.out.println(newString(bytes)); URL 装载执行过程: URL 基于protocol 构建对应 UrlStreamHandler UrlStreamHandler.openConnection() 打开连接,返回URlConnection URlConnection 设置连接属性 URlConnection 打开 outPutStream 写入参数 URlConnection 打开 inPutStream读取结果 其中涉及对象构建逻辑如下: URL==》URLStreamHandler==》URLConnection==》outPutStream、InputStream。 如果上述过程加一层静态代理即可监控这些对象所有的执行过程从而得到所需监控数据: URL==》Proxy(URLStreamHandler)==》Proxy(URLConnection)==》Proxy(outPutStream)、Proxy(InputStream)。 URL的类结构 怎么样才能加上这层代理呢?其关键方法在于 通过静态代理的方式。 java.net.URL#setURLStreamHandlerFactory。该方法允许用户自定义URL协议实现.

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册