GrafanaPhlare是一个用于聚合持续分析(continuousanalysis)数据的开源软件项目。GrafanaPhlare可以与Grafana完全集成,使您能够与其他可观察到的信号相关联。什么是持续剖析?这个概念很有价值:分析可以帮助您了解程序的资源使用情况,这反过来又可以帮助您优化其性能和成本。然而,向分布式云原生架构的转变使这变得更加复杂,产生了对连续分析的需求,其中有关资源使用情况的信息会在整个计算基础设施中定期自动收集,然后压缩并存储为时间序列数据,这允许您可以可视化随时间的变化并放大与感兴趣的时间段相匹配的配置文件——例如,CPU时间在其使用高峰期所花费的时间。就其带来的价值而言,持续分析被称为可观察性的第四大支柱(仅次于指标、日志记录和跟踪)。在GrafanaLabs,我们开始研究持续分析的使用,以了解我们用来为GrafanaCloud提供动力的软件的性能,包括GrafanaLoki、GrafanaMimir、GrafanaTempo和Grafana。例如,如果我们在Mimir中对慢速查询进行分页,我们可能会使用分析来了解该查询在Mimir代码库中的哪个位置花费的时间最多。如果我们看到Grafana由于内存不足错误而反复崩溃,我们将查看内存配置文件以了解崩溃前哪个对象消耗的内存最多。虽然有用于存储和查询连续分析数据的开源项目,但经过一些调查后,我们很难找到一个满足支持GrafanaLabs所需的连续分析水平所需的可扩展性、可靠性和性能要求的项目。在一次全公司范围内的黑客马拉松中,一个工程师团队领导了该项目,该项目展示了在与指标、日志和跟踪相关联时分析数据的价值,进一步增强了我们在所有环境中推出持续分析的愿望。因此,我们决定着手创建一个用于连续分析遥测的数据库,该数据库基于使我们的其他开源可观察性后端Loki、Tempo和Mimir如此成功的相同设计原则:水平可扩展架构和对象存储的使用。核心功能GrafanaPhlare提供横向扩展、高可用、长期存储和分析数据查询。就像Prometheus一样,只需一个二进制文件即可轻松安装,无需其他依赖项。因为Phlare使用对象存储,所以您可以存储您需要的所有历史记录,而无需耗尽资金。其原生的多租户和隔离功能集可以为多个独立团队或业务部门运行单个数据库。GrafanaPhlare的核心特性如下:易于安装:使用其整体模式,只需要一个二进制文件即可启动和运行GrafanaPhlare,无需其他依赖项。在Kubernetes上,您可以使用HelmChart以不同的模式进行部署。水平可扩展性:GrafanaPhlare可以在多台机器上运行,并且可以轻松扩展数据库以处理工作负载生成的分析量。高可用性:GrafanaPhlare复制传入的配置文件,以确保在机器发生故障时不会丢失数据。这意味着您可以在不中断配置文件摄取和分析的情况下推出。廉价、持久的配置文件存储:GrafanaPhlare使用对象存储进行长期数据存储,使其能够利用这种无处不在、经济高效、高持久性的技术。它与多种对象存储实现兼容,包括AWSS3、谷歌云存储、AzureBlob存储、OpenStackSwift和任何S3兼容的对象存储。原生多租户:GrafanaPhlare的多租户架构使您能够将数据和查询隔离到独立的团队或业务部门,让这些团队共享同一个数据库。架构GrafanaPhlare具有基于微服务的架构,具有多个可水平扩展的微服务,这些微服务可以单独和并行运行。GrafanaPhlare微服务被称为组件。GrafanaPhlare的设计将所有组件的代码编译成一个二进制文件。-target参数控制单个二进制文件将作为哪些组件运行,其方式与GrafanaLoki相同。对于想要快速体验的用户,GrafanaPhlare也可以单机运行,所有组件在一个进程中同时运行。GrafanaPhlare的大多数组件都是无状态的,不需要在进程重启时保留任何数据。一些组件是有状态的并且依赖于数据不敏感存储来防止进程重启之间的数据丢失。GrafanaPhlare包括一组交互形成集群的组件:Distributor、Ingester、Querier。单模式单模式在单个进程中运行所有必需的组件。这是默认的操作模式。您可以通过指定-target=all参数来设置它。单一模式是部署GrafanaPhlare最简单的方式。如果你想这对于快速入门或者如果你想在开发环境中使用GrafanaPhlare很有用。要查看在-target设置为all时运行的组件列表,请使用-modules标志运行GrafanaPhlare:./phlare-modules微服务模式在微服务模式下,组件部署在单独的进程中。缩放是按组件完成的,这允许在缩放和更细粒度的故障域方面具有更大的灵活性。微服务模式是生产部署的首选方法,但也是最复杂的。在微服务模式下,每个GrafanaPhlare进程都被调用,其-target参数设置为特定的GrafanaPhlare组件(例如,-target=ingester或-target=distributor)。要拥有一个工作的GrafanaPhlare实例,必须部署每个必需的组件。如果你想使用微服务模式部署GrafanaPhlare,那么强烈推荐Kubernetes。部署这里我们还是以HelmChart的形式部署在Kubernetes集群中。当然前提是有可用的Kubernetes集群,并且配置了kubectl和helm。首先,我们创建一个名为phlare-test的命名空间,将整个应用程序部署在这个命名空间中:??kubectlcreatenamespacephlare-test然后添加Phlare的HelmChart仓库:??helmrepoaddgrafanahttps://grafana.github.io/helm-charts??helmrepoupdate然后我们就可以使用Helm来安装了。如果你想默认安装GrafanaPhlare,只需要执行以下命令即可一键安装:??helm-nphlare-testinstallphlaregrafana/phlare如果你想以微服务方式安装GrafanaPhlare,你可以先获取官方提供的Defaultvalues配置文件:#收集微服务的默认配置??curl-LOvalues-micro-services.yamlhttps://raw.githubusercontent.com/grafana/phlare/main/operations/phlare/helm/phlare/values-micro-services.yaml??catvalues-micro-services.yaml#phlare的默认值。#这是一个YAML格式的文件。#声明要传递到模板中的变量。phlare:组件:查询器:种类:部署副本数:3资源:限制:内存:1Gi请求:内存:256Micpu:100m分配器:种类:部署副本数:2资源:限制:内存:1Gi请求:内存:256Micpu:500magent:kind:DeploymentreplicaCount:1Gi:limits:memory:512Mirequests:memory:128M我知道了pu:50mingester:kind:StatefulSetreplicaCount:3resources:limits:memory:12Girequests:memory:6Gicpu:1minio:enabled:true我们需要使用上面的values文件来安装GrafanaPhlare,或者根据实际自己集群的情况调整配置,比如内存:6Gi,cpu:1为ingester配置的资源请求。我这里集群资源不足,可以调低一点,暂时将副本数设置为1(仅供测试),否则调度不成功然后使用以下命令开始安装:??helm-nphlare-testupgrade--installphlaregrafana/phlare-fvalues-micro-services.yamlRelease“phlare”不存在。现在安装它。名称:phlareLAST部署:2022年11月3日星期四14:37:38名称空间:phlare-testSTATUS:已部署修订:1TESTSUITE:无注意:感谢您部署GrafanaPhlare。为了配置Grafana以使用Phlare数据源,您需要将Phlare数据源添加到您的Grafana实例。集群内查询URL为:http://phlare-querier.phlare-test.svc.cluster.local。:4100要将查询API转发到您的本地主机,您可以使用:kubectl--namespacephlare-testport-forwardsvc/phlare-querier4100:4100部署完成后,检查Pod状态是否正常:??kubectlgetpods-nphlare-testNAME就绪状态重新启动AGEphlare-agent-56986dd4b9-4s6z61/1运行03m23sphlare-distributor-7447b4rc6/1运行03m23sphlare-ingester-01/1Running03m23sphlare-minio-01/1Running03m23sphlare-querier-8cdf986c-hhn291/1Running03m23s等待所有Pod状态变为Running或Completed表示部署完成然后我们可以配置Grafana来查询配置文件数据。这里我们将Grafana安装在安装Phlare的同一个Kubernetes集群中,使用如下命令一键安装:??helmtemplate-nphlare-testgrafanagrafana/grafana\--setimage.repository=aocenas/grafana\--setimage.tag=profiling-ds-2\--setenv.GF_FEATURE_TOGGLES_ENABLE=flameGraph\--setenv.GF_AUTH_ANONYMOUS_ENABLED=true\--setenv.GF_AUTH_ANONYMOUS_ORG_ROLE=Admin\--setenv.GF_DIAGNOSTICS_PROFILING_ENABLED=true\--setenv.GF_DIAGNOSTICS_PROFILING_ADDR=0.0.0.0\--setenv.GF_DIAGNOSTICS_PROFILING_PORT=6060\--set-string'podAnnotations.phlare\.grafana\.com/scrape=true'\--set-string'podAnnotations.phlare\.grafana\.com/port=6060'>grafana.yaml??kubectlapply-fgrafana.yaml部署完成后,整个phlare-test命名空间的Pod列表如下显示:??kubectlgetpods-nphlare-testNAMEREADYSTATUSRESTARTSAGEgrafana-5ff87bdfd-whmkm1/1Running085sphlare-agent-56986dd4b9-4s6z61/1运行09m17sphlare-distributor-7447b4c6c5-f4rjw1/1运行09m17sphlare-ingester-01/1运行09m17sphlare-minio-01/1运行09m17hhn291/1运行09m17s我们可以使用如下命令在本地转发Grafana服务:??kubectlport-forward-nphlare-testservice/grafana3000:80然后在浏览器中打开http://localhost:3000。您可以访问Grafana服务。在页面左侧点击配置->数据源,添加配置文件的数据源,选择phlare类型的数据源。将数据源的URL设置为http://phlare-querier.phlare-test.svc.cluster.local.:4100/。单击保存并测试以保存。添加数据源后,您应该可以在GrafanaExplore中查询配置文件。使用方法和洛基、普罗米修斯几乎一样。如下图,我们可以查询Grafana应用的CPU状态。Phlare与Grafana原生集成,使您能够将配置文件数据与指标、日志记录和跟踪一起可视化,并获得整个堆栈的整体视图。我们还在Grafana中添加了一个FlameGraph面板,它允许您构建仪表板来显示分析数据以及来自Grafana中可视化的数百个不同数据源的数据。Phare的HelmChart使用默认配置,只要Pod具有正确的注释,它的代理就会抓取它们。此功能使用relabel_config和kubernetes_sd_config,这可能类似于Prometheus或GrafnaAgent配置。为了让Phlare爬取pod,您必须向pod添加以下注释:metadata:annotations:phlare.grafana.com/scrape:"true"phlare.grafana.com/port:"8080"com/port应该设置为您的pod服务于/debug/pprof/端点的端口。注意,phlare.grafana.io/scrape和phlare.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/。
