openSUSEなど、LinuxでPHPプロファイラーBlackfireを使う

タグ: Linux   PHP  

MacOS、Debin/Ubuntu、RedHat/Fedora/CentOSであれば、Getting Startedページの説明通りに行えば、インストールは簡単に完了できます。

それ以外のLinuxディストリビューションで、blackfire.ioのPHPプロファイラーを使用したい時の、インストールを解説します。なお、2014年12月20日現在ベータ状態のサービスですので、内容が変更されるかも知れません。

なお、インストールする前にBlackfire.ioのサイトへログインしておいてください。ログインすることで、必要なAPIの認証情報がページに表示されます。

Agentのインストール

Agent(エージェント)は、収集したプロファイル結果をblackfire.ioに送信する役目を持つサービス(サーバー)です。最初にこれをインストールします。

Getting Startedページの"Installation"セクションで、"Manual Installation"タブを選択してください。

続いて、その下のセクション、"Installing the Agent"で、OSとプラットフォームの選択になります。OSでは、"Linux Binary"、プラットフォームでは64bitのOSであれば"x64"、32bitのOSであれば"i368"を選びます。

続いて"Download"ボタンでAgentをダウンロードするか、表示されるURLを指定し、wgetで取得しましょう。

取得したファイルをblackfire-agentにリネームし、/usr/local/bin/usr/binに移動します。(Rootユーザー権限が必要でしょう。sudoで実行してください。)確実にコマンドに実行権限を付けてください。例えば次のようになります。

sudo chmod a+x /usr/bin/blackfire-agent

続いてAgentの設定ファイルを作成します。パスは/etc/blackfire/agentです。

[blackfire]
;
; setting: ca-cert
; desc   : Sets the PEM encoded certicates
; default:
ca-cert=

;
; setting: collector
; desc   : Sets the URL of Blackfire's data collector
; default: https://blackfire.io
collector=https://blackfire.io

;
; setting: log-file
; desc   : Sets the path of the log file. Use stderr to log to stderr
; default: stderr
log-file=stderr

;
; setting: log-level
; desc   : log verbosity level (4: debug, 3: info, 2: warning, 1: error)
; default: 1
log-level=1

;
; setting: server-id
; desc   : Sets the server id used to authenticate with Blackfire API
; default:
server-id=

;
; setting: server-token
; desc   : Sets the server token used to authenticate with Blackfire API. It is unsafe to set this from the command line
; default:
server-token=
;
; setting: socket
; desc   : Sets the socket the agent should read traces from. Possible value can be a unix socket or a TCP address. ie: unix:///var/run/blackfire/agent.sock or tcp://127.0.0.1:8307
; default: unix:///usr/local/var/run/blackfire-agent.sock
socket=unix:///var/run/blackfire/agent.sock

;
; setting: spec
; desc   : Sets the path to the json specifications file
; default:
spec=

