• 日常搜索
  • 百度一下
  • Google
  • 在线工具
  • 搜转载

如何通过PHP和WordPress使用New Relic

我们之前已经介绍了如何为 Rails 应用程序设置 New Relic,并且花了很多时间研究如何使用 New Relic UI尽管无论您使用何种语言和框架,UI 都非常相似,但实际上设置New Relic可能会完全不同。今天,我们将了解如何使用 New Relic 监控 php 应用程序。更具体地说,我们将在 New Relic 仪表板中设置一个基本的wordpress安装并获取一些关于它的性能数据。

为 Ruby 设置 New Relic 与环境无关。我们只需将代理 gem 添加到我们的应用程序中,此时无论我们如何部署我们的应用程序(Passenger + ApacheThin + Nginx等),gem 都会完成剩下的工作,以确保我们获得性能指标。使用 PHP 版本的代理,环境更加重要,因为代理安装并存在于将部署应用程序的盒子上,而不是任何特定应用程序的一部分。 

让我们设置一个沙箱供我们使用(使用EC2 实例)并启动和运行基本的 WordPress

设置我们的沙箱

我们不会在这里详细介绍,因为我们需要做的大部分事情在其他地方都有很好的记录。但是,这是一个基本轮廓。

我们需要启动一个带有Ubuntu Server 12.04 LTS的 EC2 实例。如果您不想设置 EC2 实例,则可以只使用VirtualBox(或您选择的 VM 工具)创建虚拟机。如果您要设置 EC2 实例,则需要记住执行以下操作:

  • 下载您的密钥(如果您在设置过程中创建了一个新密钥),以便您可以通过 SSH 连接到您的实例

  • 向您提供给实例的任何安全组添加额外的规则,以允许与实例的 HTTP 连接(以便我们稍后可以通过浏览器实际访问我们的 WordPress 博客)

如何通过PHP和WordPress使用New Relic  第1张

 

除此之外,其他一切都应该非常简单,您应该最终得到一个为下一步做好准备的正在运行的实例(或虚拟机)。

我们现在需要安装 Apache、PHP 和mysql使用 Ubuntu Server,运行以下命令应该很简单:

sudo apt-get install tasksel

sudo tasksel install lamp-server


您需要在 UI 中选择 LAMP,并且还需要在提示时输入 Mysql 密码(我只是将其留空,因为我们不关心此框是否安全)。安装完成后,我们可以运行一些命令来确保一切安装都没有问题。 

首先检查是否安装了 Apache:

ubuntu@ip-10-145-246-196:~$ apache2 -V

Server version: Apache/2.2.22 (Ubuntu)

Server built:   Jul 12 2013 13:37:10

Server's Module Magic Number: 20051115:30

Server loaded:  APR 1.4.6, APR-Util 1.3.12

Compiled using: APR 1.4.6, APR-Util 1.3.12

Architecture:   64-bit

Server MPM:     Prefork

  threaded:     no

    forked:     yes (variable process count)

...


其次,检查我们是否有 PHP:

ubuntu@ip-10-145-246-196:~$ php -i

phpinfo()

PHP Version => 5.3.10-1ubuntu3.10



System => Linux ip-10-145-246-196 3.2.0-58-virtual #88-Ubuntu SMP Tue Dec 3 17:58:13 UTC 2013 x86_64

Build Date => Feb 28 2014 23:13:16

Server api => Command Line Interface

Virtual Directory Support => disabled

Configuration File (php.ini) Path => /etc/php5/cli

Loaded Configuration File => /etc/php5/cli/php.ini

...


然后检查我们是否有 MySQL:

ubuntu@ip-10-145-246-196:~$ mysql --version

mysql  Ver 14.14 Distrib 5.5.35, for debian-linux-gnu (x86_64) using readline 6.2


我们可能还需要检查 PHP 是否在我们的 Apache 配置中实际启用,但由于我们lamp-server使用安装,tasksel我们可以非常确定它是(phpinfo()如果我们真的想检查,我们总是可以做一个快速脚本)。

我们现在可以安装 WordPress。在我们实际下载它之前,我们需要为它设置一个数据库我们可以按照Codex 的说明进行操作

ubuntu@ip-10-145-246-196:~$ mysql

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 103

Server version: 5.5.35-0ubuntu0.12.04.2 (Ubuntu)



Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

 

mysql> CREATE dataBASE myblog1;

Query OK, 1 row affected (0.00 sec)

 

mysql> GRANT ALL PRIVILEGES ON myblog1.* TO "myblog1_user"@"localhost" IDENTIFIED BY "abc123";

Query OK, 0 rows affected (0.00 sec)

  

