Azure App Service上で動かすPHPにElastic APMを設定する機会がありましたので、注意点など含めて紹介しようと思います。
PHPでElastic APMを使う方法
公式ドキュメントはこちら
https://www.elastic.co/guide/en/apm/agent/php/1.x/intro.html
通常であればrpm/dpkg/apkでインストールするだけですが、今回はひと手間必要です。
Elastic Cloud用の設定
この部分はApp Serviceでなくても必要になる部分です。
Elastic Cloudにデータを送る設定をphp.ini
に記載する必要があります。
https://www.elastic.co/guide/en/apm/agent/php/1.x/configuration.html#configure-ess
elastic_apm.server_url=APM_SERVER_URL
elastic_apm.secret_token=TOKEN
elastic_apm.service_name=SERVICE_NAME
elastic_apm.server_url
:APMデータの送付先。Elastic APM Agentがデータを送信する先は、Elastic Cloudに自動的に建てられているElastic Agent(APM Agentとは別)です。
elastic_apm.secret_token
:アクセストークン
elastic_apm.service_name
:Elastic APMのUIに表示する文字列
これら3つの設定は以下から確認できます。
Fleet -> Agent Policies -> Elastic Cloud Agent Policies -> Elastic APM -> APM Agents -> PHP
URL(elastic_apm.server_url
)を変更したい場合はElastic Agentをどこかに展開すれば可能となります。
APM Agent -> 新しく展開したElastic Agent -> Elasticsearch
というデータの流れになります。
Token(elastic_apm.secret_token
)を変更する場合は
Fleet -> Agent Policies -> Elastic Cloud Agent Policies -> Elastic APM -> Settings -> Agent Authorization -> Secret token
に設定した文字列を入力して右下の"Save Integration"をクリックします。
elastic_apm.service_name
は自由です。好きな文字列を入れてください。
Kibana UIで確認した以下の部分をコピーしてphp.ini
として保存しておきましょう
(実際には<address>と<token>にはそれぞれの環境の文字列が入っています)
elastic_apm.server_url="https://<address>:443"
elastic_apm.secret_token="<token>"
elastic_apm.service_name="My service"
App Serviceのための設定
App Serviceでは/home以外はPersistentではないため、ライブラリ/ソースコード/iniファイルを手動で用意し、/home以下に配置して環境変数でその場所を指定します。
必要なもの
こちらからダウンロードします。
https://github.com/elastic/apm-agent-php
apm-agent-php.tarを持ってくるのが早いです。
2022年8月現在で最新は以下のものです。
https://github.com/elastic/apm-agent-php/releases/download/v1.5.2/apm-agent-php.tar
tarを展開してopt/elastic/apm-agent-php
に移動します。
extensions
PHPバージョンに応じて必要なファイルが異なります。例えばPHP8であればelastic_apm-20200930.so
です。
src
src
配下全て必要です
php.ini
先ほど作成したものに以下の2行を追加します
extension=/home/site/wwwroot/extensions/elastic_apm-20200930.so
elastic_apm.bootstrap_php_part_file=/home/site/wwwroot/src/bootstrap_php_part.php
extension
とbootstrap_php_part_file
で指定しているフォルダ構成はapm-agent-php.tar
を展開したそのままの構成をApp ServiceにDeployした場合の例です。
ディレクトリ構造を変える場合は適宜変更してください。
PHPファイル
表示できれば何でも良いので以下のようなものを用意しました。
<?php phpinfo(); ?>
Deployment準備
ZIPでアップロードするかGitHubを使用するかで少し方法が異なります。
ZIPでアップロードの場合
extensions
,src
,php.ini
,index.php
をまとめてZIPに固めます。
zip -r php.zip .
GitHubを使用する場合
上記をまとめてGitHubにPushしておきましょう。
App Service 作成
ここはElastic向けのものはありませんので詳細は省きます。
こんな感じで作成すればよいでしょう。
iniファイル読み込みディレクトリ設定
そのままだと上記で設定したphp.ini
を読み込んでもらえません。
こちらのサイトにiniファイルを読み込むディレクトリの設定方法が記載してあります。
https://docs.microsoft.com/ja-jp/azure/app-service/configure-language-php?pivots=platform-linux
UIから行う場合は以下のように設定->構成->新しいアプリケーション設定に入力します。
これにより/home/site/wwwroot
にあるiniファイルを読み込んでくれます。
Deploy
どの方法を使うにせよ展開先は/home/site/wwwroot
です。
ZIPでのDeploy
ZIPファイルをアップロードします。こちらはUIから行えず先程のZIPファイルのあるローカル環境から行います。
ローカル環境にはAzure CLIをインストールしておきます。
https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli
下記コマンドを実行すると自動的にZIPがアップロードされ/home/site/wwwroot
に展開されます。
az webapp deploy --resource-group <group name> --name <app name> --src-path php.zip
GitHubからのDeploy
デプロイセンターの設定からソースとしてGitHubを選んでも同様に出来ます。
確認
サイトにアクセス
App Serviceの概要へ戻りURLの横にあるリンクをクリックしましょう。
https://<app name>.azurewebsites.net
となっているはずです。
このように表示されればOKです。
Elastic APMでの確認
Elastic CloudのKibanaにアクセスしてObservability -> APMをクリックします。
以下のようにName
部分にphp.ini
のelastic_apm.service_name
で設定した値(今回だとphp8
)が表示されていれば成功です。
まとめ
Elastic APMは様々な環境で簡単にAPMデータを取得することが可能です。ぜひお試しください。
Elastic Cloud 無料トライアル
こちらからElastic Cloudの14日間無料トライアルを是非お試しください
Elastic Cloud 無料トライアル
手順は下記リンクをご参照ください
Elastic Cloud について 〜実際にデプロイメントを作ってみよう〜