socket項目にはunixソケットのパスを指定します。ディストリビューションにより、作成するディレクトリーが通常決まっていますので、自分のLinuxの場合どこになるのか調べてください。openSUSEの場合は、"/var/run"になります。今回指定したblackfireサブディレクトリーは存在していませんので、作成する必要があります。(sudo mkdir -p /var/run/blackfire

次にAgentを実行し、認証コードを設定します。ログインしている場合、Getting Startedページにキーが表示されています。ログインしていない場合は予め、https://blackfire.io/account/credentialsページにアクセスし、ログインし、コードを表示しておきましょう。

キーを登録します。

blackfire-agent -register

"Server ID"と"Server Token"を入力します。(Clientの認証コードと間違えないでください。)

次に、このAgentをサービスとして登録するほうが良いとGetting Startedページには書かれていますが、プロファイルが必要なときに"sudo blackfire-agent"で起動できますので、飛ばします。(サーバーとして動作しますので、制御は戻ってきません。必要であれば最後に"&"をつけ、バックグラウンドで実行するか、説明通りにサービスとして登録しましょう。)

これでAgentの登録は終了です。続いて、コマンドラインツールをインストールします。

Clientをインストールする

コマンドラインツールは、Client(クライアント)と名付けられています。Getting Startedページの、"Installing the Client"を見てください。

Agentと同じ内容が指定されています。"Download"ボタンか、Wgetで表示されているURLから、Clientをダウンロードしてください。

ダウンロード済みのファイルは、"blackfire"に名前を変更し、/usr/bin/usr/local/binへ移動します。実行権限を忘れずに付けてください。

続いて、このツールのAPIキーを指定します。https://blackfire.io/account/credentials#clientページを表示してください。Clientへ指定するIDとトークンが表示されます。

以下のコマンドを実行すると、IDとトークンを尋ねられます。上記のページで表示された値を指定してください。

blackfire configure

Probeをインストールする

Probe(プローブ)は、プロファイルを取るためのPHP拡張です。いわば、本体の部分です。PHPの拡張モジュールのインストールを行います。

Getting Startedページの"Installing the Probe"セクションをご覧ください。OSとプラットフォームに加え、PHPのバージョンを指定するようになっています。自分の使用している環境にインストールしてあるPHPのバージョンを指定します。

続いて"Download"ボタンか、表示されているURLからwgetでファイルを取得し、名前をblackfire.soに変更します。

これを保存するパスは、Linuxディストリビューションにより異なります。以下の方法で表示されるディレクトリーパスをコピーしておきます。

php -i | grep 'extension_dir'

上記のディレクトリーへblackfire.soを移動します。openSUSEの場合、パスは"/usr/lib64/php5/extensions"になります。

sudo mv blackfire.so /usr/lib64/php5/extensions

続いて、PHPの設定で上記の拡張を有効にします。動作環境のphp.iniファイルに直接記述するか、設定ファイルが拡張ごとにわけられているLinuxディストリビューションであれば、適当なディレクトリーに設定ファイルを新しく作成します。openSUSEの場合は、"/etc/php5/conf.d/"ディレクトリーが拡張の設定ファイルのディレクトリーですから、"/etc/php5/conf.d/blackfire.ini"ファイルを新しく作成します。

[blackfire]
extension="/usr/lib64/php5/extensions/blackfire.so"

blackfire.agent_socket = unix:///var/run/blackfire/agent.sock

blackfire.agent_timeout = 0.25

;blackfire.log_level = 1
; Log file on Linux systems

;blackfire.log_file = /tmp/blackfire.log

;blackfire.server_id =
;blackfire.server_token =

"extension"項目には、移動先のsoファイルを指定します。"blackfire.agent_socket"項目には、"/etc/blackfire/agent"ファイルに指定したLinuxソケットのパスを指定します。サーバーのIDとトークンの項目が存在していますが、指定しなくても動作するようです。

これで、新しいPHP拡張が準備出来ましたので、Apache2を再起動するか、もしくはPHP-FPMを再起動し、有効にしましょう。

注意:blackfileのプロファイラーは、xDebugやXHProfとコンフリクトを起こす可能性があるため、同時には使用できません。

最後に、Google Chromeに拡張機能をインストールします。

Companionのインストール

これで、Agentが起動していれば、Clientツールを使用し、コマンドラインからプロファイルを実行し、blackfire.ioのサイトで結果を調べられます。(参照:https://blackfire.io/doc/web-services)

ですが、Chromeが使用可能であれば、拡張をインストールすることで、表示しているページのプロファイラーをワンタッチで表示できます。

Chromeでhttps://blackfire.io/doc/web-pageにアクセスしてください。未インストールであれば、"Install the Companion"ボタンが表示されます。クリックしてください。

サイトにログイン状態であれば、インストールはすぐに終わり、右上に新しいボタンが追加されます。blackfire.ioへログインしていないと、インストールに失敗します。ログインしてから、インストールボタンをクリックしましょう。

あとは、自分の環境のPHPで生成されているページを表示しておき、そのボタンをクリックし、項目を指定すれば、プロファイルされ、表示ボタンクリックで結果がわかります。

くれぐれも、Agentを起動しておくのをお忘れなく。