mysql> FLUSH PRIVILEGES;

Query OK, 0 rows affected (0.01 sec)



mysql> EXIT

Bye


我将调用我们的新安装myblog1(因此它的数据库也命名为myblog1)。我们现在需要运行以下命令来运行我们的博客(必要时不要忘记sudo):

cd /var/www

wget http://wordpress.org/latest.tar.gz

tar -xzvf latest.tar.gz 

mv wordpress myblog1

cd myblog1

mv wp-config-sample.php wp-config.php


现在将您的数据库名称、用户名和密码填写到配置文件中(主机名是localhost默认情况下存在的)。此时,您应该可以访问您的浏览器,点击正确的 URL(在我的情况下http://ec2-107-20-122-116.compute-1.amazonaws.com/myblog1),WordPress 就会完成它的工作(在此之前重新启动 Apache 可能不会有什么坏处sudo apache2 service restart)。

我们的沙箱现已完成,我们可以开始安装 New Relic。

Installing New Relic

正如我之前提到的,PHP New Relic 代理驻留在盒子上,因此您可以使用操作系统的包管理器安装它是有意义的(apt-get因为我们使用的是 Ubuntu)。首先要做的是导入 New Relic 存储库密钥:

wget -O - https://download.newrelic.com/548C16BF.gpg | sudo apt-key add -


现在我们将 New Relic 存储库本身添加到系统中: 

sudo sh -c 'echo "deb http://apt.newrelic.com/debian/ newrelic non-free" > /etc/apt/sources.list.d/newrelic.list'


此时,我们可以使用标准apt 命令安装代理:

sudo apt-get update

sudo apt-get install newrelic-php5


这将从存储库中获取 PHP 代理程序包并将代理安装脚本放在系统上。该脚本被调用newrelic-install并且它存在于 中/usr/bin,因此您应该能够从任何地方运行。该脚本也有点不幸地命名,因为您可以使用它从系统中安装和卸载 New Relic。为了安装 New Relic,我们需要运行:

newrelic-install install


该脚本是交互式的,会要求您输入许可证密钥。 当您在 New Relic UI 中设置新的 PHP 应用程序时,您可以通过按下红色大按钮来找到它。

如何通过PHP和WordPress使用New Relic  第2张 如何通过PHP和WordPress使用New Relic  第2张 如何通过PHP和WordPress使用New Relic  第4张  

如果您的系统上安装了多个 PHP,它还会要求您选择应该为哪个安装 New Relic(您可以选择任意数量的安装,包括所有安装)。如果您的系统上只有一个 PHP,脚本将只使用那个。值得注意的是,如果您的 PHP 版本早于 5.2,则该脚本将退出,因为不支持旧版本。

如果一切顺利,您应该会看到以下消息:

New Relic is now installed on your system. Congratulations!


然后,该脚本将为您打印一些额外的信息,包括日志文件的位置:

/var/log/newrelic/newrelic-daemon.log

/var/log/newrelic/php_agent.log


以及您需要重新启动 Web 服务器(以及 PHP-FPM,如果您正在使用它)的事实。

如果您确实重新启动服务器并跟踪守护程序日志,您应该会看到如下内容:

ubuntu@ip-10-145-246-196:/var/www/myblog1$ cat /var/log/newrelic/newrelic-daemon.log

2014-03-23 05:30:41.063 (2008/main) warning: current file limit of 1024 is too low - attempting to increase it

2014-03-23 05:30:41.064 (2008/main) info: increased file limit to 2048

2014-03-23 05:30:41.064 (2008/main) info: New Relic 4.6 (release build 40 - "quetzalcoatlus" - "e3d29c5a2e5dc1ee455e831d589ecf5e18c7d6f0") [workers=1 listen='/tmp/.newrelic.sock'  pid=2008 ppid=2007 uid=0 euid=0 gid=0 egid=0 backtrace=no os='Linux' rel='3.2.0-58-virtual' mach='x86_64' ver='#88-Ubuntu SMP Tue Dec 3 17' node='ip-10-145-246-196' startup=agent]

2014-03-23 05:30:41.069 (2008/main) info: RPM config: proto='https' collector='collector.newrelic.com' proxy='none' certfile='/etc/ssl/certs/ca-certificates.crt' certdir='/etc/ssl/certs'

2014-03-23 05:35:14.928 (2008/connector) info: ['PHP Application'] 'Reporting to: https://rpm.newrelic.com/accounts/232928/applications/3262356'


一个名为PHP 应用程序的东西正在报告。这有点通用,完全不像我们的 WordPress 博客,但这是一个好的开始。这意味着您的 Web 服务器上的所有应用程序都运行并作为同一个应用程序向 New Relic 报告。此应用程序的默认名称为 PHP Application。 

在我们的例子中,因为我们只运行一个应用程序(我们的 WordPress 安装),我们实际上可以跳转到 New Relic UI 并为我们的博客获取合理的统计数据。但是,当然,我们希望给我们的博客起一个更好的名称,以防万一,我们希望我们的服务器服务于多个应用程序。我们还想看看如何将应用程序彼此分开。我们将很快了解如何执行此操作,但在此之前,让我们看看实际构成 PHP 代理的内容。

健康的安装是什么样的

New Relic PHP 代理有两个部分。第一个是 PHP 扩展,它是一个名为newrelic.so如果我们查看代理配置文件:

/etc/php5/cli/conf.d/newrelic.ini


我们可以看到它列在顶部:

; This file contains the various settings for the New Relic PHP agent. There

; are many options, all of which are described in detail at the following URL:

; https://newrelic.com/docs/php/php-agent-phpini-settings

;



; If you use a full path to the extension you insulate yourself from the

; extension directory changing if you change PHP installations or versions.

; If you do not use an absolute path then the file must be installed in the

; active configuration's extension directory.

extension = "newrelic.so"


This is the thing that will actually collect the stats from your apps, but it will not send the stats to New Relic, this is the job of the proxy daemon.

这是从您的应用程序中实际收集统计信息的东西,但它不会将统计信息发送到 New Relic,这是代理守护程序的工作。

代理守护进程是 PHP 扩展和 New Relic 服务器之间的代理。从本质上讲,PHP 扩展会将它收集的数据提供给守护程序,而守护程序将执行诸如批处理之类的操作并确定何时将其发送到服务器。您需要始终确保守护程序正在运行,否则不会将任何数据发送到 New Relic。幸运的是,默认情况下,每当您重新启动服务器时,PHP 扩展都会尝试检测守护程序是否正在运行,如果没有,则会启动它。

一个正在运行的代理守护进程有两个进程。一个是监控进程,第二个是worker。工作人员实际上负责与 New Relic 服务器通信,监控进程只是监视工作人员,如果工作人员死亡,无论出于何种原因,它都会产生一个新的。您可以通过运行以下命令停止守护程序:

/etc/init.d/newrelic-daemon stop


它将向监控进程发送关闭信号。然后监控进程将杀死工作进程,然后自行关闭。如果您需要手动终止守护进程,请确保在终止工作人员之前先终止监控进程(否则会产生新的工作人员 - 显然)。

配置代理(和代理守护程序)

我们已经看到了 New Relic PHP 代理配置文件/etc/php5/cli/conf.d/newrelic.ini代理和守护程序都使用此文件进行配置。

该文件有很好的文档记录,其中列出了所有选项及其默认值。我们来谈谈这个文件的格式。New Relic Ruby 代理可以通过YAML进行配置,这是一种众所周知的格式。PHP 代理只是一个文本文件,但我们需要一点结构。文件中的每个变量都有四种类型之一(字符串、布尔值、数字、持续时间)。字符串和数字是不言自明的,布尔值可以是true, on 或1表示真实性,false, off 或0表示虚假性。持续时间是具有特定格式的字符串,例如:"1w3d23h10m"表示一周、三天、23 小时和十分钟。持续时间的值可以精确到微秒。

文件中的所有变量也有一个“范围”。存在三种可能的范围:SYSTEM、PERDIR 和 SCRIPT。具有 SYSTEM 范围的变量只能在全局配置文件中设置。具有 PERDIR 范围的变量可以在全局配置文件中设置,也可以在每个目录的基础上被覆盖。具有脚本范围的变量可以是全局的,每个目录,也可以通过编程方式覆盖。

例如,最常见的配置变量是`newrelic.appname`这个变量是一个字符串类型,它的默认值是PHP 应用程序(现在我们知道为什么我们在安装代理并重新启动服务器后会在日志文件中看到该值)。此变量的范围是 PERDIR,它让我们了解如何覆盖 WordPress 博客的应用程序名称。 

还有许多其他变量控制着日志文件的位置、是否记录 sql 查询、日志输出的日志级别等。我鼓励您研究该newrelic.ini文件以熟悉这些选项。

为我们的 WordPress 博客配置单独的应用程序 

我们希望在我们的 WordPress 博客的 New Relic UI 中看到一个单独的应用程序,所以让我们看看如何实现它。每个目录配置的选项根据您的堆栈而有所不同,如果您使用的是PHP-FPM,则步骤与使用 Nginx 的步骤不同。在我们的例子中,由于我们直接运行 Apache,我们有两个选择。

首先,如果我们的应用程序有一个虚拟主机,我们可以IfModule在我们的虚拟主机块中插入一个块并在那里修改应用程序的名称:

...

<IfModule php5_module>

  php_value newrelic.appname "My Blog 1"

</IfModule>

...


但是我没有专门用于博客的虚拟主机,所以另一种选择是使用.htaccess文件。.htaccess通过将以下内容转储到主虚拟主机,确保您实际允许文件:

<Directory /var/www/myblog1>

  Options Indexes FollowSymLinks MultiViews

  AllowOverride All

  Order allow,deny

  allow from all

</Directory>


我们现在可以.htaccess在博客的顶级目录中放置一个文件,并在其中放入以下内容:

php_value newrelic.appname "My Blog 1"


IfModule格式与我将其放入块中完全相同。现在我们只需要反弹我们的服务器。如果我们在服务器重新启动时跟踪守护程序日志,我们将看到以下内容:

ubuntu@ip-10-145-246-196:/var/www/myblog1$ cat /var/log/newrelic/newrelic-daemon.log

2014-03-23 05:30:41.063 (2008/main) warning: current file limit of 1024 is too low - attempting to increase it

2014-03-23 05:30:41.064 (2008/main) info: increased file limit to 2048

2014-03-23 05:30:41.064 (2008/main) info: New Relic 4.6 (release build 40 - "quetzalcoatlus" - "e3d29c5a2e5dc1ee455e831d589ecf5e18c7d6f0") [workers=1 listen='/tmp/.newrelic.sock'  pid=2008 ppid=2007 uid=0 euid=0 gid=0 egid=0 backtrace=no os='Linux' rel='3.2.0-58-virtual' Mach='x86_64' ver='#88-Ubuntu SMP Tue Dec 3 17' node='ip-10-145-246-196' startup=agent]

2014-03-23 05:30:41.069 (2008/main) info: RPM config: proto='https' collector='collector.newrelic.com' proxy='none' certfile='/etc/ssl/certs/ca-certificates.crt' certdir='/etc/ssl/certs'

2014-03-23 05:35:14.928 (2008/connector) info: ['PHP Application'] 'Reporting to: https://rpm.newrelic.com/accounts/232928/applications/3262356'

2014-03-23 06:07:58.768 (2008/connector) info: ['My Blog 1'] 'Reporting to: https://rpm.newrelic.com/accounts/232928/applications/3262424'


PHP 应用程序仍然存在,但现在它有一个朋友,即我们的 WordPress 博客它在 UI 中:

如何通过PHP和WordPress使用New Relic  第5张 如何通过PHP和WordPress使用New Relic  第5张 如何通过PHP和WordPress使用New Relic  第7张  

现在,我们将在浏览博客时收到前端和管理界面的指标。由于 New Relic 开箱即用地支持 WordPress,因此应该明智地分解指标(当不支持框架时,指标往往会被混为一谈)。

更新代理和守护进程

New Relic 是一款复杂的软件,最好保持最新状态,因为会定期修复错误并添加新功能。由于我们使用 apt-get, 保持最新状态来安装所有内容很容易。我们只需执行与安装它相同的操作:

apt-get update

apt-get install newrelic-php5



如果我们还没有在系统上安装另一个 PHP,我们现在只需要重新启动我们的服务器,我们就会保持最新状态。如果有新的 PHP,我们可能需要重新运行newrelic-install脚本。

所有这一切只有一个警告。在某些情况下,您可能会独立于代理运行 New Relic 代理守护程序,这意味着如果守护程序未运行,重新启动服务器不会自动启动守护程序(这称为外部守护程序模式)。您想要这样做的原因可能有多种,例如,您可能希望其他用户拥有守护进程,以便日志仅对该用户可见。在这种情况下,您必须记住重新启动服务器和重新启动代理守护程序。如果不这样做,您将在日志中看到“协议不匹配”错误。

结论

如您所见,为 PHP 应用程序设置 New Relic 与为 Ruby 设置它非常不同,您的实际应用程序甚至不考虑该过程,而您部署的环境是中心。幸运的是,这意味着如果您使用任何受支持的 PHP 框架,则设置 New Relic 的过程完全相同。除了 WordPress,还支持大多数流行的 PHP 框架,包括CakeSymphonyLaravel(版本 4 及更高版本)。也可以将 New Relic 与不受支持的框架一起使用,但您必须付出一些认真的努力才能使指标有意义。


文章目录
  • 设置我们的沙箱
  • Installing New Relic
  • 健康的安装是什么样的
  • 配置代理(和代理守护程序)
  • 为我们的 WordPress 博客配置单独的应用程序
  • 更新代理和守护进程
  • 结论