Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Ruby

Menggunakan Metrik Khusus New Relic untuk Memantau Semua Hal

by
Read Time:13 minsLanguages:
This post is part of a series called Performance Monitoring With New Relic.
New Relic & JMeter - Perfect Performance Testing
How to Use New Relic Custom Dashboards & Why You'd Want To

Indonesian (Bahasa Indonesia) translation by Ilham Saputra (you can also view the original English article)

Saat pertama kali diperkenalkan ke New Relic, mudah untuk kewalahan dengan semua fitur. Tetapi seperti kebanyakan alat, saat Anda perlahan-lahan menaiki kurva pembelajaran dan terbiasa dengan fitur yang disediakan di luar kotak, Anda mulai bertanya-tanya bagaimana semua itu tergantung di bawah tenda dan jika ada lebih banyak yang dapat Anda lakukan dengan apa yang Anda miliki di tangan.

Hari ini saya akan melihat bagaimana New Relic sebenarnya memantau transaksi dan bagaimana Anda dapat memahami prosesnya. Kami akan melihat sekilas dukungan yang diberikan oleh Relik Baru untuk memantau pekerjaan latar belakang dan kami juga akan menggali metrik kustom Relik Baru, bagaimana Anda akan menggunakannya dan manfaat yang Anda dapatkan dari melakukannya. Pada akhirnya Anda akan memiliki pemahaman yang lebih dalam tentang bagaimana New Relic bekerja dan dapat menggunakannya secara lebih penuh. Dengan kata lain, kami akan memiliki pengetahuan yang lebih dalam tentang alat kami—sesuatu yang harus diupayakan oleh setiap pengembang.

Mari kita mulai dengan melihat sekilas bagaimana New Relic benar-benar berhubungan untuk melacak kinerja aplikasi Anda.

Sponsored Content

Konten ini ditugaskan oleh New Relic dan ditulis dan/atau diedit oleh tim Tuts+. Tujuan kami dengan konten bersponsor adalah untuk menerbitkan tutorial yang relevan dan obyektif, studi kasus, dan wawancara inspiratif yang menawarkan nilai pendidikan asli kepada pembaca kami dan memungkinkan kami untuk mendanai pembuatan konten yang lebih bermanfaat.


Bagaimana New Relic Melacak Transaksi dan Bagaimana Anda Dapat Melakukan yang Sama

Ini mungkin tampak sedikit seperti sulap, Anda menyertakan permata di Gemfile Anda:

Dan entah bagaimana New Relic memonitor semua kode Anda. Tentu saja ini hanya kode, jadi mari kita lihat bagaimana New Relic sebenarnya menginstruksikan aplikasi Anda sehingga dapat mulai memantau ketika permata agen diperlukan. Kami akan melakukan ini dalam konteks aplikasi Rails 4.

Tempat pertama yang harus dicari adalah newrelic_rpm.rb, yang memiliki kode relevan berikut di dalamnya:

Jadi Railtie akan dibuat ketika versi Rails di atas tiga, ini mendapat NewRelic::Control singleton instance (ketika diinisialisasi) dan memanggil init_plugin. Ketika NewRelic::Control instance dibuat, itu menggambarkan kerangka apa yang sedang berjalan (Rails 4 dalam kasus kami) dan memuat beberapa kode yang relevan; kita bisa melihat ini di new_relic/control/class_methods#load_framework_class. Metode init_plugin yang akan dijalankan tinggal di new_relic/control/instance_methods. Kode menarik di sini adalah:

Panggilan install_instrumentation adalah yang penting. Implementasinya tinggal di new_relic/control/instrumentation. Melewatkan bit-bit boilerplate, ini menghasilkan file instrumentasi yang perlu dimuat dan kemudian membutuhkannya satu per satu. Dalam kasus kami, itu akan memuat file di bawah new_relic/agent/instrumentation/rails4. Salah satu file di sini adalah action_controller.rb, ketika ini diperlukan, ia akhirnya mengeksekusi kode berikut melalui beberapa keajaiban metaprogramming:

Dan di sini kita sampai ke inti masalahnya: ActionController::Base (dari mana semua pengontrol Anda mewarisi) mendapat beberapa modul termasuk di dalamnya, yang paling penting adalah NewRelic::Agent::Instrumentation::ControllerInstrumentation. Ini adalah awal dari bagaimana New Relic mulai memantau semua tindakan pengontrol Anda sebagai 'transaksi'. Tentu saja, ini adalah pandangan yang agak disederhanakan dan kami membahas banyak detail, tetapi ini memberi Anda gambaran tentang bagaimana New Relic memonitor kode Anda. Pertanyaannya adalah, bagaimana Anda bisa menggunakan informasi ini?

