云原生可观测性平台deepflow部署

news2024/11/15 11:07:16

deepflow是什么

DeepFlow 是云杉网络 (opens new window)开源的一款高度自动化的可观测性平台,是为云原生应用开发者建设可观测性能力而量身打造的全栈、全链路、高性能数据引擎。DeepFlow 使用 eBPF、WASM、OpenTelemetry 等新技术,创新的实现了 AutoTracing、AutoMetrics、AutoTagging、SmartEncoding 等核心机制,帮助开发者提升埋点插码的自动化水平,降低可观测性平台的运维复杂度。利用 DeepFlow 的可编程能力和开放接口,开发者可以快速将其融入到自己的可观测性技术栈中。

解决两大痛点

建设可观测性已经成为云原生应用开发者的必要工作,然而现有的解决方案正悄无声息的消耗着开发者越来越多的时间。Epsagon 的一项调查 (opens new window)表明,应用开发者有高达30%的时间花在可观测性能力建设上,另有 20% 的时间花在代码 Debug 上,而 Debug 花费的大部分时间又恰好是可观测性建设不足导致。

可观测性建设的痛点包括两个方面:

埋点插码难

开发者需要考虑为每一种语言、每一种框架进行埋点和插码。一些公司的业务开发团队很幸运,会有类似 IDP(Internal Developer Platform)的团队负责整个公司的可观测性能力建设,提供埋点和插码的 SDK。但大部分语言缺乏类似 JVM 的字节码注入机制,IDP 团队每一次的 SDK 升级都需要业务开发团队同步发版、上线。
开发者需要考虑在微服务之间如何传递追踪上下文。同样需要为每一种语言、每一种框架进行埋点和插码,另一方面像 MQTT 3.X、MySQL、Redis 等缺乏 Header Option 字段的协议经常成为追踪的噩梦。即使应用协议都使用 HTTP,也可能由于调用链中特殊的 RPC 框架、特殊的编程语言导致追踪上下文丢失。
开发者需要为每一个指标、追踪、日志数据注入大量的属性标签,以便于后续能够对观测数据进行灵活的过滤、分组及关联。然而这些标签已经存在于 K8s apiserver、服务注册中心、应用协议 Header 中,开发者不得不重复这份工作将他们搬迁到观测数据中。

平台运维难

开发者需要考虑如何避免指标数据中携带高基标签,有些时候甚至因为后端 TSDB(Time Series Database)性能的不足无奈将高基 Tag 字段转换为 Metrics,甚至丢弃。
开发者需要考虑限制观测数据的猖獗增长,在复杂的采样策略之间权衡选择以降低数据量,但通常会在某次问题排查时发现数据不全而无法进行。
开发者需要考虑如何维护复杂的可观测平台,他们通常有着负载均衡、消息队列依赖。随着复杂度的增长,可观测性平台本身的可观测性能力同样也成为问题。

六大主要特性

全栈:DeepFlow 使用 AF_PACKET、BPF、eBPF 技术实现的 AutoMetrics 机制,可以自动采集任何应用的 RED(Request、Error、Delay)性能指标,精细至每一次应用调用,覆盖从应用到基础设施的所有软件技术栈。在云原生环境中,DeepFlow 的 AutoTagging 机制自动发现服务、实例、API的属性信息,自动为每个观测数据注入丰富的标签,从而消除数据孤岛,并释放数据的下钻能力。
全链路:DeepFlow 使用 eBPF 技术创新的实现了 AutoTracing 机制,在云原生环境中自动追踪任意微服务、基础设施服务的分布式调用链。在此基础上,通过与 OpenTelemetry 的数据集成,DeepFlow 将 eBPF Event 与 OTel Span 自动关联,实现完整的全栈、全链路追踪,让追踪无盲点。
高性能:DeepFlow 创新的 SmartEncoding 标签注入机制,能够将标签数据的存储性能提升 10 倍,从此告别高基标签和数据采样焦虑。DeepFlow 使用 Rust 实现 Agent,拥有极致处理性能的同时保证内存安全。DeepFlow 使用 Golang 实现 Server,重写了 Golang 的 map、pool 基础库,数据查询和内存申请均有近 10 倍的性能提升。
可编程:DeepFlow 目前支持了对 HTTP、HTTPS、Dubbo、gRPC、ProtobufRPC、SOFARPC、MySQL、PostgreSQL、Redis、Kafka、MQTT、DNS协议的解析,并将保持迭代增加更多的应用协议支持。除此之外,DeepFlow 计划基于 WASM技术提供了可编程接口,让开发者可以快速具备对私有协议的解析能力,并可用于构建特定场景的业务分析能力,例如 5GC 信令分析、金融交易分析、车机通信分析等。
开放接口:DeepFlow 拥抱开源社区,支持接收广泛的可观测数据源,并利用 AutoTagging 和 SmartEncoding 提供高性能、统一的标签注入能力。DeepFlow 支持插件式的数据库接口,开发者可自由增加和替换最合适的数据库。DeepFlow 向上为所有观测数据提供统一的标准 SQL 查询能力,便于使用者快速集成到自己的可观测性平台中,也提供了在此基础上继续开发方言 QL 的可能性。
易于维护:DeepFlow 仅由 Agent、Server 两个组件构成,将复杂度隐藏在进程内部,将维护难度降低至极致。DeepFlow Server 集群可对多资源池、异构资源池、跨 Region/AZ 资源池中的 Agent 进行统一管理,且无需依赖任何外部组件即可实现水平扩展与负载均衡。

