Monitoring nginx By New Relic Agent SDK: Qiita Advend Calendar 2014 12/02
この投稿はnginx Advent Calendar 2014の2日目の記事です。
皆さんnginxの監視にNewRelicを使用していますか? NewRelicではnginx.incが提供しているnginx web server Pluginが提供されています。 nginx Plus限定ですがupstreamやcacheの監視も行えるため、取り敢えずこのプラグインを入れておけば十分な監視を行えます。
しかし、せっかくNewRelicを使っているのでAPMとして監視をしたい! ということでNewRelic Agent SDKを使用してnginxをAPMに追加をしたいと思います。
What is NewRelic Agent SDK
NewRelic Agent SDKはNewRelic.incが提供しているAPMに登録するためのC言語で書かれたSDKです。 APM用に標準で提供されているAgentではJava、Ruby、.Net、PHP、Node.js、Pythonの言語でしか使うことができませんが、NewRelic Agent SDKを使うと他の言語や、アプリケーションを登録することができます。
Include NewRelic Agent SDK to nginx
すでにnginxのモジュールとして作成されている方がいらっしゃるので、そちらを使ってnginxに組み込みます。
1. Install NewRelic Agent SDK
まずはNewRelic Agent SDKをインストールして、パスの通ったディレクトリに配置します。
curl -L http://download.newrelic.com/agent_sdk/nr_agent_sdk-v0.16.0.0-beta.x86_64.tar.gz tar xvz nr_agent_sdk-v0.16.0.0-beta.x86_64.tar.gz sudo cp nr_agent_sdk-v0.16.0.0-beta.x86_64/include/*h /usr/local/include/ sudo cp nr_agent_sdk-v0.16.0.0-beta.x86_64/lib/*so /usr/local/lib/
2. Make nginx
準備が出来たらnginxとnginx NewRelic ModuleをダウンロードしてMakeします。
git clone https://github.com/yars/nginx_newrelic_module.git curl -L http://nginx.org/download/nginx-1.6.2.tar.gz tar xzv nginx-1.6.2.tar.gz cd nginx-1.6.2 ./configure \ --add-module=../nginx_newrelic_module make && make install
上記コードはnginx_newrelic_module
の部分だけを抜粋しています。
他にもPCREなど必要なモジュールをconfigure
に設定してください。
3. Configure nginx
nginxのmakeに成功したら、nginx.conf
に設定を追加します。
http { ... newrelic on; newrelic_license_key my-newrelic-key; newrelic_app_name my-app-name;
上記のようにnewrelic
ディレクティブでon/offを切り替え、newrelic_license_key
ディレクティブにAPIトークンを、newrelic_app_name
ディレクティブでAPMに表示するアプリケーション名を設定します。
また、APMで表示されるトランザクション名は基本的にURLになりますが、これを設定で変更することもできます。
location /some_location {
newrelic_transaction_name some_other_name;
...
}
ここまで出来たらnginxを起動して、ページを表示すればNewRelicのAPMに新しいアプリケーションが登録することができます。
皆さん上手く動きましたでしょうか。 APMに登録できて何が嬉しいって、APMで使えるAvailability monitoringやAlertを使えるようになることです。
特にHerokuで静的サイトやリバースプロキシーを運用するときに、Availability monitoringが使えないとインスタンスの停止が発生してしまうため、APMは必須の機能になります。
あとはupstreamをNewRelicのexternal serviceとして登録できれば完璧なのですが、上手いフックタイミングが見当たらなくて改造するのは諦めました。 このあたり、nginxモジュールについて詳しい方がいたら教えてください。