Bukan New Relic saja: lihat Datadog dan Atatus

Bukan New Relic saja: lihat Datadog dan Atatus

Di lingkungan insinyur SRE/DevOps, tidak akan mengejutkan siapa pun bahwa suatu hari klien (atau sistem pemantauan) muncul dan melaporkan bahwa “semuanya hilang”: situs tidak berfungsi, pembayaran tidak dilakukan, kehidupan semakin memburuk ... Tidak peduli seberapa besar Anda ingin membantu dalam situasi seperti ini, akan sangat sulit untuk melakukan ini tanpa alat yang sederhana dan mudah dipahami. Seringkali masalahnya tersembunyi dalam kode aplikasi itu sendiri; Anda hanya perlu melokalkannya.

Dan dalam kesedihan dan kegembiraan…

Kebetulan kami sudah lama dan sangat jatuh cinta dengan New Relic. Itu adalah dan tetap menjadi alat yang sangat baik untuk memantau kinerja aplikasi, dan juga memungkinkan Anda untuk melengkapi arsitektur layanan mikro (menggunakan agennya) dan masih banyak lagi. Dan semuanya bisa menjadi baik jika bukan karena perubahan dalam kebijakan harga layanan: itu biaya dengan 2013 tahun tumbuh 3+ kali lipat. Selain itu, sejak tahun lalu, untuk mendapatkan akun uji coba memerlukan komunikasi dengan manajer pribadi, sehingga sulit untuk mempresentasikan produk kepada calon pelanggan.

Situasi yang biasa: Relik Baru tidak diperlukan secara “permanen”; mereka mengingatnya hanya pada saat masalah dimulai. Namun Anda tetap harus membayar secara rutin (140 USD per server per bulan), dan dalam infrastruktur cloud yang dapat diskalakan secara otomatis, jumlahnya akan bertambah cukup besar. Meskipun ada opsi Pay-As-You-Go, mengaktifkan New Relic akan mengharuskan Anda memulai ulang aplikasi, yang dapat menyebabkan hilangnya situasi masalah yang memulai semuanya. Belum lama ini, New Relic memperkenalkan rencana tarif baru - Essentials, - yang sekilas tampak seperti alternatif yang masuk akal untuk Profesional... tetapi setelah diperiksa lebih dekat ternyata beberapa fungsi penting hilang (khususnya, tidak ada Transaksi Penting, Penelusuran Lintas Aplikasi, Pelacakan Terdistribusi).

Akibatnya, kami mulai berpikir untuk mencari alternatif yang lebih murah, dan pilihan kami jatuh pada dua layanan: Datadog dan Atatus. Kenapa pada mereka?

Tentang pesaing

Izinkan saya segera mengatakan bahwa ada solusi lain di pasar. Kami bahkan mempertimbangkan opsi Sumber Terbuka, namun tidak setiap klien memiliki kapasitas bebas untuk menghosting solusi yang dihosting sendiri... - selain itu, solusi tersebut memerlukan pemeliharaan tambahan. Pasangan yang kami pilih ternyata paling dekat kebutuhan kita:

  • dukungan bawaan dan dikembangkan untuk aplikasi PHP (tumpukan klien kami sangat beragam, tetapi ini adalah pemimpin yang jelas dalam konteks mencari alternatif untuk New Relic);
  • biaya terjangkau (kurang dari 100 USD per bulan per host);
  • instrumentasi otomatis;
  • integrasi dengan Kubernetes;
  • Kemiripan dengan antarmuka New Relic merupakan nilai tambah yang nyata (karena teknisi kami sudah terbiasa).

Oleh karena itu, pada tahap seleksi awal, kami menghilangkan beberapa solusi populer lainnya, dan khususnya:

  • Tideways, AppDynamics dan Dynatrace - untuk biaya;
  • Stackify diblokir di Federasi Rusia dan menampilkan terlalu sedikit data.

Artikel selanjutnya disusun sedemikian rupa sehingga solusi yang dimaksud pertama-tama akan disajikan secara singkat, setelah itu saya akan berbicara tentang interaksi khas kami dengan New Relic dan pengalaman/kesan dari melakukan operasi serupa di layanan lain.

Presentasi pesaing terpilih