#helm repo add deepflow https://deepflowio.github.io/deepflow
#helm repo update
#helm pull deepflow/deepflow  
下载的当前版本为:deepflow-6.2.601.tgz
解压下载的tar包,修改里面的文件,server-deployment.yaml与app-deployment.yaml
#tar -zxf deepflow-6.2.601.tg
#cd ./deepflow/templates
(我使用helm-v3.2.4 直接安装会报错)所以把两文件的以下内容删除
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }
checksum/customConfig: {{ sha256sum (print (tpl (toYaml .Values.configmap) $)) }
指定storageClass部署
#helm install deepflow --namespace=deepflow --set global.storageClass=default-nfs ./

如图:
在这里插入图片描述
等待POD正常
在这里插入图片描述

配置deepflow-agent污点容忍:


 kubectl edit daemonsets.apps deepflow-agent -n deepflow
 添加:   
      tolerations:
      - effect: NoSchedule
        operator: Exists

登陆grafana,密码为deepflow
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
至此,部署完成
测试demo:

deepflow.io/docs/zh/auto-tracing/spring-boot-demo/

云主机部署deepflow-agent

运行权限及内核要求
deepflow-agent 的 eBPF 能力对内核版本的要求:

X86 体系架构:Linux Kernel 4.14+
例外:使用 uprobe 采集 openssl 库的 TLS 应用数据要求 Linux Kernel 4.17+
在内核 Linux 4.14 下一个 tracepoint 不能被多个 eBPF program attach(即:不能同时运行两个或多个 agent),Linux 4.15+ 不存在此问题
ARM64 体系架构:CentOS8 Linux Kernel 4.18,或社区 Linux Kernel 5.8+
当内核版本无法满足要求时,受影响的功能有:

通过 eBPF uprobe 获取 HTTP2、HTTPS 应用数据
通过 eBPF 实现 AutoTracing

DeepFlow Server 必须运行在 K8s 之上
#curl -O https://deepflow-ce.oss-cn-beijing.aliyuncs.com/rpm/agent/stable/linux/$(arch | sed 's|x86_64|amd64|' | sed 's|aarch64|arm64|')/deepflow-agent-rpm.zip
#unzip deepflow-agent-rpm.zip 
#yum -y localinstall ./x86_64/deepflow-agent-*.rpm
 修改/etc/deepflow-agent.yaml 添加k8s node IP
 controller-ips:
   - ip
#systemctl restart deepflow-agent
之前agent 会跟NODE IP 的30035端口通信

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/439873.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

界面控件DevExpress WinForm的垂直网格组件,让数据展示更灵活!(一)

DevExpress WinForm Vertical Grid(垂直网格)组件设计用于提供UI灵活性,它允许显示数据集中的单个行,或在其90度反向网格容器中显示多个数据集行。此外,开发者还可以将其用作属性网格,就像在Visual Studio …

逻辑回归与梯度下降法

逻辑回归:是用来进行分类的。 逻辑回归的线性预测输出可以写成:y^wTxb 引入Sigmoid函数,让输出限定在[0,1]之间,y^Sigmoid(wTxb)σ(wTxb) 单个样本损失函数:L(y^,y)−(ylog y^(1−y)log (1−y^)) 对逻辑回归进行梯度…

【pytorch系列】优化器optimizer的使用与常用优化器

1 optimizer类实例 1.1 介绍 属性 【default】该实例的类型为 dict,元素为初始化时候的学习率等,具体的keys为 [lr,momentum, dampening, weight_decay, nesterov]【state】保存参数更新过程中的一些中间变量,如momentum的缓存&#xff08…

网络安全-kali配置ssh服务+敏感文件泄+dirsearch脚本

网络安全-kali配置ssh服务敏感文件泄dirsearch脚本 seccure shell 就是加密的telnet 远程用的 service ssh start 开启ssh服务metstat -tpan |gerp 22 监听这个端口是否开启 可以看到本地的22端口这个文件是/etc/ssh/sshd_config 输入 set number 找到第57行 把这个前面的#注…

Smartbi电子表格软件产品的由来

思迈特软件(以下简称“Smartbi”)自2022年11月以来发布的「Smartbi Spreadsheet 电子表格软件」产品(以下简称“电子表格软件”或"Spreadsheet")。 这个软件就是报表工具,那为什么不叫 Report,而…

java 自习室找座系统 mysql

自习室座位管理系统采用B/S结构、结合网络数据库开发技术来设计本系统。开发语言采用JSP,数据库使用Mysql数据库。完成以下基本功能: 功能: 1界面(管理员登录、学生登录) 2管理员更新自习室剩余座位情况 3学生查询自习…

误差与精度

整理自《误差理论与数据处理》——合肥工业大学 机械专业用于教授学生误差与精度概念的课程叫做《公差与测量》,而公差的本质含义就是误差,所以这门课其本质教授的还是误差理论。当时在学校并没有好好学习这么课程,工作之后才发现这个课程的重…

云原生时代,不可不知的基础设施即代码(IaC)

💡 IaC 是 DevOps 的必要支撑。 近日,在极狐TechTalk 直播上,极狐(GitLab) 高级网站可靠性工程师SRE 戚加欣,从 SRE 视角出发,与大家分享了 IaC 基础知识、工具和方法和基于极狐GitLab 的具体实践经验。 以下内容整理自…

路由反射器、联邦

路由反射器 RFC4456 IBGP水平分割:路由器无法将从IBGP对等体学习到的路由信息传递给其他IBGP对等体。 IBGP水平分割解决了AS内部环路的问题,但是产生了新的问题----BGP路由在AS内部只能传递一跳,会造成lBGP路由无法被正常传递,造成通讯障碍。…

使用计算机视觉实战项目精通 OpenCV:6~8

原文:Mastering OpenCV with Practical Computer Vision Projects 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 计算机视觉 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 当别人说你没有底线…

Vue3PDF预览(vue3-pdf-app)

vue3-pdf-app 插件 可自定义设置以下属性: pdf地址(src),类型:string,必传,默认 预览容器宽度(width),类型:number | string,默认 …

数字化转型框架如何搭建?

根据GetSmarter对来自128个国家/地区的5808名专业人士进行关于数字化转型的调查,揭示了几个重要的发现。 首先是所有行业和工作角色对数字化转型的看法不同。它不仅仅专注于集成和利用新技术,例如机器学习(ML)、人工智能(AI)、大数据和自动化。它是关于…

云原生之在kubernetes集群下部署Mysql应用

云原生之在kubernetes集群下部署mysql应用 一、Mysql介绍二、kubernetes集群介绍1.k8s简介2.k8s架构图 三、本次实践介绍1.本次实践简介2.本次环境规划 三、检查本地k8s集群环境1.检查k8s各节点状态2.检查k8s版本3.检查k8s系统pod状态 四、编辑mysql.yaml文件五、创建mysql应用…

STM32G070 onchip移植FlashDB

一、Onchip Flash 特性 在STM32G070 的片内 Flash写入数据之前必须先对目标地址进行擦除后才能写入数据数据写入:G070 Flash 写入数据必须保证8字节对齐,一次写入双字数据64bit 8Byte数据读取:使用地址直接读取 二、移植FAL 1. 添加以下文…

全面详解Java多线程基础-2:线程的状态

相关阅读: 全面详解Java多线程基础-1:Thread类及其基本用法 操作系统里的进程,自身是有一个状态的。而Java的Thread类是对系统线程的封装,它把这里的“状态”又进一步精细化了。 理解线程状态,意义是能够让我们更好地…

当ChatGPT遇上StableDiffusion ChatGPT指导StableDiffusion绘画

ChatGPT指导StableDiffusion 前言开始使用场景1:繁华的街道场景2:桥上的女生 项目及教程地址,附GPT访问地址安装教程及安装包地址:点我下载开源项目:点我下载GPT访问地址,点我访问 前言 Stable Diffusion …

java下

双列集合的特点 双列集合一次需要存一对数据,分别为键和值键不能重复,值可以重复键和值是一一对应的,每一个键只能找到自己对应的值键+值这个整体我们称之为“键值对”或者“键值对对象”,在Java中叫做“Entry对象” …

git及vs2019代码量统计的方法

git 在工程下打开git bash //替换username,查看个人代码量 git log --author"username" --prettytformat: --numstat | awk { add $1; subs $2; loc $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", ad…

基于matlab之NR SSB 光束扫描仿真

一、前言 此示例说明如何在 5G NR 系统的发射器 (gNB) 和接收器 (UE) 端使用波束扫描。本示例使用同步信号块 (SSB) 说明了初始访问期间使用的一些波束管理程序。为了完成声束扫描,该示例使用了…

人工智能全球发展趋势、经济影响和未来挑战

人工智能(AI)作为一种新兴技术,正在引领世界经济和社会的变革。在过去几年中,全球范围内对人工智能的投资和研究持续增长,这使得人工智能成为了各行各业的关注焦点。本文将介绍人工智能的基础知识和应用场景&#xff0…