齐活了,Grafana 发布大规模持续性能分析开源数据库 - Phlare

news/2024/4/20 14:51:35/文章来源:https://blog.csdn.net/weixin_38261043/article/details/127671257

Grafana Phlare 是一个用于聚合 continuous profiling(持续分析)数据的开源软件项目。Grafana Phlare 可以和 Grafana 完全集成,允许你与其他可观察信号相关联。

什么是 continuous profiling?

这个概念很有价值:Profiling 可以帮助你了解程序的资源使用情况,进而帮助你优化其性能和成本。然而,向分布式云原生架构的转变使这变得更加复杂,从而产生了对持续分析的需求,其中有关资源使用情况的信息会在整个计算基础设施中定期自动收集,然后压缩并存储为时间序列数据,这使你可以可视化随时间的变化并放大与感兴趣的时间段相匹配的 profile 文件 — 例如,CPU 时间在其最高利用率期间所花费的时间。

就其带来的价值而言,持续分析被称为可观测的第四大支柱(在metricsloggingtracing 之后)。

在 Grafana Labs,我们开始研究使用持续分析来了解我们用于支持 Grafana Cloud 的软件的性能,包括 Grafana Loki、Grafana Mimir、Grafana Tempo 和 Grafana。例如,如果我们对 Mimir 中的慢查询进行分页,我们可能会使用分析来了解该查询在 Mimir 代码库中的哪个位置花费的时间最多。如果我们看到 Grafana 由于内存不足错误而反复崩溃,我们将查看内存配置文件以查看崩溃前哪个对象消耗的内存最多。

虽然有用于存储和查询持续分析数据的开源项目,但经过一些调查,我们努力找到一个满足支持 Grafana Labs 所需级别的持续分析所需的可扩展性、可靠性和性能要求的项目。在全公司范围的黑客马拉松期间,一组工程师领导了该项目,该项目展示了与指标、日志和追踪连接时分析数据的价值,进一步增加了我们在所有环境中推出连续分析的渴望。

因此,我们决定着手创建一个用于持续分析遥测的数据库,基于使我们的其他开源可观察性后端 Loki、Tempo 和 Mimir 如此成功的设计原则:水平可扩展架构和对象存储的使用。

核心功能

Grafana Phlare 提供水平可扩展、高可用性、长期存储和分析数据查询。就像 Prometheus 一样,只需一个二进制文件即可轻松安装,无需其他依赖项。因为 Phlare 使用对象存储,你可以存储你需要的所有历史记录,而不会花很多钱。其原生多租户和隔离功能集可以为多个独立团队或业务部门运行一个数据库。Grafana Phlare 的核心功能如下所示:

  • 易于安装:使用其单体模式,只需一个二进制文件即可启动并运行 Grafana Phlare,无需其他依赖项。在 Kubernetes 上,可以使用 Helm Chart 方式进行不同模式的部署。

  • 水平可扩展性:可以在多台机器上运行 Grafana Phlare,可以轻松扩展数据库以处理工作负载生成的分析量。

  • 高可用性Grafana Phlare 复制传入的 profiles 文件,确保在机器发生故障时不会丢失数据。这意味着你可以在不中断 profiles 文件摄取和分析的情况下进行 rollout。

  • 廉价、耐用的 profile 文件存储Grafana Phlare 使用对象存储进行长期数据存储,使其能够利用这种无处不在、经济高效、高耐用性的技术。它兼容多种对象存储实现,包括 AWS S3、谷歌云存储、Azure Blob 存储、OpenStack Swift,以及任何与 S3 兼容的对象存储。

  • 原生多租户Grafana Phlare 的多租户架构使你能够将数据和查询与独立的团队或业务部门隔离开来,从而使这些组可以共享同一个数据库。

架构

Grafana Phlare 具有基于微服务的架构,该系统具有多个可水平扩展的微服务,可以单独和并行运行。Grafana Phlare 微服务称为组件。Grafana Phlare 的设计将所有组件的代码编译为单个二进制文件。-target 参数控制单个二进制文件将作为哪些组件运行,这点和 Grafana Loki 的模式是一样的。对于想快速体验的用户来说,Grafana Phlare 同样也可以在单体模式下运行,所有组件在一个进程中同时运行。

