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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 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官网

目录
打赏
0
0
0
0
2
分享
相关文章
穿戴科技新风尚:智能服装设计与技术全解析
穿戴科技新风尚:智能服装设计与技术全解析
122 85
HarmonyOS Next~鸿蒙AI功能开发:Core Speech Kit与Core Vision Kit的技术解析与实践
本文深入解析鸿蒙操作系统(HarmonyOS)中的Core Speech Kit与Core Vision Kit,探讨其在AI功能开发中的核心能力与实践方法。Core Speech Kit聚焦语音交互,提供语音识别、合成等功能,支持多场景应用;Core Vision Kit专注视觉处理,涵盖人脸检测、OCR等技术。文章还分析了两者的协同应用及生态发展趋势,展望未来AI技术与鸿蒙系统结合带来的智能交互新阶段。
57 31
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
65 29
RTSP协议规范与SmartMediaKit播放器技术解析
RTSP协议是实时流媒体传输的重要规范,大牛直播SDK的rtsp播放器基于此构建,具备跨平台支持、超低延迟(100-300ms)、多实例播放、高效资源利用、音视频同步等优势。它广泛应用于安防监控、远程教学等领域,提供实时录像、快照等功能,优化网络传输与解码效率,并通过事件回调机制保障稳定性。作为高性能解决方案,它推动了实时流媒体技术的发展。
可穿戴设备如何重塑医疗健康:技术解析与应用实战
可穿戴设备如何重塑医疗健康:技术解析与应用实战
36 4
AI技术如何重塑客服系统?解析合力亿捷AI智能客服系统实践案例
本文探讨了人工智能技术在客服系统中的应用,涵盖技术架构、关键技术和优化策略。通过感知层、认知层、决策层和执行层的协同工作,结合自然语言处理、知识库构建和多模态交互技术,合力亿捷客服系统实现了智能化服务。文章还提出了用户体验优化、服务质量提升和系统性能改进的方法,并展望了未来发展方向,强调其在客户服务领域的核心价值与潜力。
55 6
静态IP代理与动态IP代理:提升速度与保障隐私的技术解析
本文探讨了静态IP代理和动态IP代理的特性和应用场景。静态IP代理通过高质量服务提供商、网络设置优化、定期更换IP与负载均衡及性能监控提升网络访问速度;动态IP代理则通过隐藏真实IP、增强安全性、绕过封锁和提供独立IP保障用户隐私。结合实际案例与代码示例,展示了两者在不同场景下的优势,帮助用户根据需求选择合适的代理服务以实现高效、安全的网络访问。
42 1
分片上传技术全解析:原理、优势与应用(含简单实现源码)
分片上传通过将大文件分割成多个小的片段或块,然后并行或顺序地上传这些片段,从而提高上传效率和可靠性,特别适用于大文件的上传场景,尤其是在网络环境不佳时,分片上传能有效提高上传体验。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
基于Python的情感分析与情绪识别技术深度解析
本文探讨了基于Python的情感分析与情绪识别技术,涵盖基础概念、实现方法及工业应用。文中区分了情感分析与情绪识别的核心差异,阐述了从词典法到深度学习的技术演进,并通过具体代码展示了Transformers架构在细粒度情感分析中的应用,以及多模态情绪识别框架的设计。此外,还介绍了电商评论分析系统的构建与优化策略,包括领域自适应训练和集成学习等方法。未来,随着深度学习和多模态数据的发展,该技术将更加智能与精准。
47 0
深度干货 | 如何兼顾性能与可靠性?一文解析YashanDB主备高可用技术
数据库高可用(High Availability,HA)是指在系统遇到故障或异常情况时,能够自动快速地恢复并保持服务可用性的能力。如果数据库只有一个实例,该实例所在的服务器一旦发生故障,那就很难在短时间内恢复服务。长时间的服务中断会造成很大的损失,因此数据库高可用一般通过多实例副本冗余实现,如果一个实例发生故障,则可以将业务转移到另一个实例,快速恢复服务。

推荐镜像

更多