Pemantauan Kerangka Kerja Khusus & Pekerjaan Latar Belakang

Anda sangat tidak mungkin menemukan diri Anda dalam situasi di mana Anda menggunakan kerangka web yang New Relic belum memiliki instrumentasi untuk (di dunia Ruby), tetapi katakanlah Anda lakukan. Mengetahui apa yang kita ketahui sekarang, kita dapat dengan mudah mendata tindakan pengontrol dari kerangka kerja kustom ini. Jika kita memiliki pengontrol seperti ini:

Kita dapat instrumen itu seperti:

Sekarang metode pengendali Anda akan dilacak seperti transaksi dengan cara yang sama seperti Rails dilacak. Tentu saja, jika Anda telah menggulung kerangka kerja web Anda sendiri yang mencakup kode penanganan basis data, Anda perlu melakukan kerja ekstra untuk mendokumentasikan banyak kode itu, untuk memungkinkan New Relic memantau lebih dari sekadar tindakan pengontrol. Namun gagasan umum tetap terdengar.

Pola di atas menjadi lebih berguna ketika Anda ingin Relik Baru untuk melacak pekerjaan latar belakang di aplikasi Anda. Anda jauh lebih mungkin untuk menggulirkan beberapa kode penanganan pekerjaan latar belakang kustom daripada Anda harus menulis kerangka web Anda sendiri. Bahkan, kami melakukan ini dengan Tuts+ awalnya, meskipun kami sekarang bermigrasi ke Sidekiq. Jika Anda menggunakan salah satu sistem pekerjaan latar belakang terkenal seperti Sidekiq, Resque atau Delayed Job, New Relic sudah memiliki instrumentasi yang dibangun di dalamnya, tetapi jika Anda melakukan roll sendiri, pola di atas adalah semua yang Anda perlukan untuk memantau tugas Anda.

Misalnya, pekerjaan latar belakang Tut+ khusus kami adalah kelas ruby ​​reguler yang merespons metode execute, jadi yang harus kita lakukan adalah ini:

Bit terakhir, category: :task, adalah untuk memastikan bahwa New Relic tidak melacaknya sebagai transaksi web, tetapi memperlakukannya sebagai tugas latar belakang dan membuatnya muncul di bawah tab tugas latar belakang di UI Relik Baru. Jika kami membuat kelas dasar untuk semua pekerjaan kami, kami dapat menempatkan instrumentasi di sana dan kelas anak akan mewarisinya, jadi kami tidak perlu khawatir melakukan hal di atas di setiap kelas pekerjaan.

Menyesuaikan Transaksi Lagi

Yang cukup menarik, bahkan transaksi web yang Relic Baru otomatis monitor tidak sakral. Anda dapat, misalnya, menambahkan beberapa parameter khusus untuk dikirim ke Relik Baru untuk transaksi yang saat ini sedang dijalankan (jika Anda telah mengaktifkan parameter pengambilan).

01_capture_parameters01_capture_parameters01_capture_parameters

Anda dapat melakukan ini kapan saja selama transaksi. Yang harus Anda lakukan hanyalah memanggil ::NewRelic::Agent.add_custom_parameters(:key => 'value') kapan saja dan parameter yang Anda berikan akan ditambahkan ke data parameter yang Anda lihat di dalam New Relic. Misalnya, jika kami memiliki pengontrol yang tampak seperti ini:

Transaksi yang lambat akan memberi kita hal-hal berikut:

02_custom_parameter_display02_custom_parameter_display02_custom_parameter_display

Ini tidak semua yang bisa kita lakukan. Kami dapat mensegmentasikan transaksi saat berjalan dengan mengganti namanya. Katakanlah kita ingin memperlakukan transaksi sebagai istimewa ketika dilakukan oleh pengguna tertentu. Anda dapat melakukan sesuatu seperti ini:

Sekarang transaksi ini akan diperlakukan sebagai transaksi terpisah di UI Relik Baru:

03_segmented_transaction03_segmented_transaction03_segmented_transaction

Bahkan instrumentasi New Relic bawaan memiliki beberapa ruang untuk kustomisasi, tetapi kadang-kadang, seperti Capten Kirk, Anda hanya perlu lebih banyak kekuatan. Di sinilah metrik khusus masuk.


Metrik Khusus New Relic & Bagaimana Mereka Bermanfaat

Kembali pada hari, Anda akan menggunakan metrik kustom untuk memantau hal-hal seperti layanan eksternal komunikasi dan penggunaan berbagai alat umum seperti Redis. Hari-hari ini, Relik Baru memiliki cara yang lebih baik untuk memantau hal-hal itu, jadi untuk apa kita perlu metrik khusus? Saya telah menemukan metrik khusus agar bermanfaat dalam empat situasi:

  • memonitor kode yang tidak bisa dilihat oleh New Relic
  • kode pemantauan yang tidak Anda kendalikan
  • pemantauan script
  • pantau benar-benar acara khusus