Grafana Phlare 的大多数组件是无状态的,不需要在进程重新启动之间保留任何数据。一些组件是有状态的,并依靠不容易丢失数据的存储来防止进程重启之间的数据丢失。Grafana Phlare 包括一组相互作用形成集群的组件:DistributorIngesterQuerier

单体模式

单体模式在单个进程中运行所有必需的组件,是默认的操作模式,你可以通过指定 -target=all 参数来设置,单体模式是部署 Grafana Phlare 的最简单方法,如果你想快速入门或想在开发环境中使用 Grafana Phlare,这将非常有用。要查看在 -target 设置为 all 时运行的组件列表,请使用 -modules 标志运行 Grafana Phlare:

./phlare -modules

微服务模式

在微服务模式下,组件部署在不同的进程中。扩展是按组件进行的,这允许在扩展和更细化的故障域方面具有更大的灵活性。微服务模式是生产部署的首选方法,但也是最复杂的。

在微服务模式下,调用每个 Grafana Phlare 进程,并将其 -target 参数设置为特定的 Grafana Phlare 组件(例如,-target=ingester-target=distributor)。要获得一个正常工作的 Grafana Phlare 实例,必须部署每个必需的组件。如果你想使用微服务模式部署 Grafana Phlare,那么非常建议使用 Kubernetes。

部署

我们这里还是以 Helm Chart 的方式部署在 Kubernetes 集群中,当然前提是有一个可用的 Kubernetes 集群,并且配置好了 kubectl 和 helm。

首先我们创建一个名为 phlare-test 的命名空间,将整个应用都部署在该命名空间之内:

☸ ➜ kubectl create namespace phlare-test

然后添加 Phlare 的 Helm Chart 仓库:

☸ ➜ helm repo add grafana https://grafana.github.io/helm-charts
☸ ➜ helm repo update

然后我们就可以使用 Helm 来进行安装了。

如果你想以单体默认进行安装,只需要执行下面的命令即可一键安装:

☸ ➜ helm -n phlare-test install phlare grafana/phlare

如果想以微服务模式安装 Grafana Phlare,可以首先获取官方提供的默认 values 配置文件:

# 收集微服务的默认配置
☸ ➜ curl -LO values-micro-services.yaml https://raw.githubusercontent.com/grafana/phlare/main/operations/phlare/helm/phlare/values-micro-services.yaml
☸ ➜ cat values-micro-services.yaml
# Default values for phlare.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.phlare:components:querier:kind: DeploymentreplicaCount: 3resources:limits:memory: 1Girequests:memory: 256Micpu: 100mdistributor:kind: DeploymentreplicaCount: 2resources:limits:memory: 1Girequests:memory: 256Micpu: 500magent:kind: DeploymentreplicaCount: 1resources:limits:memory: 512Mirequests:memory: 128Micpu: 50mingester:kind: StatefulSetreplicaCount: 3resources:limits:memory: 12Girequests:memory: 6Gicpu: 1minio:enabled: true

我们需要使用上面的 values 文件来安装 Grafana Phlare,也可以根据自己的集群实际情况调整配置,比如 ingester 配置的资源请求的 memory: 6Gi,cpu: 1,我这里集群资源不足,可以将其降低一些,将副本数都暂时设置成1(仅供测试),不然没办法调度成功。

然后使用下面的命令即可开始安装:

☸ ➜ helm -n phlare-test upgrade --install phlare grafana/phlare -f values-micro-services.yaml
Release "phlare" does not exist. Installing it now.
NAME: phlare
LAST DEPLOYED: Thu Nov  3 14:37:38 2022
NAMESPACE: phlare-test
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Thanks for deploying Grafana Phlare.In order to configure Grafana to use the Phlare datasource, you need to add the Phlare datasource to your Grafana instance.The in-cluster query URL is:
http://phlare-querier.phlare-test.svc.cluster.local.:4100To forward the query API to your localhost you can use:
kubectl --namespace phlare-test port-forward svc/phlare-querier 4100:4100

部署完成后查看 Pod 状态是否正常:

