#目的
OSSのクラウドストレージソフト、Nextcloudをモニタリング対象にして
New Relic APMのexternal serviceがどのように見えるか確認していきます。
NextcloudはバックエンドストレージとしてS3を利用したり、機能追加にGithubを利用するLAMP構成のアプリケーションのため、
New Relic APMのPHPエージェントと外部サービスとの関係を理解する参考になります。
#nextcloud構築
##インスタンス作成
UserDataを入力してAmazon Linux 2 でインスタンスを作成します。
#!/bin/bash
#環境変数
dbname=nextcloud #DB名
dbuser=nextadmin #DBユーザ名
dbpassword=nextpass #DBパスワード
#パッケージインストール
yum update -y
amazon-linux-extras install epel redis4.0 lamp-mariadb10.2-php7.2 -y
yum install httpd mariadb mariadb-server php-gd php-mbstring php-intl php-pecl-apcu php-mysqlnd php-pecl-redis php-opcache php-imagick php-zip php-dom -y
yum update -y
#mariadb起動
systemctl start mariadb.service
#MySql root ランダムパスワード生成
vMySQLRootPasswd="$(cat /dev/urandom | tr -dc '[:alnum:]' | head -c 16 | tee -a /home/ec2-user/.mysql.secrets)"
#MySql_secure_installation
mysql -u root --password= -e "
UPDATE mysql.user SET Password=PASSWORD('${vMySQLRootPasswd}') WHERE User='root';
DELETE FROM mysql.user WHERE User='';
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
FLUSH PRIVILEGES;"
#DB初期設定
echo [mysql] >> /home/ec2-user/my.cnf
echo host = localhost >> /home/ec2-user/my.cnf
echo user = root >> /home/ec2-user/my.cnf
dbrootpass() {
cat /home/ec2-user/.mysql.secrets
}
dbrootpass=`dbrootpass`
echo password = ${dbrootpass} >> /home/ec2-user/my.cnf
echo "create database ${dbname} character set utf8 collate utf8_bin; grant all privileges on ${dbname}.* to ${dbuser}@localhost identified by '${dbpassword}';" > /tmp/create.sql
mysql --defaults-extra-file=/home/ec2-user/my.cnf < /tmp/create.sql
#自動起動設定
systemctl enable httpd.service
systemctl enable mariadb.service
systemctl enable redis.service
reboot
##nextcloudインストール
nextcloudパッケージをインストールします。
$ wget https://download.nextcloud.com/server/releases/nextcloud-17.0.0.zip
$ unzip nextcloud-17.0.0.zip
$ sudo mv nextcloud /var/www/html/
$ sudo chown apache.apache /var/www/html/nextcloud/ -R
##初期設定
http:///nextcloudにアクセスして初期設定を行います。
管理者ユーザを作成し
環境変数で設定したDB情報を入力します。
dbname=nextcloud #DB名
dbuser=nextadmin #DBユーザ名
dbpassword=nextpass #DBパスワード
#New relic インストール
new relic apm インストール
New relic APMの画面でadd more から言語を選択するとインストール手順が表示されます。
$ sudo rpm -Uvh http://yum.newrelic.com/pub/newrelic/el5/x86_64/newrelic-repo-5-3.noarch.rpm
$ sudo yum install newrelic-php5
$ sudo newrelic-install install
New Relic PHP Agent Installation (interactive mode)
===================================================
Enter New Relic license key (or leave blank):<ライセンスキーを入力>
$ sudo vi /etc/php.d/newrelic.ini
以下の内容を編集
newrelic.appname = "nextcloud" #アプリケーション名
newrelic.distributed_tracing_enabled = true #分散トレーシング有効
設定が終わったら一度再起動します。
#nextcloudの外部連携
##S3連携
S3と連携するために+アプリからExternal Storage Supportを有効化します。
設定-管理-外部ストレージを選択し、S3バケットを選択します。
バケット名、リージョン、アクセスキー、シークレットアクセスキー情報を入力して接続します。
#その他のサービスの追加
カンバンボードやカレンダーなども追加してみます。
#New Relic APMでの可視化
S3アクセスや、nextcloudのアプリケーションサービスインストールは Web external
として表示されます。
外部サービスの詳細はExternal Serviceで確認できます。
NextcloudやS3、githubにアクセスしていることが確認出来ます。
#外部サービスの可視化
自分で開発したサービスはもちろん、OSSなどから導入したサービスでもNew Relicで可視化することによって、動作に必要な依存関係にある外部サービスの確認やそのパフォーマンスの確認が出来るようになります。
外部サービスとの依存関係が把握出来れば、例えば追加機能のインストールが出来ない場合にOSSの相性を疑うのかあるいは外部サービスのダウンを疑うのか
問題切り分けが的確に行えるようになります。