Mari kita lihat masing-masing.

Kode Pemantauan New Relic Tidak Dapat Melihat

New Relic cukup bagus dalam menurunkan kinerja berbagai metode aplikasi Anda dalam pelacakan transaksi, tetapi terkadang Anda akan melihat sesuatu seperti ini dalam sebuah jejak:

04_uninstrumented_code04_uninstrumented_code04_uninstrumented_code

Sepertinya ada kode aplikasi yang New Relic tidak dapat instrument untuk beberapa alasan. Apa yang bisa kita lakukan adalah membantu New Relic (dan diri kita sendiri) dengan beberapa metrik khusus. Kita perlu mencari tahu metode mana yang New Relic mengalami kesulitan memonitor dan menghubungkan beberapa metrik khusus untuk melacak berapa lama metode ini diperlukan untuk dijalankan. Ini kemudian akan muncul di semua jejak berikutnya. Katakanlah kita memiliki kelas dengan metode yang ingin kita pantau melalui metrik khusus:

Kita dapat mulai melacak metode amount seperti ini:

Parameter kedua untuk add_method_tracer adalah nama yang akan diterima oleh metrik khusus ini di UI Relik Baru. Nama metrik adalah string slash yang terpisah dan semua metrik khusus harus dimulai dengan 'Custom /'. Anda bisa, misalnya, nama metrik kustom Anda sebagai ' kustom /<class_name>/<method_name>'. Pada titik ini Anda akan mulai melihat metoda amount jejak transaksi Anda, di baru UI peninggalan. Tapi, bagaimana jika metode amount kami sangat rumit dan kami ingin memantau bagian-bagian yang kami duga lamban? Saran saya adalah Anda harus merombak metode Anda—itu terlalu besar, tetapi jika Anda tidak dapat melakukannya, Anda dapat mendata kode acak seperti ini:

Sekarang bagian instrumen dari metode ini akan dilaporkan secara terpisah dalam jejak transaksi Anda. Jika Anda sebelumnya telah menginstruksikan metode itu sendiri, metrik 'inner' baru Anda akan dikelompokkan di bawah yang sebelumnya.

Sejauh ini, ini adalah cara paling umum Anda akan menggunakan metrik khusus dalam kode Anda, tetapi mari kita lihat yang lain.

Kode Pemantauan yang Tidak Anda Kontrol

Seringkali Anda mungkin menggunakan perpustakaan yang, Anda curigai, memperlambat aplikasi Anda. New Relic tidak akan instrumen permata acak untuk Anda secara default, jadi apa yang bisa Anda lakukan? Anda dapat membuat gem dan menambahkan beberapa instrumentasi menggunakan metode yang kita lihat di atas, tetapi ada solusi yang lebih sederhana—gunakan initializers. Katakanlah Anda menggunakan pustaka foobar yang memiliki kelas Foo dengan bar metode yang Anda curigai memiliki beberapa kode lambat di dalamnya. Yang perlu Anda lakukan adalah membuat initializer foobar_instrumentation.rb, dan letakkan yang berikut di dalamnya:

Seperti yang Anda lihat, kode ini sangat mirip dengan yang kami miliki di atas, Relik Baru akan membuat nama yang masuk akal untuk metrik khusus baru Anda berdasarkan kelas dan nama metode dan Anda akan mulai melihatnya dalam pelacakan transaksi Anda. Gunakan ini untuk mencari tahu apakah pustaka mencurigakan itu benar-benar membuat kode Anda berkinerja buruk, tetapi jangan menyimpan instrumentasi ini secara permanen. Ini spams inisialisasi yang tidak perlu di aplikasi Rails Anda dan mencemari UI Relik Baru Anda dengan metrik khusus yang tidak perlu Anda lacak secara permanen.

Memantau Skrip

Salah satu bagian dari aplikasi web yang sering diabaikan adalah skrip. Mengutip presentasi yang saya lakukan baru-baru ini—mereka masih kode produksi dan harus diperlakukan seperti itu. Anda tidak ingin kode produksi berperforma buruk, terutama jika Anda menjalankannya secara berkelanjutan melalui cron jobs (atau metode serupa yang bukan pekerjaan latar belakang di sistem Anda), sehingga kami dapat menggunakan New Relic untuk mencari tahu apakah skrip Anda lambat.

Anda dapat mendata kode skrip Anda menggunakan metrik khusus seperti yang dijelaskan di atas. Tidak akan muncul dalam jejak transaksi karena tidak akan menjadi bagian dari transaksi. Apa yang dapat Anda lakukan meskipun, adalah membuat dashboard kustom dari metrik yang Anda kumpulkan yang seharusnya memberi Anda gambaran jika skrip Anda berkinerja buruk.

