Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
26
Help us understand the problem. What is going on with this article?
@toshihirock

AWSでNewRelicを使ってみる(EC2、PHPアプリ、MySQL、Apache)

More than 5 years have passed since last update.

AWSでリソースの監視や計測といえばCloudWatchですが、他のサービスがどんな感じか使ってみたくて試しにNewRelicを使ってみたのでその時のメモ

最終的に以下を計測するようにしてみました。

  • サーバーリソース(CPU、メモリ、ロードアベレージなど)
  • PHPアプリ(レスポンスタイム、エラー率など)
  • RDS-MySQL(SQL数、コネクション数など)
  • Apache Httpd(server statusで確認できる内容)

とりあえあえず試す(サーバーリソース)

AWSユーザなら無料で使えるNew Relic導入方法

上記を参考にAmazonLinuxに適応してみました。

  • NewRelicにアカウントを作成
  • ライセンスキーを確認
  • 監視対象のEC2にSSHログインし、以下を実行(LICENSE_KEYとなっている部分は自分のライセンスキーに変更)
$sudo rpm -Uvh http://download.newrelic.com/pub/newrelic/el5/i386/newrelic-repo-5-3.noarch.rpm
$sudo yum install newrelic-sysmond
$sudo nrsysmond-config --set license_key=LICENSE_KEY
$sudo /etc/init.d/newrelic-sysmond start
$sudo chkconfig newrelic-sysmond on

これだけで以下が計測できます。

  • CPU使用率
  • ロードアベレージ
  • メモリ使用率
  • Disk I/O
  • ネットワーク
  • プロセス

Screen Shot 2015-07-29 at 10.20.49 PM.png

Screen Shot 2015-07-29 at 10.21.04 PM.png

プロセスを確認できるのが便利です。どのプロセスがCPU、メモリを利用しているか確認できます。以下の例ではrootユーザーで実行されているJavaのプロセスが多くのメモリを利用していることが分かります。

Screen Shot 2015-07-29 at 10.22.46 PM.png

なお、SecurityGroupで厳密にOutBoundの許可を行う場合、以下に接続先ホスト名、ポートの記載がありました。

NetWorks

PHPアプリの計測をしてみる

初めにPHP-infoのみ表示して確認しますが、あとでWordPress構築して確認します。
なお、MySQLは事前にRDSで作成しておいて、エンドポイント、DBのユーザー名、DBパスワードをメモしておいてください。

以下のコマンドを順番に実行していき、必要なものをインストールします。なお、SQL実行の箇所はユーザー名はroot、パスワードはpassword、RDSのエンドポイントはwordpress.cfunxik4b0cn.ap-northeast-1.rds.amazonaws.com という場合の設定となるので適宜変更してください。

# install httpd
sudo yum install -y httpd
sudo chkconfig httpd on
sudo service httpd start

# install application dependencies
sudo yum install php php-mysql php-gd php-mbstring -y
sudo yum install mysql -y