☸ ➜ kubectl get pods -n phlare-test
NAME                                  READY   STATUS    RESTARTS   AGE
phlare-agent-56986dd4b9-4s6z6         1/1     Running   0          3m23s
phlare-distributor-7447b4c6c5-f4rjw   1/1     Running   0          3m23s
phlare-ingester-0                     1/1     Running   0          3m23s
phlare-minio-0                        1/1     Running   0          3m23s
phlare-querier-8cdf986c-hhn29         1/1     Running   0          3m23s

等到所有 Pod 的状态变为 Running 或 Completed 表示部署完成了。

使用

然后接下来我们可以配置 Grafana 来查询 profiles 数据,这里我们在安装 Phlare 的同一个 Kubernetes 集群中安装 Grafana,同样使用下面的命令一键安装即可:

☸ ➜ helm template -n phlare-test grafana grafana/grafana \--set image.repository=aocenas/grafana \--set image.tag=profiling-ds-2 \--set env.GF_FEATURE_TOGGLES_ENABLE=flameGraph \--set env.GF_AUTH_ANONYMOUS_ENABLED=true \--set env.GF_AUTH_ANONYMOUS_ORG_ROLE=Admin \--set env.GF_DIAGNOSTICS_PROFILING_ENABLED=true \--set env.GF_DIAGNOSTICS_PROFILING_ADDR=0.0.0.0 \--set env.GF_DIAGNOSTICS_PROFILING_PORT=6060 \--set-string 'podAnnotations.phlare\.grafana\.com/scrape=true' \--set-string 'podAnnotations.phlare\.grafana\.com/port=6060' > grafana.yaml
☸ ➜ kubectl apply -f grafana.yaml

部署完成后整个 phlare-test 命名空间的 Pod 列表如下所示:

☸ ➜ kubectl get pods -n phlare-test                            
NAME                                  READY   STATUS              RESTARTS   AGE
grafana-5ff87bdfd-whmkm               1/1     Running             0          85s
phlare-agent-56986dd4b9-4s6z6         1/1     Running             0          9m17s
phlare-distributor-7447b4c6c5-f4rjw   1/1     Running             0          9m17s
phlare-ingester-0                     1/1     Running             0          9m17s
phlare-minio-0                        1/1     Running             0          9m17s
phlare-querier-8cdf986c-hhn29         1/1     Running             0          9m17s

我们可以使用下面的命令在本地转发 Grafana 服务:

☸ ➜ kubectl port-forward -n phlare-test service/grafana 3000:80

然后在浏览器中打开 http://localhost:3000 即可访问 Grafana 服务了。

在页面左侧点击配置 -> 数据源来添加 profiles 的数据源,选择 phlare 类型的数据源。

设置数据源的 URL 为 http://phlare-querier.phlare-test.svc.cluster.local.:4100/

点击 Save & Test 即可保存。数据源添加完成后应该能够在 Grafana Explore 中查询到 profiles 文件,使用方法和 Loki 以及 Prometheus 几乎一样,如下所示我们可以查询 Grafana 应用的 CPU 的情况。

Phlare 与 Grafana 原生集成,使你可以将 profiles 数据与 metrics、logging 和 tracing 一起可视化,并全面了解整个堆栈。我们还在 Grafana 中添加了一个火焰图面板,它允许你构建仪表板,在 Grafana 中可视化的数百个不同数据源的数据旁边显示分析数据。

Phare 的 Helm Chart 使用默认配置,只要它们有正确的注解,它的代理就会抓取 Pod,该功能使用可能与 Prometheus 或 Grafna Agent 配置相似的 relabel_configkubernetes_sd_config

为了让 Phlare 抓取 pod,你必须在 pod 中添加以下注解:

metadata:annotations:phlare.grafana.com/scrape: "true"phlare.grafana.com/port: "8080"

其中 phlare.grafana.com/port 应该设置为你的 pod 为 /debug/pprof/ 端点提供服务的端口。请注意,phlare.grafana.io/scrapephlare.grafana.io/port 的值必须用双引号括起来,以确保它表示为字符串。

上面我们在安装 Grafana 的时候就配置了这两个注解,所以我们就可以使用 Phlare 来不断的抓取 Grafana 应用的 profiles 数据了,这也是为什么上面我们可以去过滤 Grafana 的 profiles 数据的原因。