Bukan New Relic saja: lihat Datadog dan Atatus
Tentang Relic baru, mungkin semua orang pernah mendengarnya? Layanan ini mulai dikembangkan lebih dari 10 tahun yang lalu, pada tahun 2008. Kami telah aktif menggunakannya sejak tahun 2012 dan tidak mengalami masalah dalam mengintegrasikan sejumlah besar aplikasi dalam PHP, Ruby dan Python, dan kami juga memiliki pengalaman mengintegrasikan dengan C# dan Go. Pembuat layanan memiliki solusi untuk memantau aplikasi, infrastruktur, melacak infrastruktur layanan mikro, membuat aplikasi yang nyaman untuk perangkat pengguna, dan banyak lagi.

Namun, agen New Relic berjalan pada protokol kepemilikan dan tidak mendukung OpenTracing. Instrumentasi tingkat lanjut memerlukan pengeditan khusus untuk New Relic. Terakhir, dukungan Kubernetes masih bersifat eksperimental.

Bukan New Relic saja: lihat Datadog dan Atatus
Memulai pengembangannya pada tahun 2010 anjing data terlihat jauh lebih menarik daripada New Relic tepatnya dalam hal penggunaan di lingkungan Kubernetes. Secara khusus, ini mendukung integrasi dengan NGINX Ingress, pengumpulan log, statsd, dan protokol OpenTracing, yang memungkinkan Anda melacak permintaan pengguna dari saat terhubung hingga selesai, serta menemukan log untuk permintaan ini (baik di sisi server web dan pada konsumen).

Saat menggunakan Datadog, kami menemukan bahwa terkadang Datadog salah membuat peta layanan mikro, dan beberapa kekurangan teknis. Sebagai contoh, ia salah mengidentifikasi jenis layanan (mengira Django sebagai layanan cache) dan menyebabkan 500 kesalahan dalam aplikasi PHP menggunakan perpustakaan Predis yang populer.

Bukan New Relic saja: lihat Datadog dan Atatus
Atatus — instrumen termuda; layanan ini diluncurkan pada tahun 2014. Anggaran pemasarannya jelas lebih rendah daripada pesaing yang terdaftar, dan penyebutannya jauh lebih jarang. Namun, alat itu sendiri sangat mirip dengan New Relic, tidak hanya dalam kemampuannya (APM, pemantauan Browser, dll.), tetapi juga dalam tampilannya.

Kelemahan signifikannya adalah hanya mendukung Node.js dan PHP. Di sisi lain, penerapannya jauh lebih baik daripada Datadog. Berbeda dengan yang terakhir, Atatus tidak memerlukan aplikasi untuk melakukan modifikasi atau menambahkan label tambahan pada kode.

Bagaimana kami bekerja dengan New Relic

Sekarang mari kita cari tahu bagaimana kita biasanya menggunakan New Relic. Katakanlah kita mempunyai masalah yang memerlukan solusi:

Bukan New Relic saja: lihat Datadog dan Atatus

Sangat mudah untuk melihatnya pada grafik percikan - Mari kita analisa. Di New Relic, transaksi web untuk aplikasi web langsung dipilih, semua komponen ditunjukkan dalam grafik kinerja, ada panel tingkat kesalahan, tingkat permintaan... Yang paling penting adalah langsung dari panel ini Anda dapat berpindah antar yang berbeda bagian dari aplikasi (misalnya, mengklik MySQL akan mengarah ke bagian database).

Karena dalam contoh ini kita melihat lonjakan aktivitas PHP, klik pada bagan ini dan buka secara otomatis Transaksi:

Bukan New Relic saja: lihat Datadog dan Atatus

Daftar transaksi, yang pada dasarnya merupakan pengontrol dari model MVC, sudah diurutkan berdasarkan Paling memakan waktu, yang sangat nyaman: kita langsung melihat apa yang dilakukan aplikasi tersebut. Berikut adalah contoh kueri panjang yang dikumpulkan secara otomatis oleh New Relic. Dengan mengganti penyortiran, mudah untuk menemukan:

  • pengontrol aplikasi yang paling banyak dimuat;
  • pengontrol yang paling sering diminta;
  • pengontrol yang paling lambat.

Selain itu, Anda dapat memperluas setiap transaksi dan melihat apa yang dilakukan aplikasi pada saat kode dijalankan:

Bukan New Relic saja: lihat Datadog dan Atatus

Terakhir, aplikasi menyimpan contoh jejak permintaan yang panjang (yang memerlukan waktu lebih dari 2 detik). Berikut panel untuk transaksi panjang:

Bukan New Relic saja: lihat Datadog dan Atatus

Terlihat bahwa kedua metode tersebut memakan banyak waktu, dan pada saat yang sama ketika permintaan dijalankan, URI dan domainnya juga ditampilkan. Seringkali ini membantu menemukan permintaan di log. Pergi ke Detail jejak, Anda dapat melihat dari mana metode ini dipanggil:

Bukan New Relic saja: lihat Datadog dan Atatus

Dan di Kueri basis data — mengevaluasi kueri ke database yang dijalankan saat aplikasi sedang berjalan:

Bukan New Relic saja: lihat Datadog dan Atatus

Berbekal pengetahuan ini, kita dapat mengevaluasi mengapa aplikasi melambat dan bekerja sama dengan pengembang untuk menghasilkan strategi untuk memecahkan masalah tersebut. Pada kenyataannya, New Relic tidak selalu memberikan gambaran yang jelas, tetapi membantu memilih vektor penyelidikan:

  • panjang PDO::Construct membawa kita pada fungsi pgpoll yang aneh;
  • ketidakstabilan dari waktu ke waktu Memcache::Get menyarankan bahwa mesin virtual tidak dikonfigurasi dengan benar;
  • peningkatan waktu yang mencurigakan untuk pemrosesan templat menyebabkan loop bersarang memeriksa keberadaan 500 avatar di penyimpanan objek;
  • dll…

Kebetulan juga alih-alih mengeksekusi kode, sesuatu yang terkait dengan penyimpanan data eksternal tumbuh di layar utama - dan tidak peduli apa itu: Redis atau PostgreSQL - semuanya tersembunyi di tab Database.

Bukan New Relic saja: lihat Datadog dan Atatus

Anda dapat memilih basis spesifik untuk penelitian dan mengurutkan kueri - serupa dengan yang dilakukan di Transaksi. Dan dengan masuk ke tab permintaan, Anda dapat melihat berapa kali permintaan ini terjadi di setiap pengontrol aplikasi, dan juga memperkirakan seberapa sering permintaan tersebut dipanggil. Sangat nyaman:

Bukan New Relic saja: lihat Datadog dan Atatus

Tab tersebut berisi data serupa Pelayanan luar, yang menyembunyikan permintaan ke layanan HTTP eksternal, seperti mengakses penyimpanan objek, mengirim peristiwa ke penjaga, atau sejenisnya. Isi tab ini sangat mirip dengan Database:

Bukan New Relic saja: lihat Datadog dan Atatus

Pesaing: peluang dan kesan

Nah yang paling menarik adalah membandingkan kemampuan New Relic dengan apa yang ditawarkan kompetitor. Sayangnya, kami tidak dapat menguji ketiga alat tersebut pada satu versi dari satu aplikasi yang berjalan dalam produksi. Namun, kami mencoba membandingkan situasi/konfigurasi yang seidentik mungkin.

1. Anjing Data

Datadog menyambut kami dengan panel dengan dinding layanan:

Bukan New Relic saja: lihat Datadog dan Atatus

Ia mencoba memecah aplikasi menjadi komponen/layanan mikro, jadi dalam contoh aplikasi Django kita akan melihat 2 koneksi ke PostgreSQL (defaultdb и postgres), serta Seledri, Redis. Bekerja dengan Datadog mengharuskan Anda memiliki pengetahuan minimal tentang prinsip-prinsip MVC: Anda perlu memahami dari mana permintaan pengguna umumnya berasal. Ini biasanya membantu peta layanan:

Bukan New Relic saja: lihat Datadog dan Atatus

Omong-omong, ada yang serupa di New Relic:

Bukan New Relic saja: lihat Datadog dan Atatus

... dan petanya, menurut saya, dibuat lebih sederhana dan jelas: peta tersebut tidak menampilkan komponen satu aplikasi (yang akan membuatnya terlalu detail, seperti dalam kasus Datadog), tetapi hanya layanan atau layanan mikro tertentu.

Mari kita kembali ke Datadog: dari peta layanan kita dapat melihat bahwa permintaan pengguna datang ke Django. Mari pergi ke layanan Django dan akhirnya melihat apa yang kita harapkan:

Bukan New Relic saja: lihat Datadog dan Atatus

