LoginSignup
2
2

More than 5 years have passed since last update.

(PHP)NewRelic daemon を自動起動モード(Agent mode)で動かす

Posted at

以前にさくさくっと導入していたNewRelicだが、新しく用意したLaravel環境で導入しようとしたら、次のようなログを吐かれてた。
NewRelicへのレポートもうまくいっていなかった。

php-agent.log
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プロセスを起動させているプログラムを、新しい設定を反映させるために、再起動してください。
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2