北京品牌网站建设公司排名,企业所得税的计算公式,网站的管理与维护,制作静态网站制作一、Pyroscope 简介
① 什么是 Pyroscope#xff1f;
开发人员通常需要查看生产应用程序中的性能瓶颈以确定问题的原因#xff0c;为此通常需要可以通过日志和代码工具收集的信息。不幸的是#xff0c;这种方法通常很耗时#xff0c;并且不能提供有关潜在问题的足够详细信…一、Pyroscope 简介
① 什么是 Pyroscope
开发人员通常需要查看生产应用程序中的性能瓶颈以确定问题的原因为此通常需要可以通过日志和代码工具收集的信息。不幸的是这种方法通常很耗时并且不能提供有关潜在问题的足够详细信息。一种现代且更先进的方法是应用和使用分析技术和工具来突出显示最慢的应用程序代码即消耗大部分资源的区域。现在将讨论持续分析然后使用名为 Pyroscope 的开源工具检测在 Kubernetes 上运行的微服务。必须对代码进行分析、调试和审查以确定使其运行得更快的最有效方法。使用分析工具检查应用程序的代码有助于我们定位和修复性能瓶颈。这可以快速诊断应用程序的执行情况并使程序员能够深入了解性能不佳的核心细节。结果是一个简化的代码库减少了 CPU/内存消耗使用户体验更好。Profiling 是一种程序分析用于测量程序的内存、时间复杂度或函数调用的频率和持续时间。分析信息用于帮助程序优化和性能Profiler 程序可以跟踪每一行代码。
② 连续分析
Continuous Profiler 用于更快、更轻松地进行故障排除。Continuous Profiler 是生产代码分析器可随时间分析整个环境中的代码级性能。随着配置文件的不断收集它们可以在引入新代码后快速揭示资源最密集的特性或代码行。优化可以减少最终云提供商帐户和用户的延迟。
③ 有哪些连续分析器
PyroscopePyroscope 是一个开源平台由服务器和代理组成它允许用户以 CPU 和磁盘高效的方式收集、存储和查询分析数据。ParcaParca 收集、存储和提供配置文件以便随着时间的推移进行查询它是开源的可以部署在生产环境中因为 Parca 专注于对两种主要类型的配置文件进行采样分析跟踪和采样。DatadogDatadog Continuous Profiler 始终在任何环境包括生产环境中分析和比较代码性能它指出了由低效代码导致的难以复制的生产问题。还具有自动代码分析洞察力。Google - Cloud ProfilerCloud Profiler 是一种低开销的统计分析器可从生产应用程序中持续收集 CPU 使用率和内存分配信息它具有可操作的应用程序分析、低影响的生产 Profilin 和广泛的平台支持。
④ 为什么使用 Pyroscope
在开始探索 Pyroscope 之前来看看它与市场上其他少数可用的连续分析工具有何不同。DataDog 和 Google Cloud Profiler 在业界被广泛使用正如一位 Reddit 用户所指出的以下是 Pyroscope 比其他两个更好的一些原因。Datadog、Google Cloud 和 Pyroscope 连续分析功能的比较 Pyroscope 专注于构建专门用于分析数据的存储引擎以尽可能高效地存储和查询数据。它使用代理服务器模型将配置文件从应用程序发送到 Pyroscope 服务器 Pyroscope 允许任何语言的分析器向其发送数据并让存储引擎有效地存储该数据。例如Pyroscope 具有针对 Go、Python、Ruby、eBPF、Java、.NET、PHP 和 Rust 的语言特定代理。另一方面Parca 采用了稍微不同的方法它依赖 eBPF 来编译 C、C、Go 等语言。与 Pyroscope 类似它也可以从 HTTP 端点读取任何pprof 格式的配置文件。从理论上讲由于所有这些语言最终都会编译下来并在内核上运行因此 eBPF 应该适用于这些语言中的任何一种。然而在实践中如果你真的为 Python 等解释性语言运行 eBPF在许多情况下函数名称对人类来说是不可读的。这是因为符号不是以这些语言存储的。出于这个原因Pyroscope 同时支持特定于语言的分析器和 eBPF 分析器。与仅在内核级别运行的 eBPF 相比这以集成语言特定代理的工作量稍多为代价但它也带来了更多可操作和人类可读的配置文件的好处。
二、如何安装 Pyroscope
无论使用什么Docker、Linux或者正在寻找 Ruby 或 Go 文档Pyroscope 都可以启动服务器然后再启动代理。即使目标是 10 秒或 10 个月的软件分析数据他们定制设计的存储引擎也可以进行快速查询。使用 minikube 来运行 Kubernetes 集群使用 minikube 创建集群
minikube start添加 Helm 图表存储库
helm repo add pyroscope-io https://pyroscope-io.github.io/helm-chart安装 Helm 图表
helm install pyroscope pyroscope-io/pyroscope --set service.typeNodePort检查 Pyroscope Helm 图表安装成功
helm list检查 Pyroscope 是否正在运行
kubectl get all
现在 Kubernetes 集群中运行了 Pyroscope那么将继续使用该应用程序的步骤这里使用 Google 微服务来进行此演示。
三、将 Google 微服务演示与 Pyroscope 集成
需要修改容器镜像以使用 pyroscope 二进制文件这个二进制文件将启动应用程序并注入自己进行监控。使用来自 Google 微服务的 Python、Go 和 .NET 微服务进行演示所有修改都推送到GitHub 上的 Google 微服务分支来看看每个服务的这些更改。要在 Google 微服务演示中试用 Pyroscope无需自己构建 Docker 镜像可以只应用 Kubernetes 清单如从微服务获取分析数据部分所示。
① Python
将使用 Python 编写的电子邮件服务应用程序在 DockerfilePyroscope 中使用 Python 应用程序需要进行以下更改
COPY --frompyroscope/pyroscope:latest /usr/bin/pyroscope /usr/bin/pyroscope
CMD [ pyroscope, exec, python, email_server.py ]编辑 Dockerfile 后在同一文件夹下继续构建和推送镜像
docker build . -t beellzrocks/emailservice:latest
docker push beellzrocks/emailservice:latest② .NET
使用适用于 .NET 的应用程序 Cart Service要将 .NET 应用程序与 Pyroscope 一起使用需要对 Dockerfile 进行以下更改
COPY --frompyroscope/pyroscope:latest /usr/bin/pyroscope /usr/bin/pyroscope
ENTRYPOINT [pyroscope, exec, -spy-name, dotnetspy, /app/cartservice]编辑 Dockerfile 后继续构建和推送镜像。
③ GO
采用 Go 编写的 Product Catalog Service 应用程序要使用带有 Pyroscope 的 Go 应用程序需要对 server.go 进行以下更改
import (pyroscope github.com/pyroscope-io/pyroscope/pkg/agent/profiler
)func main() {pyroscope.Start(pyroscope.Config{ApplicationName: os.Getenv(APPLICATION_NAME),ServerAddress: os.Getenv(SERVER_ADDRESS),})// code here
)编辑 server.go 后继续构建和推送镜像。
四、从微服务获取分析数据
修改 Kubernetes 清单以将图像与 Pyroscope 一起使用该 kubernetes-manifests.yaml 文件包含所有应用程序的资源再对其进行编辑以使用在上述步骤中构建的镜像即电子邮件服务、购物车服务、产品目录服务
containers:- name: serverimage: beellzrocks/emailservice在 Kubernetes 中运行 Pyroscope 时需要做以下更改 添加 SYS_PTRACE 能力 告诉代理 Pyroscope 服务器的位置以及使用环境变量的应用程序名称。
containers:- name: serverenv:- name: PYROSCOPE_SERVER_ADDRESS # To change Pyroscope Server Port change the valuevalue: http://pyroscope:4040- name: PYROSCOPE_APPLICATION_NAME # Application name shown in the UIvalue: email.service securityContext:capabilities:add:- SYS_PTRACE现在要部署所有服务可以将 Kubernetes 清单应用到集群
kubectl apply -f https://raw.githubusercontent.com/infracloudio/microservices-demo-dev/master/release/kubernetes-manifests.yaml获取 Pyroscope 的服务 url
minikube service pyroscope|-----------|-----------|-------------|---------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|-----------|-------------|---------------------------|
| default | pyroscope | http/4040 | http://192.168.49.2:30639 |
|-----------|-----------|-------------|---------------------------|Opening service default/pyroscope in default browser要访问 Pyroscope UI可以访问 URLhttp://192.168.49.2:30639依据上述反馈打开实际地址 正如在上面的屏幕截图中看到的Pyroscope 本身在本地存储数据时占用的 CPU 使用率很低它使用 Badger 数据库在本地存储数据。
五、Pyroscope 资源利用
监控 Kubernetes pod 在资源使用、利用率和成本控制方面也很重要Pyroscope 使用低资源和低开销Pyroscope CPU 利用率如下所示 六、使用 Pyroscope 进行监控
Pyroscope 根据编程语言使用不同的代理来分析代码如下是一些使用 Pyroscope 的分析应用程序的火焰图示例 带有 Go 产品目录服务应用程序的 Pyroscope Pyroscope 与 .Net Cart 应用程序 带有 Python 电子邮件应用程序的 Pyroscope
七、结论
持续分析性能是满足最终用户期望的关键因素如果出现性能问题必须准备好在影响最终用户体验之前诊断问题。因此需要继续优化应用程序并立即解决问题以继续使用 Pyroscope 等工具为用户提供超快速的应用程序性能。