Sayangnya, tidak ada grafik di sini secara default Waktu transaksi web, mirip dengan apa yang kita lihat di panel utama New Relic. Namun, hal ini dapat dikonfigurasi sesuai jadwal % Waktu yang dihabiskan. Cukup dengan menggantinya Waktu rata-rata per permintaan berdasarkan Jenis...dan sekarang grafik familiar sedang melihat kita!

Bukan New Relic saja: lihat Datadog dan Atatus

Mengapa Datadog memilih grafik yang berbeda adalah sebuah misteri bagi kami. Hal lain yang membuat frustrasi adalah sistem tidak mengingat pilihan pengguna (tidak seperti kedua pesaing), dan oleh karena itu satu-satunya solusi adalah membuat panel khusus.

Namun saya senang dengan kemampuan Datadog untuk beralih dari grafik ini ke metrik server terkait, membaca log, dan mengevaluasi beban pada penangan server web (Gunicorn). Semuanya hampir sama seperti di New Relic... dan bahkan lebih banyak lagi (log)!

Di bawah grafik adalah transaksi yang sangat mirip dengan New Relic:

Bukan New Relic saja: lihat Datadog dan Atatus

Di Datadog, transaksi disebut sumber daya. Anda dapat mengurutkan pengontrol berdasarkan jumlah permintaan, waktu respons rata-rata, dan waktu maksimum yang dihabiskan untuk jangka waktu yang dipilih.

Anda dapat memperluas sumber daya dan melihat semua yang telah kami amati di New Relic:

Bukan New Relic saja: lihat Datadog dan Atatus

Ada statistik pada sumber daya, daftar umum panggilan internal, dan contoh permintaan yang dapat diurutkan berdasarkan kode respons... Omong-omong, teknisi kami sangat menyukai penyortiran ini.

Contoh sumber daya apa pun di Datadog dapat dibuka dan dipelajari:

Bukan New Relic saja: lihat Datadog dan Atatus

Parameter permintaan, diagram ringkasan waktu yang dihabiskan untuk setiap komponen, dan diagram air terjun yang menunjukkan urutan panggilan disajikan. Anda juga dapat beralih ke tampilan hierarki diagram air terjun:

Bukan New Relic saja: lihat Datadog dan Atatus

Dan hal yang paling menarik adalah melihat beban host tempat permintaan dieksekusi dan melihat log permintaan.

Bukan New Relic saja: lihat Datadog dan Atatus

Integrasi yang hebat!

Anda mungkin bertanya-tanya di mana letak tabnya Database и Pelayanan luar, seperti di Relik Baru. Tidak ada satu pun di sini: karena Datadog menguraikan aplikasi menjadi beberapa komponen, PostgreSQL akan dipertimbangkan layanan terpisah, dan alih-alih Layanan Eksternal, layanan ini layak untuk dicari aws.storage (hal ini akan serupa untuk setiap layanan eksternal lainnya yang dapat diakses aplikasi).

Bukan New Relic saja: lihat Datadog dan Atatus

Berikut ini contoh dengan postgres:

Bukan New Relic saja: lihat Datadog dan Atatus

Pada dasarnya ada semua yang kami inginkan:

Bukan New Relic saja: lihat Datadog dan Atatus

Anda dapat melihat dari “layanan” mana permintaan itu berasal.

Tidak salah untuk mengingatkan Anda bahwa Datadog terintegrasi sempurna dengan NGINX Ingress dan memungkinkan Anda melakukan penelusuran ujung ke ujung sejak permintaan tiba di cluster, dan juga memungkinkan Anda menerima metrik statsd, mengumpulkan log, dan metrik host .

Nilai tambah yang besar dari Datadog adalah harganya mulai terbentuk dari pemantauan infrastruktur, APM, Manajemen Log dan pengujian Sintetis, mis. Anda dapat memilih paket Anda secara fleksibel.

2. Status

Tim Atatus mengklaim bahwa layanan mereka “sama dengan New Relic, tetapi lebih baik.” Mari kita lihat apakah ini benar.

Panel utama memang terlihat serupa, tetapi tidak mungkin untuk menentukan Redis dan memcache yang digunakan dalam aplikasi.

Bukan New Relic saja: lihat Datadog dan Atatus

APM memilih semua transaksi secara default, meskipun biasanya hanya transaksi Web yang diperlukan. Seperti Datadog, tidak ada cara untuk menavigasi ke layanan yang diinginkan dari panel utama. Selain itu, transaksi dicantumkan setelah kesalahan, yang tampaknya tidak logis bagi APM.