#exec sql
mysql -u root -ppassword -h wordpress.cfunxik4b0cn.ap-northeast-1.rds.amazonaws.com <<EOF
CREATE USER'wordpress-user'@'%' IDENTIFIED BY 'wordpress';
CREATE DATABASE \`wordpress\`;
GRANT ALL PRIVILEGES ON \`wordpress\`.*TO"wordpress-user"@"%";
FLUSH PRIVILEGES;
EOF

準備ができたので次にPHPアプリの計測を行うためのエージェントの設定をしていきます。

PHP agent installation: RedHat and CentOS

インストールします。

$sudo yum install newrelic-php5

実行します。

$sudo newrelic-install install

実行の途中でライセンスキーの入力を求められるので入力します。
これで完了です。

試しにphpinfoを表示してみます。

$sudo vi  /var/www/html/phpinfo.php
phpinfo.php
<?php phpinfo(); ?>

httpdの再起動

$sudo service httpd restart

ブラウザで確認するとインストールしたPHPのバージョンなど確認できました。(http://{Public IP}/phpinfo.php)

この状態でNewRelicのサイトを見るとPHPのアプリケーションが登録されているのが確認できます。

これだけだと面白く無いのでWordPressをインストールして情報を取得してみます。

$sudo yum install -y git
$cd /var/www/html/
$sudo git clone https://github.com/WordPress/WordPress.git
$sudo chown -R apache:apache WordPress
$sudo chmod -R 744 WordPress
$sudo service httpd restart

ブラウザでアクセスしてみます。(http://{Public IP}/WordPress)

WordPressの設定します。

  • データベース名->wordpress
  • ユーザー名->root
  • パスワード->password
  • データベースのホスト名->wordpress.cfunxik4b0cn.ap-northeast-1.rds.amazonaws.com

設定が完了しました。

NewRelicでは以下が確認できました。

  • レスポンスタイム
  • Apdex(New Relic独自指標)
  • スループット
  • エラー率

Screen Shot 2015-07-29 at 10.46.43 PM.png

Screen Shot 2015-07-29 at 10.46.56 PM.png

Apdex(New Relic独自指標)については以下に説明がありました。

New Relicを使ってる人に見て欲しい指標。「Apdex」

また、特定のリクエストを選択するとそのリクエストの中でどこに時間がかかっているかも確認できます。

Screen Shot 2015-07-29 at 10.47.38 PM.png

Screen Shot 2015-07-29 at 10.47.57 PM.png

これを使えばボトルネックの検出にも役に立ちそうですね。

MySQLの計測を行う

New RelicでMySQLを詳細に監視する

上記が参考になりました。

まず、MySQLに監視用のユーザーを作成します。本例では newrelic ユーザーとして作成しました。

$mysql -u root -ppassword -h wordpress.cfunxik4b0cn.ap-northeast-1.rds.amazonaws.com
mysql> CREATE USER newrelic@'%' IDENTIFIED BY 'newrelic';
mysql> GRANT PROCESS,REPLICATION CLIENT ON *.* TO newrelic@'%';

準備ができたので、インストールを行います。いくつかインストール方法があるようですが、New Relic Platform Installerというのを使ってやってみます。下記は参考。

newrelic-platform/newrelic_mysql_java_plugin

Getting Started with the Platform Installer

以下のコマンドを実行してインストール。

$LICENSE_KEY=YOUR_KEY_HERE bash -c "$(curl -sSL https://download.newrelic.com/npi/release/install-npi-linux-redhat-x64.sh)"

上記により、/home/{user}/newrelic-npiフォルダが作成されます。

以下により、MySQLプラグインをインストールします。コマンド実行時に色々確認されます。

$cd ~/newrelic-npi/
$./npi install npi install com.newrelic.plugins.mysql.instance

途中でどのDBに接続するかなどの情報を聞かれますので以下のように設定します。(設定は適宜変更)

{
  "agents": [
    {
      "name"    : "WordPressDB",
      "host"    : "wordpress.cfunxik4b0cn.ap-northeast-1.rds.amazonaws.com",
      "metrics" : "status,newrelic",
      "user"    : "newrelic",
      "passwd"  : "newrelic"
    }
  ]
}

設定が正しければNewRelicのPluginページで詳細を確認できるようになります。

また、インストールのタイミングで/etc/init.d/newrelic_plugin_com.newrelic.plugins.mysql.instanceができているのでOS再起動の際にも自動で起動する設定になっているようです。

サービスの起動などは以下のコマンドで実行できます。

$sudo service newrelic_plugin_com.newrelic.plugins.mysql.instance start
Starting newrelic_plugin_com.newrelic.plugins.mysql.instance

NewRelicでは以下について確認できるようでした。

  • SQL数(readとwrite)
  • データベースコネクション数
  • ネットワークトラフィック

Screen Shot 2015-07-29 at 10.28.14 PM.png

Screen Shot 2015-07-29 at 10.28.23 PM.png

httpdの計測も行う

MeetMe/newrelic-plugin-agent

httpdの計測もプラグインを使ってできるようです。ただし、MySQLプラグインとは別のやり方になるようです。。うーん、これ統一されないのかな。。。

pythonのpipを使うみたいで、2.6か2.7の必要があるので確認します。

$python -V
Python 2.7.9

インストール、設定を行います。

# install
$sudo  pip install newrelic-plugin-agent

# create folder(if it doesn't exsit)
$sudo mkdir /etc/newrelic
$sudo mkdir /var/log/newrelic
$sudo mkdir /var/run/newrelic

# copy config and init.d file
$sudo cp /opt/newrelic-plugin-agent/newrelic-plugin-agent.cfg /etc/newrelic/
$sudo cp /opt/newrelic-plugin-agent/newrelic-plugin-agent.rhel /etc/init.d/newrelic-plugin-agent
$sudo chmod 755 /etc/init.d/newrelic-plugin-agent

デーモン実行ユーザーをrootに変更します。
また、ライセンスキーを変更します。

/etc/newrelic/newrelic-plugin-agent.cfg
- license_key: REPLACE_WITH_REAL_KEY
+ license_key: YOUR_LICENCE_KEY

-  #apache_httpd:
-  #  name: hostname
-  #  scheme: http
-  #  host: localhost
-  #  verify_ssl_cert: true
-  #  port: 80
-  #  path: /server-status

+  apache_httpd:
+    name: WordPress
+    scheme: http
+    host: localhost
+  #  verify_ssl_cert: true
+    port: 80
+    path: /server-status

起動スクリプトも変えます。

/etc/newrelic/newrelic-plugin-agent.cfg
- APP="/usr/bin/newrelic-plugin-agent"
+ APP="/usr/local/bin/newrelic-plugin-agent"

Apacheのserver status pageの表示を有効化にするため、httpdの設定を変更します。また、より詳細な情報を表示するためにExtendedStatusを有効化します。ExtendedStatusを有効にするとサーバーの動作が遅くなることもあるようなので本番の環境でやる場合には注意が必要だと思います。

/etc/httpd/conf/httpd.conf

- #ExtendedStatus On
+ ExtendedStatus On

- #<Location /server-status>
- #    SetHandler server-status
- #    Order deny,allow
- #    Deny from all
- #    Allow from .example.com
- #</Location>

+ <Location /server-status>
+     SetHandler server-status
+     Order deny,allow
+     Deny from all
+     Allow from 127.0.0.1
+ </Location>

httpdサービスを再起動します。

$sudo service httpd restart

newrelicプラグインのサービスを起動します。

$sudo /etc/init.d/newrelic-plugin-agent start

ログは/var/log/newrelic/newrelic-plugin-agent.log以下で確認できます。

確認できる内容は以下に記載があります。

Apache モジュール mod_status

Screen Shot 2015-07-30 at 10.28.06 PM.png

Screen Shot 2015-07-30 at 10.28.16 PM.png

26
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
toshihirock
こちらは個人の意見で会社とは関係ありません。お約束です。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
26
Help us understand the problem. What is going on with this article?