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

作者 : webmaster 发布时间: 2019-10-22 文章热度:342 共404个字,阅读需2分钟。 本文内容有更新 字体:

目 录


【大咖・来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》

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

JDBC做过java开发的都知道JDBC是干什么的,RestApi其实就是http的调用,http的调用就是调用第三方的服务的时候,第三方的服务并不是在自己的系统范围内,如果出现不稳定挂掉,对自身来说是不可控了,所以第三方服务而言对我们而言是非常的明感的。JDBC和RestApi的监控对系统来讲意义很大,数据库得多重要,在系统的内部进行监控更能良好的反应sql的执行性能。

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

(一)JDBC调用拦截

  • JDBC插桩目的

哪些监控怼开发运维来说最有用的。

  1. SQL语句、SQL参数、用了多长时间、SQL类型、结果集大小、返回字段、规范、Join次数
  2. 拦截监听SQL语句
  3. 找出慢查询语句
  • 模型结构

字段类型描述sqltextsql语句paramsjson参数resultSizeint结果大小urlvarchar数据库连接路径userNamevarchar数据库用户名errortext异常堆栈useTimeint用时

  • JDBC插桩位置

这些user,框架,连接池,驱动都依赖jdbc,jdbc是一个什么东西?jdbc是一种规范,一堆接口组成的规范j2se,由驱动来实现的。servlet也是一种接口规范,是j2ee的规范,由tomcat,jetty等容器实现的。任任何一层都可以做为插桩的切入点,但是选用User 层、框架层、连接池&数据源层、驱动层其实现是多样的,无法做到普适性。所以在此选用JDBC 作为插桩切入 点。

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

  • JDBC插桩机制

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

从上图可以分析出JDBC执行过程

1.从驱动获取连接(Connection)

2.基于连接构建预处理对象(prepareStatement)

3.执行SQL

4.读取结果集(ResultSet)

5.关闭释放连接。

其中涉及对象构建逻辑如下:

Driver==》Connection==》prepareStatement==》ResultSet

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

(二)Http调用拦截

  • Http埋点目的

很多时候我们会调用第三方API。比如:消息推送、短信发送、第三方支付接口等,因为服务是第三方提供,如果服务出现性能或可用性问题对于我方而言不可控,所以这类接口的稳定性是我们需要重点关注的对象。

通常这类接口会基于Http协议实现,所对Htpp协议监控,即实现了对第三方接口的监控。

  • Http埋点位置

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

1.user层:无法判断User具体执行方法,基于配置又做不到普适性。

2.Http协议层:能找到具体方法,也能做到普适性。需要对Http协议进行全面解析,而且Http协议为文本协议,解析难度更大,实现成本居高。

3.专有SDK、与自定义封装的Http工具包,跟具体业务偶合同样无法做到普适应。

4.java net URL 与 HttpClient 都是Http client 基于二者实现可以在一定程度上达成我们的目标。

  • Http埋点机制(java.net.URL)

URL常用写法:

  1. URL url = new URL("https://www.baidu.com"); 
  2. URLConnection conn = url.openConnection(); 
  3. conn.setDoInput(true); 
  4. conn.setDoOutput(true); 
  5. conn.connect(); 
  6. OutputStream output = conn.getOutputStream(); 
  7. output.write("a=c&b=1".getBytes()); 
  8. InputStream input = conn.getInputStream(); 
  9. byte[] bytes = IOUtils.readFully(input, -1, false); 
  10. System.out.println(new String(bytes)); 

URL 装载执行过程:

  1. URL 基于protocol 构建对应 UrlStreamHandler
  2. UrlStreamHandler.openConnection() 打开连接,返回URlConnection
  3. URlConnection 设置连接属性
  4. URlConnection 打开 outPutStream 写入参数
  5. URlConnection 打开 inPutStream读取结果

其中涉及对象构建逻辑如下:

URL==》URLStreamHandler==》URLConnection==》outPutStream、InputStream。

如果上述过程加一层静态代理即可监控这些对象所有的执行过程从而得到所需监控数据:

URL==》Proxy(URLStreamHandler)==》Proxy(URLConnection)==》Proxy(outPutStream)、Proxy(InputStream)。

  • URL的类结构

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

怎么样才能加上这层代理呢?其关键方法在于 通过静态代理的方式。 java.net.URL#setURLStreamHandlerFactory。该方法允许用户自定义URL协议实现.

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

常见问题FAQ

免费下载或者VIP会员专享资源能否直接商用?
本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"www.yoozai.net",如遇到无法解压的请联系管理员!
悠哉网 » 监控系统如何做埋点,监控数据库和HTTP请求

发表评论

465+

本站勉强运行

333+

用户总数

3355+

资源总数

24+

今日更新

2020-6-4

最后更新时间