简介

观测云采集器,是一款开源、一体式的数据采集 Agent,它提供全平台操作系统支持,拥有全面数据采集能力,涵盖基础设施、指标、日志、应用性能、用户访问以及安全巡检等各种场景。通过 eBPF 技术的引入,观测云采集器实践了网络传输层和应用层的部分协议的可观测。

采集器架构

  • 采集管理:配置加载模块用于配置动态管理与采集插件的开启关闭;监视器模块用于查看采集器资源使用、采集插件开启、数据处理器脚本工作状况、采集器外部数据接入API 的响应与延迟信息等

  • 数据采集:采集器不仅可以通过内置插件进行数据采集,还能接入外部数据源,如云原生计算基金会下的可观测项目 OTEL 的链路、指标数据等

  • 数据清洗:在采集插件生成数据后和数据上传之间的数据清洗层,用户可以通过编程介入,如使用可编程数据处理器的语言编写脚本修改 Point ,使用内置函数分析提取网络数据中 IP 归属的城市、省份和国家到 Point 中;脚本支持动态加载和卸载

  • 数据上传:采集器对各种数据进行分类上传,类别有日志、指标、链路、网络等,所有类别的数据均使用 Point 结构封装,每一个 Point 代表一条数据,大致由四个部分:名字、 标签字典、字段字典以及时间戳构成 (其名字可以是指标名 cpu, 日志来源 nginx ,网络的 httpflow等)

  • eBPF 技术应用

    观测云采集器使用了三种类型的 eBPF 程序:socket filter、kprobe、uprobe,能够抓取以太网帧、跟踪与 socket 和 TCP/IP 协议栈相关的内核函数以及用户共享库函数,实现网络协议可观测。下图介绍观测云采集器如何实践 eBPF 技术进行主机上的网络观测。

     

    数据采集

    观测云采集器的 eBPF 网络观测功能采集并生成了三个数据集,分别为 netflow, dnsflow 和 httpflow,其 tag 基本相同,以下是其 tag 名与描述。

    Tag  描述
    src_ip 源 IP
    dst_ip 目标 IP
    src_port 源端口
    dst_port 目标端口
    transport tcp 或 udp
    family IPv4 或 IPv6
    direction 传输方向(incoming/outgoing)
    srciptype 源 IP 类型 (other/private/multicast)
    dstiptype 目标 IP 类型 (other/private/multicast)
    host 主机名
    source 数据源(netflow,httpflow,dnsflow)
    pid 进程 id,仅 netflow
    dst_domain 仅 netflow,来自 dnsflow 抓包记录
    srck8snamespace 源 service 归属的 namespace
    srck8sdeployment_name 源 serivce 归属的 deployment
    srck8sservice_name 源 service
    srck8spod_name 源 pod
    dstk8snamespace 目标 service 归属的 namespace
    dstk8sdeployment_name 目标 serivce 归属的 deployment
    dstk8sservice_name 目标 service
    dstk8spod_name 目标 pod
    sub_source 子来源,默认 N/A,如若为 Kubernetes 流量则为 K8s

    传输层网络观测

    • 采集器使用 kprobe 类型 eBPF 程序获取部分内核函数的输入与返回值

    • 通过 inetbind(6) 函数判断 srcip + src_port 是否为服务端

    • 通过协议栈 tcp\udp 以及 ip 相关的内核函数,获取服务与客户端之间的流量大小以及 TCP 协议的连接的建立与关闭次数、重传和 RTT 信息

      Field  描述
      bytes_read 接收字节数
      bytes_written 发送字节数
      retransmits 重传次数
      rtt rtt
      rtt_var rtt_var
      tcp_closed TCP 连接关闭次数
      tcp_established TCP 连接建立次数

      应用层网络观测

      • 采集器使用 AF_PACKET + BPF 在采集器上分析 DNS 请求,以支持 CentOS(RedHat)7.6 (其不支持 socket filter 类型 eBPF 程序),记录请求信息支持 netflow 进行域名反向解析;

      • 对于 HTTP 请求使用 socket filter 和 uprobe 类型 eBPF 程序实现 HTTP(S) 请求分析。

      下面的为采集 dns 协议生成的字段 和 http 协议生成字段。

      Field 名(dns) 描述
      count 一个采集周期内的请求总数
      latency DNS 平均请求响应时间间隔
      latency_max DNS 最大请求的响应时间间隔
      rcode DNS 响应码: 0 - NoError, 1 - FormErr, 2 - ServFail, 3 - NXDomain, 4 - NotImp, 5 - Refused, ...
      Field 名(http) 描述
      count 一个采集周期内的请求总数
      http_version 1.1 / 1.0 ...
      latency TTFB
      method GET/POST...
      path 请求路径
      status_code 状态码,如 200, 301, 404 ...
      truncated 请求路径长度达到采集的(约 150)字节上限,存在截断可能

      用户地理分布及 TCP 时延

      通过内置数据处理器编写脚本,来解析 ip 并获取 ip 归属的省份、国家等信息作为标签追加到生成的 Point 上,并在观测云前端创建仪表板。下图通过世界地图和中国地图展示 netflow 中客户端 ip 的地理分布和服务端之间的 tcp 时延。

      主机间四层网络拓扑

      下图为当前工作空间内部署了观测云采集器并开启了 eBPF 网络采集器的主机间的网络拓扑图,图上我们可以看到主机间的数据发送与接受的字节数和网络波动等信息。

      K8s Pod 间网络拓扑

      当 eBPF 采集插件获取到 K8S 的 ip 和端口信息后将自动追加到生成的数据上,通过观测云前端构建不同的网络拓扑图,下图是构建的 Pod 网络拓扑关系图。

      K8s Deployment 间网络拓扑

      下图是构建的 Deployment 网络拓扑关系图,从图中可以看到 nginx deployment 上的 HTTP 协议的每秒请求数和请求错误率。

