AWSでリソースの監視や計測といえばCloudWatchですが、他のサービスがどんな感じか使ってみたくて試しにNewRelicを使ってみたのでその時のメモ
最終的に以下を計測するようにしてみました。
- サーバーリソース(CPU、メモリ、ロードアベレージなど)
- PHPアプリ(レスポンスタイム、エラー率など)
- RDS-MySQL(SQL数、コネクション数など)
- Apache Httpd(server statusで確認できる内容)
とりあえあえず試す(サーバーリソース)
上記を参考に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
- ネットワーク
- プロセス
プロセスを確認できるのが便利です。どのプロセスがCPU、メモリを利用しているか確認できます。以下の例ではrootユーザーで実行されているJavaのプロセスが多くのメモリを利用していることが分かります。
なお、SecurityGroupで厳密にOutBoundの許可を行う場合、以下に接続先ホスト名、ポートの記載がありました。
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
<?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独自指標)
- スループット
- エラー率
Apdex(New Relic独自指標)については以下に説明がありました。
New Relicを使ってる人に見て欲しい指標。「Apdex」
また、特定のリクエストを選択するとそのリクエストの中でどこに時間がかかっているかも確認できます。
これを使えばボトルネックの検出にも役に立ちそうですね。
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)
- データベースコネクション数
- ネットワークトラフィック
httpdの計測も行う
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に変更します。
また、ライセンスキーを変更します。
- 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
起動スクリプトも変えます。
- APP="/usr/bin/newrelic-plugin-agent"
+ APP="/usr/local/bin/newrelic-plugin-agent"
Apacheのserver status pageの表示を有効化にするため、httpdの設定を変更します。また、より詳細な情報を表示するためにExtendedStatusを有効化します。ExtendedStatusを有効にするとサーバーの動作が遅くなることもあるようなので本番の環境でやる場合には注意が必要だと思います。
- #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
以下で確認できます。
確認できる内容は以下に記載があります。