Hal lain yang dapat Anda lakukan adalah memperlakukan naskah Anda sebagai jenis pekerjaan latar belakang dan instrumen itu sesuai (termasuk NewRelic::Agent::Instrumentation::ControllerInstrumentation dan sebagainya). Ini akan disatukan dengan pekerjaan latar belakang lainnya di UI, tetapi Anda tidak perlu khawatir tentang dasbor khusus.

Satu-satunya peringatan dengan skrip adalah ini: Relik Baru hanya mengirim data melalui kawat secara berkala. Dengan skrip satu kali yang dijalankan dengan cepat Anda perlu memastikan bahwa data yang dikumpulkan benar-benar dikirim, sehingga Anda mungkin perlu mematikan agen Relik Baru secara manual. Aturan praktis yang baik adalah secara manual memulai agen di awal setiap skrip dan mematikannya di bagian akhir:

Dengan cara ini Anda tidak perlu bertanya-tanya mengapa data Anda tidak muncul di UI.

Memantau Peristiwa Sepenuhnya Kustom

Salah satu hal menarik tentang New Relic adalah memungkinkan Anda memanfaatkan fasilitas UI dan pengumpulan data untuk metrik yang tidak ada hubungannya dengan kinerja (dalam teori). Misalnya, Anda mungkin ingin memiliki beberapa visibilitas tentang seberapa sering pengguna mendaftar ke aplikasi Anda, frekuensi penjualan, atau jumlah total yang dibayarkan pengguna ketika mereka melakukan pembelian. Ini adalah metrik bisnis lebih dari yang kinerja, tetapi jika terlalu banyak kesulitan untuk melacak ini secara terpisah, Anda dapat menggunakan New Relic untuk melakukannya.

Relic Baru memungkinkan Anda merekam metrik khusus secara langsung melalui dua panggilan API:

  • record_metric
  • increment_metric

Anda dapat menggunakan record_metric untuk melacak metrik apa pun yang memiliki jumlah dan increment_metric cukup jelas. Jadi kita dapat, misalnya, melakukan ini:

Satu-satunya cara bagi Anda untuk melihat metrik ini di UI adalah membuat beberapa dasbor khusus. Saya harus menyebutkan bahwa ini akan menjadi penggunaan API New Relic yang agak "kreatif" karena dirancang dengan data kinerja dalam pikiran, tetapi tentu saja hal yang berguna untuk mengetahui kapan Anda perlu melempar dasbor cepat bersama-sama dan tidak ingin menyiapkan banyak infrastruktur tambahan.


Bahaya Pemantauan Terlalu Banyak

Tentu saja, semua kekuatan ini memiliki biaya. Jika Anda mengumpulkan terlalu banyak metrik khusus, itu dapat mulai memperlambat aplikasi Anda. Itu juga dapat memperlambat UI Relic Baru dan menyulitkan untuk menginterpretasikan data karena New Relic akan meruntuhkan metrik serupa ke dalam ringkasan. Relik Baru merekomendasikan untuk menjaga jumlah metrik khusus yang Anda kumpulkan di bawah 2000. Saya telah menemukan bahwa metrik khusus paling baik digunakan secara berkala. Instrument kode yang Anda butuhkan, gunakan instrumentasi untuk memecahkan masalah yang Anda hadapi dan kemudian lepaskan instrumentasi. Dengan cara ini Anda mendapatkan kinerja Anda memecahkan masalah dan jumlah kustom metrik yang Anda gunakan mungkin untuk tumbuh terlalu tinggi.


Kesimpulan

Kami telah menggali bagian internal permata newrelic_rpm dan telah belajar cara memberi tahu New Relic tentang kode yang Anda anggap sebagai transaksi web. Kami telah melihat cara mengubah transaksi dengan cepat, cara memantau pekerjaan latar belakang dan berbagai situasi di mana masuk akal untuk menggunakan metrik khusus. Ada banyak hal yang dapat Anda lakukan dengan New Relic di luar fungsi yang disediakan di luar kotak dan Anda sekarang jauh lebih mampu memanfaatkannya secara maksimal. Namun, selalu ada lebih banyak untuk dipelajari, seperti cara membuat dasbor khusus dari metrik yang Anda ambil, atau cara memantau infrastruktur dengan plugin. Kami akan membahas topik tersebut dan lebih banyak lagi di artikel berikutnya, jadi pastikan untuk sering-sering memeriksa kembali. Dan seperti biasa jika Anda memiliki pertanyaan, ingin berbagi cerita Relik Baru Anda sendiri atau hanya ingin mengatakan hai, jangan lupa untuk meninggalkan komentar.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.