弊社で管理しているシステムの本番環境に tideways を試験的に導入してみました。
まだトライアル期間中で色々と機能を試しているところですが、導入にあたっての疑問点などをまとめておきます。

特徴

プロファイラとしての主だった特徴は、この辺りです
  • SaaS 型のサービスなので管理コストが不要
  • 本番環境に導入できる
代替サービスとして blackfire がありますが、こちらは年間プランしかないので試用期間後の有料版契約のハードルが重く、まずは tideways を試してみることにしました。

SaaS 型のサービスなので管理コストが不要

管理コストを考えたときに、月数千円~2万円の範囲であれば、メンテナンス工数よりも安上がりだと判断しました。もちろんこの辺りはプロジェクトの規模・メンバ構成・ビジネス的なキャッシュフローの質によって変わるところではあります。

本番環境に導入できる

また、「事件は開発環境で起きているんじゃない、本番環境で起きているんだ!」ということで今回は本番環境に導入できることを重要視しました。
(選択肢から Xdebug 等が除外されます)

導入方法

びっくりするぐらいに簡単です。

まずは、ユーザ登録をするとダッシュボードから組織をアプリを作成することができるので、作成します。


インストール

Create Application すると、このような導入手順が表示されるので、素直に yum install するだけです。

OS を切り替えると、OS 毎に異なるコマンドを表示してくれます。

設定

同じように設定内容が API KEY と共に表示されているので、素直に設定します。
php.ini で設定する例

こちらも、設定方法を切り替えると方法に応じた設定を表示してくれます。

framework は指定してもしなくても問題ありません。
指定することのメリットは、トランザクション名を自動的に生成してくれることです。
指定しない/指定したのに働かない 場合は、このように手動で設定します。
<?php

class Dispatcher
{
    public function dispatch($controllerClass, $actionName)
    {
        // Add this four lines to set the transaction name
        $transactionName = $controllerClass . '::' . $actionName;
        if (class_exists('Tideways\Profiler')) {
            \Tideways\Profiler::setTransactionName($transactionName);
        }

        $controller = new $controllerClass();
        return $controller->$actionName();
    }
}
https://tideways.io/profiler/article/40-transactions より

成功すると、こんな感じでログが表示されます。

パフォーマンスが悪い箇所が分かっている場合は、"HTTP" などと表示してくれています。

で、特定のトランザクション名を選択すると、取得した Trace が表示されます。
取得できる Trace 数には制限があるので、全ての処理を Trace しているわけではないので、無い時もあります。(どういう基準で Trace しているのかはわかりません。。)

Trace があれば、選択するとこのようにタイムラインを表示してくれます。

ここまで見れれば、大抵の問題は解決できるでしょう。

以上。