参考链接

  • https://github.com/grafana/phlare
  • https://grafana.com/blog/2022/11/02/announcing-grafana-phlare-oss-continuous-profiling-database/

▲ 点击上方卡片关注K8s技术圈,掌握前沿云原生技术

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

正规现货黄金中的MACD技术

MACD是整个现货黄金交易平台上面最受投资者欢迎的技术指标,所以我们这次来谈谈,这个全球使用率最高的技术分析指标。 MACD 的全名为 Moving Average Convergence / Divergence ,它是一种移动平均线的波动指标,不过它使用的不是普通…

mysql数据库中的插入数据insert,中文字符集配置

目录 关键字insert 常见错误类型 指定一列插入数据 多列同时插入 插入效率问题 全列查询select * 查看数据库字符集类型: 更改数据库字符集 C:create 新增D:update 修改R:retrieve 查询D:delete 删除进行增删查…

Redis客户端RedisTemplate入门学习

Redis的Java客户端 Jedis客户端入门 1.引入依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.7.0</version></dependency>2.建立连接并操作 //建立连接BeforeEachvoid setUp()…

TIDB 性能测试(TIUP-TPCC)

New-Order&#xff1a;客户输入一笔新的订货交易&#xff1b; Payment: 更新客户账户余额以反映其支付状况; Delivery: 发货(模拟批处理交易); Order-Status: 查询客户最近交易的状态&#xff1b; Stock-Level: 查询仓库库存状况&#xff0c;以便能够及时补货。…

Android Studio入门之常用布局的讲解以及实战(附源码 超详细必看)(包括线性布局、权重布局、相对布局、网格布局、滚动视图 )

运行有问题或需要源码请点赞关注收藏后评论区留言 线性布局LinearLayout 顾名思义&#xff0c;线性布局像是用一根线把它的内部视图串起来&#xff0c;故而内部视图之间的排列顺序是固定的&#xff0c;要么从左到右&#xff0c;要么从上到下排列。通过属性android:orientation…

学完Python,不做程序员,只接兼职,哎,就是玩儿

现在这个时代&#xff0c;人人开始追求做斜杠青年&#xff0c;多方面开展副业&#xff0c;赚取几份工资。有很多朋友就抓住了Python的风口&#xff0c;靠着Python兼职月入一万。那么学完Python&#xff0c;有哪些可以做的兼职呢&#xff1f; 一、闲暇时间&#xff0c;接自由单…

DEFORMABLE DETR:用于端到端对象检测的可变形Transformer

论文&#xff1a;《DEFORMABLE DETR: DEFORMABLE TRANSFORMERS FOR END-TO-END OBJECT DETECTION》 论文链接&#xff1a;https://arxiv.org/pdf/2010.04159.pdf 代码链接&#xff1a;https://github.com/fundamentalvision/Deformable-DETR 最近在目标检测领域提出了DETR&…

猿创征文|keil和Proteus使用教程

&#x1f4ac;推荐一款模拟面试、刷题神器 、从基础到大厂面试题&#xff1a;&#x1f449;点击跳转刷题网站进行注册学习 目录 一、keil的使用教程 1、新建一个项目 2、选择单片机型号 3、新建工程文件 二、Proteus的使用教程 1、新建一个工程 2、单片机型号及元器件的…

海藻酸钠-四嗪|TZ-PEG-alginate|海藻酸钠-peg-四嗪TZ

海藻酸钠-四嗪|TZ-PEG-alginate|海藻酸钠-peg-四嗪TZ 中文名称&#xff1a;海藻酸钠-聚乙二醇-四嗪 英文名称&#xff1a;TZ-PEG-alginate 纯度&#xff1a;95% 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 外观:固体或粘性液体&#xff0c;取决于分子量 …

【Web-CSS基础】CSS的三大特性、定位方式、静态定位、相对定位、绝对定位、浮动定位、固定定位、设置缩放动画

目录 CSS的三大特性 定位方式 静态定位 相对定位 绝对定位(absolute) 固定定位 浮动定位 粘性定位(sticky) 定位总结 综合练习 效果展示 目录 CSS的三大特性 定位方式 静态定位 相对定位 绝对定位(absolute) 固定定位 浮动定位 粘性定位(sticky) 定位总…

