wikimedia/arc-lamp

用于 PHP 堆栈跟踪的火焰图和日志处理。

安装数: 2,613

依赖项: 0

建议者: 0

安全性: 0

星标: 43

关注者: 16

分支: 5

语言:Shell

2.0.0 2020-11-17 18:54 UTC

This package is auto-updated.

Last update: 2024-09-08 07:36:25 UTC


README

Packagist

Arc Lamp

Arc Lamp 可以帮助从正在运行的 PHP 7 应用程序中收集堆栈跟踪,并以火焰图和跟踪日志的形式发布。

请参阅 performance.wikimedia.org 以查看实时示例。

先决条件

客户端

  • 您的 PHP 应用程序,包括 php-excimer 和 php-redis。

处理器

  • Redis 服务器。
  • Python,包括 python-redispython-yaml
  • 来自 moreutilsifne 命令(DebianHomebrew源代码)。

快速入门

require_once 'ArcLamp.php';

Wikimedia\ArcLamp::collect( [ 'redis-host' => '127.0.0.1' ] );

要自动为所有网络请求和入口启用此功能,您可以使用 PHP 的 auto_prepend_file 选项。例如,请参阅 Wikimedia 的配置

工作原理

另请参阅:在 Wikimedia Techblog 上的 大规模生产中的 PHP 性能分析

Arc Lamp 管道包括三个阶段

  1. 捕获堆栈跟踪。
  2. 创建跟踪日志。
  3. 生成火焰图。

捕获堆栈跟踪

使用 php-excimer 扩展定期收集回溯。默认情况下,它没有运行时开销。当从网络请求启用时,它会定期安排一个优雅的中断,此时它将捕获回溯。

这些跟踪可以收集自 PHP 回调,并根据需要发送到套接字或文件。

ArcLamp.php 中的默认操作是将跟踪发送到 Redis pubsub 通道。

Arc Lamp最初于2014年创建,用于Xenon,这是一个 HHVM 引擎本地的 PHP 采样分析器。要使用 Arc Lamp 与 HHVM Xenon 一起,请参阅 arc-lamp v1.0

创建跟踪日志

在 Wikimedia 的生产集群中,Arc Lamp 的 Redis 服务器位于高可用性的 "Tier 1" 区域,因此与离线性能、研究和统计服务("Tier 2")分离。

每个生产网络服务器使用 PHP 中的 ArcLamp::collect 客户端将跟踪发送到 Redis。

arclamp-log 服务订阅 Redis pubsub 通道,标准化堆栈跟踪并将它们写入相关的跟踪日志文件。例如,示例配置 为每小时和每天创建一个跟踪日志文件。

在这两个时间段内,它将跟踪日志按 PHP 应用程序的入口点分割。

例如,MediaWiki 应用程序有 index.php,和 rest.php(Web)以及 RunJobs.php(CLI)入口点。这导致以下跟踪日志

  • daily/2019-12-21.all.log
  • daily/2019-12-21.index.log
  • daily/2019-12-21.rest.log
  • daily/2019-12-21.RunJobs.log
  • hourly/2019-12-21_20.all.log
  • hourly/2019-12-21_20.index.log
  • hourly/2019-12-21_20.rest.log
  • hourly/2019-12-21_20.RunJobs.log

《arclamp-log》服务还负责删除超过配置保留期的旧跟踪日志。

生成火焰图

《arclamp-generate-svgs》脚本是定期运行的,它会为每个跟踪日志文件创建或更新相关的火焰图。它还维护每个火焰图的反向版本。

例如

  • daily/2019-12-21.all.svgz
  • daily/2019-12-21.all.reversed.svgz
  • daily/2019-12-21.index.svgz
  • daily/2019-12-21.index.reversed.svgz
  • hourly/2019-12-21_20.all.svgz
  • hourly/2019-12-21_20.all.reversed.svgz
  • hourly/2019-12-21_20.index.svgz
  • hourly/2019-12-21_20.index.reversed.svgz

《arclamp-generate-svgs》脚本还会删除不再存在的跟踪日志对应的图表。

火焰图使用Brendan Gregg的flamegraph.pl生成。

演示

请参阅 performance.wikimedia.org 以查看实时示例。