eBPF 实践 -- 网络可观测的更多相关文章

  1. C项目实践--网络协议和套接字编程

    1.TCP/IP协议 TCP/IP协议是一组包括TCP协议和IP协议,UDP(User Datagram Protocol)协议,ICMP(Internet Control Message Proto ...

  2. 聊聊风口上的 eBPF

    eBPF 是一个用于访问 Linux 内核服务和硬件的新技术,由于其灵活性和高性能等特点,被迅速用于网络.出错.跟踪以及防火墙等多场景.目前国内已有少数企业开始尝试将 eBPF 引入生产实践,又拍云也 ...

  3. 2017-2018-2 20155315《网络对抗技术》Exp9 :Web安全基础

    实验目的 理解常用网络攻击技术的基本原理. 教程1 教程2 教程3 实验内容 SQL注入攻击 XSS攻击 CSRF攻击 Webgoat前期准备 从GitHub上下载jar包 拷贝到本地,并使用命令ja ...

  4. 2018-2019-2 网络对抗技术 20165230 Exp9 :Web安全基础

    目录 实验目的 实验内容 Webgoat前期准备 出现的问题 (一)SQL注入攻击 命令注入:Command Injection 数字型注入:Numeric SQL Injection 日志欺骗:Lo ...

  5. eBPF会成为服务网格的未来吗?

    服务网格现状 服务网格为服务提供了复杂的应用层网络管理,如服务发现.流量路由.弹性(超时/重试/断路).认证/授权.可观察性(日志/度量/追踪)等. 在分布式应用的早期,这些要求是通过直接将所需的逻辑 ...

  6. Rainbond结合NeuVector实践容器安全管理

    前言 Rainbond 是一个云原生应用管理平台,使用简单,不需要懂容器.Kubernetes和底层复杂技术,支持管理多个Kubernetes集群,和管理企业应用全生命周期.但是随着云原生时代的一点点 ...

  7. 关于docker

    摘要: 最近很多阿里内部的同学和客户私信来咨询如何学习 Docker 技术.为此,我们列了一个路线图供大家学习Docker和阿里云容器服务.这个列表包含了一些社区的优秀资料和我们的原创文章.我们会随着 ...

  8. 说说SACC2016第八届架构师大会

    每年这方面的会议很多,不知不觉已经连续举办八年了.一届比一届办的有质量,规模越大.今年也如约而至.2016-10-27在北京万达索菲特酒店.4000多人规模,云集各领域顶尖架构师,运维,云计算,技术专 ...

  9. WEB前端学习资源清单

    常用学习资源 JS参考与基础学习系列 [MDN]JS标准参考 es6教程 JS标准参考教程 编程类中文书籍索引 深入理解JS系列 前端开发仓库 <JavaScript 闯关记> JavaS ...

  10. OVS

    基于 OpenvSwitch的OpenFlow实践 Open vSwitch 概述 OpenvSwitch(简称OVS)是由NiciraNetworks主导的,运行在虚拟化平台(例如 KVM,Xen) ...

随机推荐

  1. Linux常用基础命令一

    一.目录操作 进入路径 cd [目录地址] 切换回主目录 cd 返回上一个路径 cd - 打印当前路径 pwd 列出目录下文件 ls ---查看只包含非隐藏文件 ls -a -----查看目录下所有文 ...

  2. Java 监控直播流rtsp协议转rtmp、hls、httpflv协议返回浏览器

    Java 监控直播流rtsp协议转rtmp.hls.httpflv协议返回浏览器 目录 需求背景: 一:了解音视频流协议: 二:方案一 rtsp 转rtmp 1.下载nginx + nginx-rtm ...

  3. 解决element-ui中组件【el-upload】一次性上传多张图片的问题

    element-ui 中的组件 el-upload默认的行为是一张图片请求一次,在项目需求中,通常是多张图片要求只向后台请求一次,下面的做法就是为了实现这样的需求 前端 <el-upload r ...

  4. 使用Kali的wifite和aircrack-ng联合破解wifi密码

    准备材料 有kali的虚拟机,这里推荐VM 一个超级便宜的USB无线网卡,很便宜三十几块钱 一个靠谱的WPA密码字典(关于字典文件,我这里整理了好多,可联系我.QQ:1213456261) 1.运行k ...

  5. 论文解读(RvNN)《Rumor Detection on Twitter with Tree-structured Recursive Neural Networks》

    论文信息 论文标题:Rumor Detection on Twitter with Tree-structured Recursive Neural Networks论文作者:Jing Ma, Wei ...

  6. 分布式安装部署MinIO

    官方文档地址:http://docs.minio.org.cn/docs/master/distributed-minio-quickstart-guide 前提条件:分布式Minio至少需要4个硬盘 ...

  7. Readsh中文版初始设置

    B站视频教程网址:https://space.bilibili.com/630285695/video 安装成功后,打开浏览器输入http://ip:5000如果出现如下画面,即告安装成功. 初始设置 ...

  8. while循环控制

    基本语法 例(输出五句hello): int i = 1; //循环变量初始化 while(i<=5){ //循环条件 printf("\n hello!"); //循环语句 ...

  9. jmeter录制登录脚本

    1.添加代理服务器 在非测试元件添加http代理服务器,端口写8888,域写127.0.0.1 在排除模式里填入.*.(js|css|PNG|jpg|ico|png|gif|woff|ttf).* 2 ...

  10. 使用 Kubeadm 部署 K8S安装

    1. 安装要求 在开始之前,部署Kubernetes集群机器需要满足以下几个条件: 一台或多台机器,操作系统 CentOS7.x-86_x64 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬 ...