Rilis 6.2 dari tumpukan elastis melihat ke fajar pemantauan kinerja aplikasi. Agen APM dalam beberapa bahasa dirilis dengan itu tetapi entah bagaimana PHP tidak ada di antara mereka ¯_ (ツ) _/¯ Perpustakaan ini menambahkan bahwa agen APM sehingga kami dapat dengan senang hati mengirimkan pengukuran kinerja aplikasi kami ke server APM elastis.
Perhatian: Alpha
Saat ini perpustakaan berada dalam fase alfa, yang berarti antarmuka mungkin masih berubah dan tidak siap untuk digunakan produksi. Saya sangat menghargainya jika Anda mencoba versi saat ini dan melaporkan masalah apa pun yang Anda temui.
Tambahkan pustaka ke aplikasi Anda dengan komposer:
composer require techdeco/elastic-apm-agentNamun, ini hanya akan berfungsi jika Anda memiliki implementasi paket virtual berikut yang diinstal (info lebih lanjut tentang masing -masing di bawah ini):
Ini sepertinya sedikit kerumitan bagi Anda, bahkan mungkin sedikit malas dari pihak kami - mengapa tidak membiarkan paket ini hanya memilih satu? - tetapi memberi Anda fleksibilitas paling banyak dan peluang minimal konflik dengan paket yang sudah digunakan dalam proyek Anda.
Katakanlah Anda tidak memiliki implementasi ini dalam proyek Anda dan Anda memilih masing -masing Guzzle 6, pesan dan monolog PHP HTTP; Anda dapat menginstal pustaka ini dengan:
composer require techdeco/elastic-apm-agent
php-http/guzzle6-adapter
php-http/message
monolog/monolog Untuk mengirim data ke server APM, agen APM di perpustakaan ini membutuhkan klien HTTP. Untuk tidak memaksa Anda menjadi pilihan untuk klien HTTP tertentu, perpustakaan tergantung pada php-http/async-client-implementation implementation. Proyek Anda perlu menyediakan implementasi itu, yang dapat Anda temukan kandidat yang mungkin di situs PHP-HTTP.
Hal yang sama berlaku untuk tidak memaksa Anda menjadi pilihan untuk pabrik pesan HTTP tertentu, yang meninggalkan proyek Anda untuk memberikan implementasi php-http/message-factory-implementation , yang dapat Anda temukan kandidat yang mungkin di situs php-http php-http
Dan juga untuk penebangan, paket ini membutuhkan implementasi sehingga klien dapat memberi tahu Anda ketika semuanya berjalan ke samping. Anda dapat menemukan semua implementasi untuk psr/log-implemtation di Packagist. Jika Anda tidak tahu mana yang harus dipilih, monolog yang sangat baik.
Untuk memberi tahu perpustakaan cara terhubung ke server APM, inisialisasi setidaknya implementasi LoggerInterface dan objek ClientConfiguration dan berikan ke HttplugAsyncClient . Klien HTTP dan pabrik pesan adalah opsional; Jika mereka tidak disuntikkan, klien akan mencoba menemukannya.
$ config = ( new ClientConfiguration ( ' http://foo.bar ' ))-> authenticatedByToken ( ' alloy ' );
$ httpClient = . . . # Implementation of php-http/async-client-implementation
$ requestFactory = . . . # implementation of php-http/message-factory-implementation
$ logger = . . . # implementation of psr/log-implementation
$ client = new HttplugAsyncClient ( $ logger , $ config , $ httpClient , $ requestFactory );Elastic melakukan pekerjaan yang sangat hebat mengintegrasikan mulus dengan banyak bahasa dan kerangka kerja. Perpustakaan ini berharap dapat memberikan layanan yang sama kepada komunitas PHP. Anda dapat memilih untuk menggunakan blok bangunan yang disediakan oleh perpustakaan dalam solusi do-it-yourself atau menggunakan komponen kenyamanan tingkat yang lebih tinggi, seperti middleware.
Server APM Elastic menelan dua jenis acara: transaksi dan kesalahan. Setelah Anda membuat klien, Anda dapat mengirim masing -masing TechDeCoElasticApmAgentRequestTransaction atau TechDeCoElasticApmAgentRequestError dengan klien tersebut ke server APM. Untuk membuat dua jenis permintaan ini, lihat TechDeCoElasticApmAgentMessage namespace untuk semua komponen yang diperlukan.
Ketahuilah bahwa semua objek permintaan dan pesan tidak dapat diubah sehingga setiap panggilan ke metode akan mengembalikan instance baru dengan properti bermutasi. Pastikan untuk bekerja dengan instance baru itu alih -alih yang Anda lakukan.
# Bad example
$ error = new Error (...);
$ error -> onSystem (...); // New instance is in the wind
$ error -> inProcess (...) // New instance is in the wind
# Good example
$ error = new Error (...);
$ error = $ error -> onSystem (...)-> inProcess (...); // Got it! Untuk mengukur waktu respons dan melaporkan kesalahan (dengan menangkap pengecualian), Anda dapat menghubungkan middleware yang sesuai dengan PSR-15 ke aplikasi Anda. Jika Anda ingin memperkaya transaksi yang Anda kirim ke server APM berdasarkan permintaan atau respons, terapkan OpenTransactionRequestEnricher atau OpenTransactionResponseEnricher dan menghubungkan middleware.
TransactionMiddleware akan menyuntikkan OpenTransaction ke dalam permintaan yang diteruskan dengan nama atribut apm-transaction (tetapi Anda lebih baik merujuknya menggunakan Constant TransactionMiddleware::TRANSACTION_ATTRIBUTE ).
Anda dapat menambahkan Span dan menandai acara ke OpenTransaction dan ketika Anda memberikan respons, middleware akan mengambilnya dan mengirimkannya bersama dengan transaksi ke server APM. Ini adalah salah satu objek tampilan yang dapat berubah sehingga Anda tidak perlu mengganti atribut permintaan setiap kali Anda mengubah sesuatu.
Jika Anda ingin menangkap dan melaporkan Throwable S ke APM, juga sertakan ErrorMiddleware di tumpukan middleware Anda. Ini akan menangkap apa pun Throwable dan mencoba untuk memahami sebanyak mungkin. Untuk memberikan kesalahan lebih banyak konteks, Anda dapat menyuntikkan objek Context pada instantiasi middleware. Ini akan menggunakannya sebagai basis untuk membangun konteks.
Terkadang Anda ingin memperkaya transaksi dengan data dari permintaan atau tanggapan. Untuk memungkinkan hal ini, menghubungkan OpenTransactionRequestEnrichmentMiddleware dan OpenTransactionRequestEnrichmentMiddleware dan menyuntikkan implementasi Anda masing -masing OpenTransactionRequestEnricher S dan OpenTransactionResponseEnricher S untuk menambahkan informasi ke OpenTransaction
Ada beberapa implementasi penganut yang termasuk dalam perpustakaan ini juga:
RequestHeaderBlacklistEnricher : Menambahkan header ke Request dalam Context kecuali saat nama mereka ada dalam daftar hitam.ResponseHeaderBlacklistEnricher : Menambahkan header ke Response dalam Context kecuali ketika nama mereka ada dalam daftar hitam. Jelas kedua middleware dapat digabungkan. Cara yang disarankan untuk melakukan ini adalah dengan menghubungkan TransactionMiddleware terlebih dahulu, kemudian ErrorMiddleware dan akhirnya OpenTransactionRequestEnrichmentMiddleware dan OpenTransactionRequestEnrichmentMiddleware . Dengan begitu transaksi akan diperkaya, kesalahan apa pun akan berkorelasi dengan transaksi dan durasi transaksi akan sama realistisnya.
Untuk memantau panggilan caching Anda, bungkus perpustakaan penerapan caching Anda di lapisan caching yang sesuai dengan PSR-6. Ini akan membuat rentang untuk setiap panggilan.
Sebelum memanggil metode apa pun dari CacheItemPoolInterface , pastikan Anda menyuntikkan OpenTransaction , lihat bagian Transaksi Terbuka di bawah ini.
Untuk memantau panggilan Anda ke layanan http eksternal, bungkus klien httplug Anda di HttpClientWrapper . Ini akan membuat rentang untuk setiap permintaan HTTP yang Anda kirim.
Pembungkus akan menambahkan header X-Correlation-ID ke permintaan sebelum meneruskannya. Header akan berisi UUID dan memberi Anda kesempatan untuk mengkorelasikan permintaan HTTP cascading di seluruh infrastruktur Anda. Middleware di perpustakaan ini akan mengambil header dan akan menambahkan ID korelasi ke tag konteks transaksi. Jika tidak ada ID korelasi yang dapat ditemukan di header, yang baru akan dibuat.
Sebelum memanggil metode HttpClientInterface apa pun, pastikan Anda menyuntikkan OpenTransaction , lihat bagian Transaksi Terbuka di bawah ini.
Beberapa kelas kenyamanan di perpustakaan ini membutuhkan OpenTransaction sebelum mereka dapat berfungsi. Semua kelas ini akan mengimplementasikan antarmuka OpenTransactionEnricher . Itu adalah pilihan yang disengaja untuk menggunakan setter alih -alih membutuhkan OpenTransaction di konstruktor, hanya karena tidak ada pada waktu itu, perlu informasi runtime untuk dibuat.
Anda bisa mendapatkan OpenTransaction baik mendapatkannya dari atribut permintaan jika Anda menggunakan middleware di perpustakaan ini, atau Anda dapat membuat sendiri dan mengonversinya nanti ke Transaction yang dapat Anda kirim ke server APM melalui Client .