29th May2015
Author: Gyro

Report to New Relic APM on cPanel/CloudLinux with CageFS

I finally found out how to get PHP apps hosted on a cPanel server with CloudLinux and CageFS enabled to report to New Relic APM.

Since I spent days searching and trying, with giving up on several occasions, I figured this definitely deserves a post on my blog.

So, how did I manage to have apps report to new relic for ALL enabled cagefs users, and them being able to use their own new relic license/account?

Well, the problem was the default settings for the socket. The socket was simply not available for cagefs users being in the /tmp folder.

Login via ssh and check /tmp as root and as a user, and you will see that .newrelic.socket is missing for the users (~$ ll /tmp)

AFAIK this is due to cagefs creating "fake" /tmp directories for each user, for example you will see all the sessions of a user only in the /tmp of the user, but not in the physical /tmp of the server's fileystem.

To get around this, I did the following:

1. I created the folder /var/run/newrelic-global/ (not sure if it was necessary)

2. I added the following lines in /etc/newrelic/newrelic.cfg:

pidfile = "/var/run/newrelic-global/newrelic-daemon.pid"
port = "/var/run/newrelic-global/.newrelic.sock"

3. I added the following line in /etc/cagefs/cagefs.mp:

/var/run/newrelic-global

After that I ran these commands:
~$ /etc/init.d/newrelic-daemon restart
~$ cagefsctl --remount-all

Now, users can either define the php flags via .htaccess (if possible), or configure their own php.ini (if available), depending on how the server has been configured and/or what their preferences are. Below the example of what to do in the .htaccess file.

<IfModule mod_php5.c>
php_value newrelic.daemon.port "/var/run/newrelic-global/.newrelic.sock"
php_value newrelic.daemon.pidfile "/var/run/newrelic-global/newrelic-daemon.pid"
php_value newrelic.license "MyNewRelicLicense"
php_value newrelic.appname "MyAppName"
</IfModule>

To check, if it is working, have a look at the log file (Default location is: /var/log/newrelic/newrelic-daemon.log). You should see something like this:


…info: [‘MyAppName'] ‘Reporting to:…

Before all this, you should of course install the php agent:
https://docs.newrelic.com/docs/agents/php-agent/installation/php-agent-installation-redhat-centos
It will ask to update the php.ini during the installation of the agent. Select the one located in /usr/local/lib.
Once the installation is completed, run ~$ cagefsctl --force-update (those are 2 dashes infront of force-update).

Also, you may want to have a look at this page, if you are using the newrelic-sysmond daemon to monitor your server.
https://www.lucasrolff.com/cpanel/new-relic-and-cloudlinux/

Enjoy :)

1725

Keep Me Going
Your Name / Website:
Did you like my post? Buy me a Bitcoffee! 14JX52Li7zTKbyQv2omw4tvu6Bi1KzfHNW



3 Responses to “Report to New Relic APM on cPanel/CloudLinux with CageFS”

  • Gyro

    I think this just gave me the solution for how to use a memcached socket for php sessions of CageFS enabled accounts… I have a feeling I’ll create a post on that soon, too. :crazy:

  • Ed

    Hello there :-)

    You get errors in Apache if you put in the “=” sign.

    php_value newrelic.daemon.port = “/var/run/newrelic-global/.newrelic.sock”
    php_value newrelic.daemon.pidfile = “/var/run/newrelic/newrelic-daemon.pid”
    php_value newrelic.license = “MyNewRelicLicense”

    Also the value in this line does not include the folder “newrelic-global”

    php_value newrelic.daemon.pidfile = “/var/run/newrelic/newrelic-daemon.pid”

    It should be ?

    php_value newrelic.daemon.pidfile “/var/run/newrelic-global/newrelic-daemon.pid”

    • Gyro

      Hi,

      good catch about the php_value and missing -global, I have corrected it, thanks.

      I did not use the .htaccess to do this, so I wasn’t paying as much attention to the details as I should have.

Leave a Reply

Your email address will not be published. Required fields are marked *

What is 9 + 10 ?
Please leave these two fields as-is:
IMPORTANT! To be able to proceed, you need to solve the following simple math (so we know that you are a human) :-)