以前にさくさくっと導入していたNewRelicだが、新しく用意したLaravel環境で導入しようとしたら、次のようなログを吐かれてた。
NewRelicへのレポートもうまくいっていなかった。
2016-10-28 18:04:10.113 +0900 (5259 5259) warning: daemon connect(fd=4 uds=/tmp/.newrelic.sock) returned -1 errno=ENOENT. Failed to connect to the newrelic-daemon. Please make sure that there is a properly configured newrelic-daemon running. For additional assistance, please see: https://newrelic.com/docs/php/newrelic-daemon-startup-modes
2016-10-28 18:04:10.149 +0900 (5284 5284) info: New Relic 6.7.0.174 ("maslennikova" - "ea58fadcfc3b") [daemon='/tmp/.newrelic.sock' php='5.6.27' zts=no sapi='cli' pid=5284 ppid=5282 uid=0 euid=0 gid=0 egid=0 backtrace=yes startup=init os='Linux' rel='3.10.0-229.14.1.el7.x86_64' mach='x86_64' ver='#1 SMP Tue Sep 15 15' node='localhost.localdomain']
環境
- Mac + VitrualBox + Vagrant + CentOS7.1 の仮想VM環境
- PHP5.6
- Apache2.4.6 + Laravel 5.2.39
- NewRelic PHP / Daemon 6.7
原因
newrelic-daemonをrootで起動(External Mode起動)していたから。
Apacheを動かしているユーザーがvagrant
。
newrelic-daemonを動かしているユーザーがroot
で、これがソケットファイル/tmp/.newrelic.sock
を作ってた。(systemctl
で起動)
vagrant
ユーザーがこのソケットファイルを使うにあたり、作成ユーザーが異なるため使えなかった(通信できなかった)からだと思われる。たぶん。
(参考)
https://discuss.newrelic.com/t/error-message-in-php-agent-log-so-new-relic-doesnt-receiver-datas/3900
https://discuss.newrelic.com/t/failed-to-connect-newrelic-daemon/23564
解決方法
newrelic-daemon を起動させない! 自動起動モードで動かす!
newrelic-daemon は、Agent Modeと呼ばれる自動起動モードがあるので、(Apache下で動くPHPが)必要に応じて起動させることができる、とのこと。
そうすると、Apacheを動かしているユーザーの権限でdaemonが立ち上がって必要なソケットファイルを作成し、無事 New Relic 側へデータを送ることができる。
以下、その部分のドキュメントを訳したので、参考にしてちょんまげ。
(翻訳)Automatically starting newrelic-daemon (Agent mode)
自動起動の newrelic-daemon (Agent mode) について
(ヒント) External Mode起動を使う特別な理由でもない限り、この自動設定を使いましょう。たった1ファイル設定するだけでいいので、ほとんどのユーザーにとって最も簡単でエラーが出にくくなっています。daemonの起動をする必要もありません。
このモードでは、INIファイル中の記述だけでdaemonの設定ができます。そしてこのモードでは、エージェントがdaemonが起動していなければ、自動的にdaemonを起動させます。
自動起動モードは、次のようになっています。
- daemonの設定やグローバルなパラメータの設定は、グローバルなPHPのiniファイルに記述することができます。
- (New Relicの)エージェントが開始する時に、daemonを自動的に立ち上げます。(コマンドラインからでもApacheやPHP-FPMの再起動時でも)
- daemon のログファイルの書き込み権限が、どのアカウントがdaemonを起動させるかに左右します。(訳註:正確に訳せなかったが、daemonを起動させるアカウントも書き込めるようにログファイルの書き込み権限を適切に設定する必要があるよ、ということかと。)
- php-agent.log中で各行の冒頭には、この自動起動モードを意味する "agent" という単語が入ります。
この自動起動モードを使うためには、次のようにします。
-
/etc/init.d/newrelic-daemon stop
を実行して、daemonが動いてないことを確実にしてください。 - 設定ファイル
/etc/newrelic/newrelic.cfg
がないことを確認してください。もしあるならば、どこか他の場所に移すか、削除してください。 - INIファイルを編集して、daemonまわりのパラメータを設定してください。パラメータについては、INIファイルのテンプレートの
/usr/lib/newrelic-php5/scripts/newrelic.ini.template
にも説明が書いてあります。 - (以上の準備をして)WebサーバまたはPHPプロセスを起動させているプログラムを、新しい設定を反映させるために、再起動してください。