基于eBPF技术的开源项目Kindling之HTTP协议解析

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: Kindling是一款基于eBPF技术的云原生可观测性开源项目。本文将主要介绍如何通过Kindling对HTTP协议进行解析。

在故障排查过程中,我们通常对请求性能、请求内容和返回内容感兴趣。这使我们能知道请求和接收了什么内容,是否有异常等基本信息。如何获取请求的具体详细信息,传统方式是通过tcpdump获取请求包数据,然后通过wireshark查看其具体协议内容。

tcpdump虽然在生产环境中经常使用,但由于获取的数据量和大小限制,不适合一直开启,只有在排查问题时使用。而获取的数据也无法直接查看,需下载到本地通过wireshark分析查看。基于tcp的诸多问题,所以Kindling通过eBPF方式实现请求的具体分析。

那么Kindling是如何实现实时可用的协议解析功能呢?主要涉及3块功能:

  • 数据采集
  • 请求/响应关联
  • 请求/响应解析

协议解析流程图.png

协议解析流程图


1 数据采集

先来查看下一个简单的HTTP服务

HTTP服务伪代码.png

HTTP服务伪代码


当接收到请求时会有accept/read/write/close等函数执行,这些函数最终执行内核的系统调用。

HTTP服务接收请求流程图.png

HTTP服务接收请求流程图


使用strace命令查看一次请求的系统调用情况

  • read接收HTTP请求/test
  • 第一个write日志输出
  • 第二个write 返回HTTP结果

68427606-C89D-492B-AE4A-1EC4EAA6EDD9.png

从日志中可分析出,请求通过read系统调用,日志和响应都是通过write系统调用。

Kindling已实现对系统事件调用进行抓取,并将相关的read和write系统调用转换为Kindling事件,最终生成3条事件。事件格式定义可参见kindling_event.proto

系统调用与Kindling事件映射.png

系统调用与Kindling事件映射


参数说明:

  • fd 读写请求的文件描述符
  • size 请求报文大小
  • res 返回大小
  • data 请求报文内容
  • latency 读/写操作耗时
  • category 事件类型,NET是指网络事件,FILE是文件读写事件


2 请求/响应关联

常规的TCP请求都会用同一个FD进行通信,只需根据进程号和FD就能关联同一个请求和响应。

请求-响应关联.png

请求-响应关联


3 请求/响应解析

虽然有了报文,但不同的协议定义的规范也不同。那么如何知道该报文是什么协议,并且用该协议进行解析呢?主要涉及2块内容:

  • 协议识别
  • 协议解析

请求-响应解析流程图.png

请求-响应解析流程图


3.1 协议识别

通过特征或关键字快速匹配协议,减少协议解析的次数,提升整体解析的性能。

HTTP报文规范.png

HTTP报文规范


对于HTTP请求来说,通过HTTP版本号(HTTP/1.0或HTTP/1.1)可以快速识别协议。

但由于抓包大小限制,如果一个请求的URL长度超过包的大小,那么无法获取后续的HTTP版本号,于是采用端口协议配置方式也能识别协议。


3.2协议解析

协议解析是为了产生指标用于后续分析,在解析过程中需根据协议自身的格式进行解析。

由于报文内容是byte数组格式,Kindling提供了封装好的API用于解析。

C1919449-34B2-4696-8D90-ABD3CFF328A6.png

以HTTP协议为例,可解析出如下信息:

  • 请求行 - 方法、URL信息
  • HTTP头信息 - traceId信息
  • 状态行 - 状态码信息

HTTP解析样例.png

HTTP解析样例


3.2.1 解析HTTP请求

解析请求过程就是对请求进行逐帧解析,读取到对应的属性后最终将值存储到attribute中

Xnip2022-04-26_15-39-49.jpg


3.2.2 解析HTTP响应

解析响应跟解析请求类似,也是逐帧解析,将解析出的属性存储到attribute中。

此外,需考虑报文非法场景(状态码非数值),确保解析正常结束。

Xnip2022-04-26_15-40-36.jpg


KINDLING项目地址:KINDLING

欢迎对云可观测性感兴趣的小伙伴与我们联系:Kindling官网

目录
相关文章
|
15天前
|
缓存 网络协议 前端开发
Web 性能优化|了解 HTTP 协议后才能理解的预加载
本文旨在探讨和分享多种预加载技术及其在提升网站性能、优化用户体验方面的应用。
Web 性能优化|了解 HTTP 协议后才能理解的预加载
|
21天前
|
XML JSON 前端开发
HTTP协议,Content-Type格式介绍篇
通过理解和正确使用Content-Type头字段,可以确保数据在网络上传输时的正确性和高效性,提升网络应用的可靠性和用户体验
92 28
|
19天前
|
XML JSON 前端开发
HTTP协议,Content-Type格式介绍篇
通过理解和正确使用Content-Type头字段,可以确保数据在网络上传输时的正确性和高效性,提升网络应用的可靠性和用户体验。
141 25
|
2月前
|
人工智能 搜索推荐 API
Cobalt:开源的流媒体下载工具,支持解析和下载全平台的视频、音频和图片,支持多种视频质量和格式,自动提取视频字幕
cobalt 是一款开源的流媒体下载工具,支持全平台视频、音频和图片下载,提供纯净、简洁无广告的体验
273 9
Cobalt:开源的流媒体下载工具,支持解析和下载全平台的视频、音频和图片,支持多种视频质量和格式,自动提取视频字幕
|
2月前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
135 9
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
10天前
|
安全 网络协议 网络安全
解析HTTP代理服务器不稳定致使掉线的关键原因
随着数字化发展,网络安全和隐私保护成为核心需求。HTTP代理服务器掉线原因主要包括:1. 网络问题,如本地网络不稳定、路由复杂;2. 服务器质量差、IP资源不稳定;3. 用户配置错误、超时或请求频率异常;4. IP失效或协议不兼容。这些问题会影响连接稳定性。
39 7
|
22天前
|
XML JSON 前端开发
HTTP协议,Content-Type格式介绍篇
通过理解和正确使用Content-Type头字段,可以确保数据在网络上传输时的正确性和高效性,提升网络应用的可靠性和用户体验。
194 18
|
2月前
|
域名解析 缓存 网络协议
Web基础与HTTP协议
通过掌握这些基础知识和技术,开发者可以更加高效地构建和优化Web应用,提供更好的用户体验和系统性能。
79 15
|
2月前
|
前端开发 网络协议 安全
【网络原理】——HTTP协议、fiddler抓包
HTTP超文本传输,HTML,fiddler抓包,URL,urlencode,HTTP首行方法,GET方法,POST方法
|
2月前
|
网络协议 安全 网络安全
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
125 3

推荐镜像

更多