Dalam transaksi Atatus, semuanya semirip mungkin dengan New Relic. Kekurangannya adalah dinamika setiap pengontrol tidak langsung terlihat. Anda harus mencarinya di tabel pengontrol, mengurutkannya berdasarkan Waktu yang Paling Banyak Dikonsumsi:

Bukan New Relic saja: lihat Datadog dan Atatus

Daftar pengontrol yang biasa tersedia di tab Jelajahi:

Bukan New Relic saja: lihat Datadog dan Atatus

Dalam beberapa hal, tabel ini mengingatkan pada Datadog dan saya lebih menyukainya daripada tabel serupa di New Relic.

Anda dapat memperluas setiap transaksi dan melihat apa yang dilakukan aplikasi:

Bukan New Relic saja: lihat Datadog dan Atatus

Panelnya juga lebih mengingatkan pada Datadog: ada sejumlah permintaan, gambaran umum panggilan. Panel atas menyediakan tab kesalahan Kegagalan HTTP dan contoh kueri yang lambat Jejak Sesi:

Bukan New Relic saja: lihat Datadog dan Atatus

Jika Anda pergi ke suatu transaksi, Anda bisa melihat contoh jejak, Anda bisa mendapatkan daftar permintaan ke database dan melihat header permintaan. Semuanya mirip dengan New Relic:

Bukan New Relic saja: lihat Datadog dan Atatus

Secara umum, Atatus senang dengan jejak yang mendetail - tanpa pengeleman panggilan New Relic yang khas ke dalam blok pengingat:

Bukan New Relic saja: lihat Datadog dan Atatus
Bukan New Relic saja: lihat Datadog dan Atatus

Namun, ia tidak memiliki filter yang (seperti New Relic) akan memotong permintaan ultra-cepat (<5ms). Di sisi lain, saya menyukai tampilan respon transaksi akhir (berhasil atau salah).

Panel Database akan membantu Anda mempelajari permintaan ke database eksternal yang dibuat aplikasi. Izinkan saya mengingatkan Anda bahwa Atatus hanya menemukan PostgreSQL dan MySQL, meskipun Redis dan memcached juga terlibat dalam proyek tersebut.

Bukan New Relic saja: lihat Datadog dan Atatus

Permintaan diurutkan berdasarkan kriteria biasa: frekuensi respons, waktu respons rata-rata, dan sebagainya. Saya juga ingin menyebutkan tab dengan kueri paling lambat - ini sangat nyaman. Selain itu, data di tab ini untuk PostgreSQL bertepatan dengan data dari ekstensi pg_stat_statement - hasil luar biasa!

Bukan New Relic saja: lihat Datadog dan Atatus

tab Permintaan Eksternal sepenuhnya identik dengan Database.

Temuan

Kedua alat yang disajikan bekerja dengan baik dalam peran APM. Salah satu dari mereka dapat menawarkan jumlah minimum yang disyaratkan. Kesan kami dapat diringkas secara singkat sebagai berikut:

anjing data

Pro:

  • jadwal tarif yang nyaman (biaya APM 31 USD per host);
  • bekerja dengan baik dengan Python;
  • Kemungkinan integrasi dengan OpenTracing
  • integrasi dengan Kubernetes;
  • integrasi dengan NGINX Ingress.

Cons:

  • satu-satunya APM yang menyebabkan aplikasi tidak tersedia karena kesalahan modul (predis);
  • instrumentasi otomatis PHP yang lemah;
  • definisi layanan dan tujuannya agak aneh.

Atatus

Pro:

  • instrumentasi PHP yang mendalam;
  • antarmuka pengguna mirip dengan New Relic.

Cons:

  • tidak berfungsi pada sistem operasi lama (Ubuntu 12.05, CentOS 5);
  • instrumentasi otomatis yang lemah;
  • dukungan hanya untuk dua bahasa (Node.js dan PHP);
  • Antarmuka lambat.

Mengingat harga Atatus sebesar 69 USD per bulan per server, kami lebih suka menggunakan Datadog, yang terintegrasi dengan baik dengan kebutuhan kami (aplikasi web di K8s) dan memiliki banyak fitur berguna.

PS

Baca juga di blog kami:

Sumber: www.habr.com

Tambah komentar