文档

无侵入观测概述

更新时间:

随着微服务、云原生、DevOps等技术的发展,应用的开发、部署、迭代效率有了巨大提升。同时,开发者对可观测的要求越来越高,例如需要针对多种语言、多种中间件、动态运行的Kubernetes环境定制观测手段。日志服务与阿里云龙蜥社区合作研发了无侵入监控功能,以开放、高性能、无侵入的内核观测技术为广大云上开发者提供更便捷的可观测方式。

采集原理

Logtail无侵入监控的采集程序工作空间包括Kernel Space与User Space。

  • Kernel Space用于抓取和预处理数据。

    • 抓取:Kernel Hook模块会根据KProbe的定义,拦截网络数据。用于拦截的KProbe内核函数包括connect、accept、write等。

    • 预处理:预处理模块会根据用户态配置进行数据的拦截、丢弃以及数据协议的推断,只有符合需求的数据才会被传递给SendToUserSpace模块,其他数据将被丢弃。SendToUserSpace模块会通过eBPF Map将符合需求的数据由内核态传输到用户态。

  • User Space用于分析、聚合和管理数据。

    • 分析:Process模块会不断处理eBPF Map中存储的网络数据。首先由于Kernel Space的预处理模块已推断协议类型,所以Process模块将根据此类型进行细粒度的协议分析,例如分析MySQL协议的SQL、分析HTTP协议的状态码等。其次由于Kernel Space传递的元数据信息只有Pid、FD等进程粒度的元信息,而针对Kubernetes可观测场景,Pod、Container等资源定义更有意义,所以Correlate Meta模块会为Process模块处理后的数据绑定容器相关的元数据信息。

    • 聚合:绑定容器相关的元数据信息后,Aggreate模块会对数据进行聚合操作以避免传输重复的数据。例如聚合周期内调用某SQL语句1000次,Aggreate模块会将最终数据抽象为XSQL:1000的形式进行上传。

    • 管理:整个eBPF程序交互着大量的进程与连接数据,因此eBPF程序中对象的生命周期需要与机器实际状态相符。当进程或连接被释放,相应的对象也需要被释放,这就是Connection Management模块与Garbage Collection模块的职责。

无侵入监控

在真实的程序运行环境中,虚拟机或Kubernetes节点存在诸多干扰因素,例如不需要关心的进程、本地的网络调用等,因此Logtail无侵入监控采集功能扩展了多种采集选择能力,支持从用户态控制内核态的采集范围。

特性类型

说明

协议处理

支持开启协议解析。

支持选择协议解析范围。

连接过滤

支持过滤Unix Socket数据。

支持过滤本机交互的进程数据。

主机进程过滤

支持通过cmdline正则匹配指定需要监控的进程。

支持通过cmdline正则匹配排除不需要监控的进程。

K8s进程过滤

支持通过Pod名称正则匹配指定需要监控的Pod容器进程。

支持通过Pod名称正则匹配排除不需要监控的Pod容器进程。

支持通过Namespace名称正则匹配指定需要监控的容器进程。

支持通过Namespace名称正则匹配排除不需要监控的容器进程。

支持通过Label标签正则匹配指定需要监控的容器进程。

支持通过Label标签正则匹配排除不需要监控的容器进程。

支持通过环境变量正则匹配指定需要监控的容器进程。

支持通过环境变量正则匹配排除不需要监控的容器进程。

分析能力

目前无侵入监控已集成于全栈监控中的Kubernetes监控。此处以基于Kubernetes场景,介绍无侵入监控的分析能力。

分析四层网络流量

在云原生场景下,多语言、多协议的服务导致服务的拓扑关系绘制困难,您无法发现集群的热点流量服务,而通过无侵入监控功能则可顺利实现。例如下图展示了frontend服务的上下游服务,不管服务是直接交互、DNS请求还是外部IP调用,该拓扑图都良好地展示了真实的服务网络流量拓扑,并且您可以针对四层网络进行流量包或流量大小的分析,获取基础层的热点服务与瓶颈信息。

目前无侵入监控功能已支持您在四层网络流量中分析HTTP、Redis、MySQL、DNS、PgSQL等多种应用层传输协议。

无侵入监控无侵入监控

分析七层网络流量

四层网络流量往往不足以定位问题,此时您可以通过分析七层网络流量,辅助问题排查。

例如:某个Spring Cloud Restful项目的客户端通常使用HTTP发送数据,服务端使用线程池、阻塞队列模式响应客户端请求,而埋点的位置会导致客户端与服务端的计算消耗时间不一致。当流量过多或前序请求大量阻塞时,后续的请求会发生阻塞,此时传统分析手段下的Time1与Time2可能存在巨大差值,且如果埋点位置仅存在于Service B ,则消耗时间可能始终处于正常状态,整个系统的瓶颈问题将被忽略。

此时您可以使用无侵入监控功能,无论是客户端还是服务端,数据来源都是基于真实的内核层处理网络请求的时间,例如Revc、Write、Sendmsg等内核函数,帮助您了解服务的真实运行状态。

无侵入监控

全栈监控应用会自动分析所采集到的无侵入监控数据,并通过统计图表形式展示。例如您开启HTTP协议分析后,全程无需埋点,即可通过统计图表了解客户端与服务端真实的运行状态,如下图所示。

无侵入监控

同时无侵入监控也支持监控多种中间件(MySQL、Redis、PgSQL等)。例如基于MySQL客户端调用,分析MySQL调用性能情况,如下图所示。

无侵入监控

接入数据

您可以在接入数据时,开启无侵入监控功能。目前,无侵入监控功能支持接入Kubernetes数据面监控数据。具体操作,请参见接入Kubernetes数据面监控数据

  • 本页导读 (1)
文档反馈