高分辨空间代谢组学测试的样品要求以及常见问题

高分辨空间代谢组学可实现定量检测&#xff0c;亦可定性检测&#xff0c;且可一次可同时检出多种类型的化合物&#xff0c;包括脂类、小分子代谢物、蛋白质、药物及其载体等&#xff0c;并且能够呈现出这些物质的空间分布情况。高分辨空间代谢组学测试的样品要求&#xff1a; …

五高引动三层需求 华为全屋智能3.0引领智能家居新进化

昨天,华为全屋智能3.0发布。从2020年11月发布全屋智能开始,华为不断迭代产品和体验,是全屋智能快速进化的主要推动者之一。这一次华为全屋智能3.0带来“高可靠、高掌控、高感官、高心意、高智能”的五高理念,更清晰定义了全屋智能,或者说空间智能该有的样子,这也将引领产…

GitHub榜一竟是Alibaba内部被疯狂转载的Spring全能指南?

spring相信大家都不会陌生! Spring 是目前主流的 Java Web 开发框架&#xff0c;是 Java 世界上最为成功的框架。该框架是一个轻量级的开源框架&#xff0c;具有很高的凝聚力和吸引力。 Spring 由 Rod Johnson 创立&#xff0c;2004 年发布了 Spring 框架的第一版&#xff0c;其…

自动控制原理 - 2 控制系统的数学模型 节2.7-2.10

2 控制系统的数学模型2.7 结构图的等效变换准则2.8 结构图等效变换的应用2.9 信号流图2.10 梅逊公式 2 控制系统的数学模型 2.7 结构图的等效变换准则 结构图没有直接给出系统输入与输出之间的定量关系。如何得到系统输入输出之间的传递函数&#xff0c;从而便于进一步分析系…

【LeetCode】No.78. Subsets -- Java Version

题目链接&#xff1a; 1. 题目介绍&#xff08;Subsets&#xff09; Given an integer array nums of unique elements, return all possible subsets (the power set). 【Translate】&#xff1a; 给定一个包含多个唯一元素的整数数组&#xff0c;返回所有可能的子集(幂集)。…

内部在看的Tomcat笔记,真不愧是阿里技术官

前言 SpringBoot中的Tomcat容器 SpringBoot可以说是目前最火的Java Web框架了。它将开发者从繁重的xml解救了出来&#xff0c;让开发者在几分钟内就可以创建一个完整的Web服务&#xff0c;极大的提高了开发者的工作效率。Web容器技术是Web项目必不可少的组成部分&#xff0c;…

学弟:手工测试和自动化测试的区别是啥?

一、 手工测试 1、 什么是手工测试&#xff1f; 手工测试是由测试工程师手动测试软件各项功能以发现缺陷的过程。测试人员应该从最终用户的角度出发&#xff0c;并确保所有功能都按照项目的需求文档中的说明工作。在此过程中&#xff0c;测试人员执行测试用例 并手动生成报告…

Word控件Spire.Doc 【文本】教程(11) ;如何将文本分成两列并在它们之间添加行

列被广泛用于设置页面布局&#xff0c;它可以将文本分成两列或多列&#xff0c;以便文本可以在同一页面上从一列流到下一列。使用 Spire.Doc&#xff0c;我们可以实现此功能并同时在列之间添加一条线。本文将介绍如何将文本拆分为两列并在它们之间添加行。 Spire.Doc for.NET …

图解 Redis 分布式锁,写得太好了!

分布式锁的演进 基本原理 我们可以同时去一个地方“占坑”&#xff0c;如果占到&#xff0c;就执行逻辑。否则就必须等待&#xff0c;直到释放锁。“占坑”可以去redis&#xff0c;可以去数据库&#xff0c;可以去任何大家都能访问的地方。等待可以自旋的方式。 阶段一 publi…

上海各梯队IB学校怎么选?

近日&#xff0c;随着各大国际学校开始公布秋招信息&#xff0c;第一轮秋招考试也将在本周末正式到来。 除了春招主力军A-level学校以外&#xff0c;许多IB和AP美高学校的秋招都格外收到关注。上海到底有哪些优质的IB学校&#xff1f;学生的IB成绩和升学情况如何&#xff1f;什…