過去数か月間、私は Symfony 開発者向けの監視エクスペリエンスを刷新するために熱心に取り組みました。 Symfony 監視ライブラリは、Inspector の顧客の間で 2 番目に人気のあるライブラリです。 1 つ目は Laravel パッケージです。
フレームワークの最新バージョンのリリースにより、アプリの監視エクスペリエンスがこれまでにないほど簡単になる機会がもたらされました。
この記事では、これらの変更の内容と、Inspector での監視エクスペリエンスに与える影響について詳しく説明します。
さらに技術的な記事については、Linkedin または X で私をフォローしてください。
Symfony にとって最も重要な ORM の最新メジャー バージョンは、今年の初めにリリースされました。そして、新しい「ミドルウェア アーキテクチャ」を優先して SQL ロガーのサポートを中止しました。
アプリケーションが SQL ロガーまたはミドルウェアを挿入するために使用している Doctrine のバージョンを確認するためのチェックをバンドル内に実装しました。
Symfony 監視ライブラリの最初の実装では、ルート名を使用して Symfony アプリケーションに対する http トラフィックを監視していました。
基本的に、Symfony で新しいルートを実装するときは、コントローラーのメソッドの属性を介してそれを宣言できます。
namespace App\Controller; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; class HomeController { #[Route('/', name: 'app_homepage')] public function home() { return new Response('Home Page'); } #[Route('/landing', name: 'app_landing')] public function landing() { return new Response('Landing Page'); } }
Route オブジェクトは 2 番目のパラメーターとしてルートの名前を取得するため、パスを記述する代わりにその名前を使用してアプリケーション内でこのルートを参照できます。これにより、言及されているコード行ごとに URL パターンを変更することなく、将来 URL パターンを変更できるようになります。
監視ライブラリ内のそれらの 1 つを無視したい場合は、Inspector yaml 設定ファイルにルート名をリストする必要がありました。
inspector: ingestion_key: '%env(INSPECTOR_INGESTION_KEY)%' ignore_routes: - 'app_landing'
ライブラリの最初のバージョンの構築を手伝ってくれた最初の開発者は、実際の URL パターンを収集する方法を見つけられなかったため、作業を妨げないようにこの実装を続行しました。
しかし、ルート名を使用して HTTP トラフィックを監視することには、いくつかの欠点があります。
まず、ルート名はオプションです。明らかに、Symfony で URL を名前にマッピングする必要はありません。非常に多くの開発者が名前を使用していなかったので、ライブラリはフォールバック データとして /users/12/profile.
のような最終的なパスを収集していました。さらに悪いことに、誰かがアプリケーションの一部にのみ名前を使用しており、ダッシュボードのトランザクション リストが混合形式で表示され、一部のエンドポイントはルート名を使用して監視され、他のエンドポイントは URL で監視されていました。
2 番目の問題は、アプリの特定の部分で URL を無視して監視をオフにする機能でした。 Symfony アプリケーションは通常、URL パターンを使用してセグメント化されます。開発者は、すべての管理エンドポイントを /admin/[other sub urls] のようなメイン URL の下にグループ化する傾向があります。ワイルドカードを使用してアプリの一部を無視したい場合は、この自然な関連付け (/users*) により URL を参照できれば簡単になります。ルート名のより一貫したパターンを見つけるのはさらに困難です。
さらに、ルート名が存在しない場合に収集されたフォールバック データは、/users/12/profile のような実際の URL でした。そのため、エンドポイントが異なる ID で呼び出されるたびに、トランザクション リストに新しい行が生成されます。監視データにノイズが多すぎます。
ルートパターンを収集する
ルート パターンは、ユーザーが呼び出している実際の URL とは異なります。 Symfony アプリ内の URL のほとんどは、基本的に /users/{id}/profile
これは Symfony コントローラーの典型的な実装です:
namespace App\Controller; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; class HomeController { #[Route('/', name: 'app_homepage')] public function home() { return new Response('Home Page'); } #[Route('/landing', name: 'app_landing')] public function landing() { return new Response('Landing Page'); } }
これは、実際の URL の代わりにトランザクション リストで報告する必要があるものです。なぜならIDが変わっても実行されるコードは常に同じだからです。
この変更により、特定の URL だけでなく、Inspector 構成ファイル内のワイルドカード文字を使用してアプリ全体の部分も簡単に無視できるようになります。
inspector: ingestion_key: '%env(INSPECTOR_INGESTION_KEY)%' ignore_routes: - 'app_landing'
さらに技術的な記事については、Linkedin または X で私をフォローしてください。
Inspector は、ソフトウェア開発者向けに特別に設計されたコード実行監視ツールです。インフラストラクチャに何もインストールする必要はありません。Symfony パッケージをインストールするだけで準備完了です。
HTTP モニタリング、データベース クエリの洞察、アラートや通知を好みのメッセージング環境に転送する機能をお探しの場合は、Inspector を無料でお試しください。アカウントを登録してください。
または、Web サイトで詳細をご覧ください: https://inspector.dev
以上がSymfony 監視ライブラリの実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。