{"id":37901,"date":"2019-10-31T22:20:26","date_gmt":"2019-10-31T19:20:26","guid":{"rendered":"https:\/\/prohoster.info\/blog\/ne-new-relic-om-odnim-vzglyad-na-datadog-i-atatus\/"},"modified":"2019-10-31T22:20:26","modified_gmt":"2019-10-31T19:20:26","slug":"ne-new-relic-om-odnim-vzglyad-na-datadog-i-atatus","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/ne-new-relic-om-odnim-vzglyad-na-datadog-i-atatus","title":{"rendered":"Not just New Relic: a look at Datadog and Atatus","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/8f8e3d96daed74986ef3cbe293356302.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn the world of SRE\/DevOps engineers, it\u2019s not surprising when a client (or monitoring system) reports that \"everything is lost\": the site is down, payments are not going through, life is bleak... As much as we want to help in such situations, it can be very difficult to do so without a simple and clear tool. Often, the problem is hidden in the application code itself \u2014 we just need to localize it.<\/p>\n<h2>In sorrow and in joy\u2026<\/h2>\n<p>\nIt so happened that we have long loved New Relic. It has been and continues to be an excellent tool for monitoring application performance, as well as allowing instrumentation of microservice architecture (with its agent) and much more. Everything would be great if it weren\u2019t for the changes in the service's pricing policy: its <b>cost <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.newrelic.com\/product-news\/new-relic-new-pricing-startups\/\">has increased by over 3 times since 2013.<\/a><\/noindex> Additionally, since last year, obtaining a trial account requires communication with a personal manager, which complicates the presentation of the product to a potential client.<\/b>A common situation: New Relic is not needed on a \"permanent basis\"; it\u2019s only remembered when problems start. But regular payments are still required (140 USD per server per month), and in an automatically scaling cloud infrastructure, these amounts can add up significantly. Although there is a \"Pay-As-You-Go\" option, starting New Relic requires restarting the application, which can lead to losing the problematic situation that initiated the process. Not long ago, New Relic introduced a new pricing plan \u2014<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Essentials <noindex><a rel=\"nofollow\" href=\"https:\/\/newrelic.com\/products\/infrastructure\/pricing\">, \u2014 which at first glance seems like a reasonable alternative to Professional\u2026 but upon closer examination, it turns out that some important features are missing (specifically, it lacks<\/a><\/noindex>Key Transactions <i>Cross Application Tracing<\/i>, <i>Distributed Tracing<\/i>, <i>As a result, we began to think about finding a cheaper alternative, and our choice fell on two services: Datadog and Atatus. Why exactly them?<\/i>).<\/p>\n<p>On competitors<\/p>\n<h2>Let me clarify that there are other solutions available in the market. We even considered Open Source options, but not every client has spare resources to host self-hosted solutions... \u2014 moreover, they require additional maintenance. The pair we selected turned out to be the closest to<\/h2>\n<p>\nour needs. <b>our needs<\/b>:<\/p>\n<ul>\n<li>Built-in and advanced support for PHP applications (our clients have a very diverse stack, but this is a clear leader in the context of seeking alternatives to New Relic);<\/li>\n<li>Affordable pricing (less than 100 USD per month per host);<\/li>\n<li>Automatic instrumentation;<\/li>\n<li>Integration with Kubernetes;<\/li>\n<li>Similarity to the New Relic interface \u2014 a notable advantage (since our engineers are accustomed to it).<\/li>\n<\/ul>\n<p>\nTherefore, during the initial selection phase, we eliminated several other popular solutions, specifically:<\/p>\n<ul>\n<li> Tideways, AppDynamics, and Dynatrace \u2014 due to their cost;<\/li>\n<li> Stackify \u2014 blocked in Russia and provides too little data.<\/li>\n<\/ul>\n<p>\nThe following article is structured in such a way that the discussed solutions will be briefly presented first, after which I will share our typical interaction with New Relic as well as experiences\/impressions from performing similar operations in other services.<\/p>\n<h3>Presentation of selected competitors<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/b8960097f729d56abeb9d1b0f5931e7d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAbout <noindex><a rel=\"nofollow\" href=\"https:\/\/newrelic.com\/\"><b>New Relic<\/b><\/a><\/noindex>, probably, has been heard by everyone? This service began its development over 10 years ago, in 2008. We have been actively using it since 2012 and have not faced integration issues with a truly large number of applications in PHP, Ruby, and Python, and we also have experience integrating with C# and Go. The service authors have solutions for application monitoring, infrastructure monitoring, microservices infrastructure tracing, user-friendly applications for user devices, and much more.<\/p>\n<p>However, the New Relic agent operates on proprietary protocols and does not support OpenTracing. For extended instrumentation, modifications specifically for New Relic are required. Finally, Kubernetes support is still in an experimental status.<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/6807ed78ff3d053d0aa910dbc81f1414.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nLaunched its development in 2010, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.datadoghq.com\/\"><b>Datadog<\/b><\/a><\/noindex> is significantly more interesting than New Relic, especially regarding usage in Kubernetes environments. In particular, it supports integration with NGINX Ingress, log collection, statsd, and OpenTracing protocols, allowing tracking of user requests from connection to completion, as well as finding logs related to those requests (both on the web server side and on the consumer side).<\/p>\n<p>While using Datadog, we encountered issues where it sometimes incorrectly built the microservice map and had certain technical shortcomings. For example, it misidentified the service type (perceived Django as a caching service) and triggered 500 errors in a PHP application that used the popular Predis library.<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/dd1f3f840cd686265a1616343d832f28.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/www.atatus.com\/\"><b>Atatus<\/b><\/a><\/noindex> is the youngest tool; the service was launched in 2014. Its marketing budget clearly pales in comparison to the mentioned competitors, and mentions are significantly less frequent. Nevertheless, the tool itself is very similar to New Relic, not only in capabilities (APM, Browser monitoring, etc.) but also in appearance.<\/p>\n<p>A significant drawback is the support for only Node.js and PHP. On the other hand, it is implemented noticeably better than Datadog. Unlike the latter, Atatus does not require additional application modifications and tagging in the code.<\/p>\n<h2>How We Work with New Relic<\/h2>\n<p>\nNow let's figure out how we generally use New Relic. Suppose we have a problem that needs to be solved:<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/615f56cd69a4360f5a659d135840ad8a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIt's easy to spot <b>a spike<\/b> \u2014 let's analyze it. In New Relic for the web application, web transactions are immediately selected, the performance graph shows all components, and there are panels for error rate, request rate\u2026 The main thing is that from these panels, you can move between different parts of the application (for example, clicking on MySQL will take you to the database section).<\/p>\n<p>Since in this example we see a spike in activity <b>PHP<\/b>, let's click on this graph and automatically go to <b>Transactions<\/b>:<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/9fbbde055a88d6f63aa6dca4998f925b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThe list of transactions, which essentially serves as the controllers from the MVC model, is already sorted by <b>Most time consuming<\/b>, which is very convenient: we immediately see what the application is doing. Here, there are also examples of long requests automatically collected by New Relic. By switching the sort order, it's easy to find:<\/p>\n<ul>\n<li> the most burdened application controller;<\/li>\n<li> the most frequently requested controller;<\/li>\n<li> the slowest controller.<\/li>\n<\/ul>\n<p>\nAdditionally, you can expand each transaction and see what the application was doing at the moment of executing the code:<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/9c3136cb973a1f47729c305256ee1836.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nFinally, the application stores samples of trace logs for long requests (which take more than 2 seconds). Here is the panel for a long transaction:<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/bca8a9f1b0ccd8158eaff41067681e2a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIt is clear that two methods take a lot of time, and it also displays the time when the request was executed, its URI, and domain. This often helps to find the request in the logs. Going to <b>Trace details<\/b>, you can see where these methods are called from:<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/aef8bbd86278aa31d595aa353e6387e0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAnd in <b>Database queries<\/b> \u2014 evaluate the database queries that were executed while the application was running:<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/40d942b57b87237f378dc617676f00fc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEquipped with this knowledge, we can assess the cause of the application's slowdown and develop a resolution strategy together with the developer. In reality, New Relic doesn\u2019t always provide a clear picture; however, it helps to select the investigation direction:<\/p>\n<ul>\n<li> long <code>PDO::Construct<\/code> led us to the strange functioning of pgpoll;<\/li>\n<li> instability over time <code>Memcache::Get<\/code> hinted at an incorrect virtual machine configuration;<\/li>\n<li> the suspiciously increased template processing time led to a nested loop checking for the presence of 500 avatars in the object storage;<\/li>\n<li> and so on\u2026<\/li>\n<\/ul>\n<p>\nSometimes, instead of executing code on the main screen, something related to external data storage appears \u2014 and it doesn\u2019t matter whether it\u2019s Redis or PostgreSQL \u2014 they all hide in the tab <b>Databases<\/b>.<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/5ff39a5a6e02be329e3c40d54c3b4a1d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nYou can select a specific database for investigation and sort the queries, similar to how it is done in Transactions. By switching to the query tab, you can see how often this query appears in each of the application\u2019s controllers as well as assess how frequently it is called. This is very convenient:<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/92b3bca78f0aa0f27e5700cd6fe283fe.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThe same data is contained in the tab <b>External Services<\/b>, which conceals requests to external HTTP services, such as accessing object storage, sending events to Sentry, or similar. The content of this tab is completely analogous to Databases:<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/417d6ed0d5fb266e1a338d8277278000.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Competitors: Features and Impressions<\/h2>\n<p>\nNow for the interesting part \u2014 let\u2019s compare New Relic\u2019s capabilities with what competitors offer. Unfortunately, we couldn\u2019t test all three tools on one version of a production application. Nevertheless, we tried to compare as identical situations\/configurations as possible.<\/p>\n<h3>1. Datadog<\/h3>\n<p>\nDatadog greets us with a dashboard featuring a service wall:<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/fa4eb4ba2349b900d5c04238552e5329.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIt attempts to break applications down into components\/microservices, so in the provided example of the Django application, we\u2019ll see 2 connections to PostgreSQL (<code>defaultdb<\/code> and <code>postgres<\/code>), as well as Celery and Redis. Working with Datadog requires minimal understanding of MVC principles: you need to know where user requests actually come to. Usually, this is aided by a <b>service map<\/b>:<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/2f5f7c9ce171af671a65fb41401451e5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBy the way, there\u2019s something similar in New Relic:<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/b4e14f15b900f5c19856f1077873c9c0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n... in my opinion, their map is simpler and clearer: it displays not the components of a single application (which would make it overly detailed, as in the case of Datadog), but only specific services or microservices.<\/p>\n<p>Returning to Datadog: from the service map, it's clear that user requests are coming into Django. Let's move to the Django service and finally see what we expected:<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/fe907532184004ec02238ccd5e7d0ce6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUnfortunately, by default, there's no graph here <b>Web transaction time<\/b>, similar to what we see on the main dashboard of New Relic. However, it can be configured in place of the graph <b>% of Time spent<\/b>. It's enough to switch it to <b>Avg time per request by Type<\/b>... and now a familiar graph is looking back at us!<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/4576b27658d257fa5b062ffc7bb5464a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWhy Datadog preferred a different graph is a mystery to us. We were also disappointed that the system does not remember the user's choice (unlike both competitors), thus\u2014only creating custom dashboards can save the day.<\/p>\n<p>However, we were pleased with the ability in Datadog to move from these graphs to metrics of related servers, read logs, and assess the load on the web server handlers (Gunicorn). It's almost like New Relic... and even a bit more (logs)!<\/p>\n<p>Below the graphs are transactions, fully analogous to New Relic:<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/3ab831fce57abe39e27bea12b6eb0f67.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn Datadog, transactions are called <b>resources<\/b>. Controllers can be sorted by the number of requests, average response time, and maximum time spent over a selected period. <\/p>\n<p>A resource can be expanded to reveal everything we've already observed in New Relic:<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/8005dfb15d878c6025d745982114cc02.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBoth resource statistics and a summary list of internal calls are available, along with request examples that can be sorted by response code... By the way, our engineers really liked this sorting.<\/p>\n<p>Any resource example in Datadog can be opened and examined:<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/0e98c9c3924bd248d048b8587f19f922.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIt presents request parameters, a summary chart of time spent on each component, and a waterfall chart showing the sequence of calls. There's also the option to switch to a tree view of the waterfall chart:<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/c1d12e79d5c170bb88d9261267756fb8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAnd most interestingly\u2014a view of the host load on which the request was executed, as well as the request logs. <\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/849a299b05596eb6ba4906c7f3851de0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nGreat integration!<\/p>\n<p>One might wonder where the tabs <b>Databases<\/b> and <b>External Services<\/b>, like in New Relic. They are absent here: since Datadog dissects the application into components, PostgreSQL will be considered <b>a separate service<\/b>, and instead of External Services, you should look for <code>aws.storage<\/code> (the same will apply to any other external service that the application may interact with).<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/7a2585778478cdd7abab2e31c1858e68.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHere\u2019s an example with <code>postgres<\/code>:<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/76710537a8c7f436d207ef52efb50214.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEssentially, it has everything we wanted:<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/152e882d964bd5c77aef69f9c140f350.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIt shows which 'service' the request came from. <\/p>\n<p>It\u2019s worth reminding that Datadog integrates well with NGINX Ingress and allows for end-to-end tracing from the moment a request enters the cluster, as well as the collection of statsd metrics, logs, and host metrics.<\/p>\n<p>A huge advantage of Datadog is that its pricing <i>is made up of<\/i> infrastructure monitoring, APM, Log Management, and Synthetics test, which means you can flexibly choose a plan.<\/p>\n<h3>2. Atatus<\/h3>\n<p>\nThe Atatus team claims that their service is 'just like New Relic, but better'. Let's see if that\u2019s really the case.<\/p>\n<p>The header panel indeed looks similar, but it wasn't possible to identify the Redis and memcached used in the application.<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/1b2271bf779f93d4696b8f5fb90c548b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAPM by default selects all transactions, although usually only Web transactions are needed. As in Datadog, there\u2019s no way to switch to the desired service from the main panel. Moreover, transactions are listed after errors, which doesn\u2019t seem very logical for APM.<\/p>\n<p>In Atatus transactions are very similar to New Relic. A drawback is that the dynamics for each controller isn't immediately visible. You have to search for it in the controllers table, sorting by <b>Most Time Consumed<\/b>:<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/57a1640dc1c99732e5d008051ea08f4a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThe familiar list of controllers is available in the <b>Explore<\/b>:<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/9f77e8af1b19460a490f6d57f57c7902.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThis table somewhat resembles Datadog and is preferable to the similar one in New Relic.<\/p>\n<p>Each transaction can be expanded to see what the application was doing:<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/7a74af09bc90449557a797b7898aa827.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThe panel also resembles Datadog: it displays the number of requests and an overview of calls. The top panel provides a tab for errors. <b>HTTP Failures<\/b> and examples of slow requests. <b>Session Traces<\/b>:<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/d528b528b14e3e0ba0550296a07d27db.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIf you navigate to a transaction, you can see a trace example, get a list of database requests, and view the request headers. Everything is similar to New Relic:<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/297cee55b9b32383c607eb6860ffe20e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn general, Atatus impressed with detailed traces \u2014 without the typical New Relic call glueing seen in the reminder block.<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/eb40bb051d7a5435072b96cd659bfebf.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/0232a197ee2d28489fcf86c4921f7080.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHowever, it lacks a filter that (like in New Relic) would exclude super-fast requests (&lt;5 ms). On the other hand, the display of the transaction\u2019s final response (successful or error) was appreciated.<\/p>\n<p>The panel <b>Databases<\/b> will help study external database requests made by the application. I remind you that Atatus only found PostgreSQL and MySQL, although Redis and memcached are also utilized in the project.<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/01bd3b1f4e5f25bb86e9aa79a22588c0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nRequests are sorted by familiar criteria: frequency of triggering, average response time, and so on. It's worth mentioning the tab for the slowest requests \u2014 this is very convenient. Moreover, the data in this tab for PostgreSQL matched the data from the extension. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/11\/pgstatstatements.html\">pg_stat_statements<\/a><\/noindex> \u2014 an excellent result!<\/p>\n<p><img decoding=\"async\" alt=\"Not just New Relic: a look at Datadog and Atatus\" src=\"\/wp-content\/uploads\/2019\/09\/128b3eb7ac1e636e47d4a66a292ca872.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTab <b>External Requests<\/b> is completely identical to Databases.<\/p>\n<h2>Conclusions<\/h2>\n<p>\nBoth of the presented tools performed decently as APM. Either can offer the necessary minimum. To summarize our impressions briefly:<\/p>\n<h3>Datadog<\/h3>\n<p>\nPros:<\/p>\n<ul>\n<li> a convenient pricing grid (APM costs 31 USD per host);<\/li>\n<li> performed excellently with Python;<\/li>\n<li> integration with OpenTracing<\/li>\n<li> Integration with Kubernetes;<\/li>\n<li> integration with NGINX Ingress.<\/li>\n<\/ul>\n<p>\nCons:<\/p>\n<ul>\n<li> the only APM that caused application unavailability due to a module error (predis);<\/li>\n<li> weak auto-instrumentation for PHP;<\/li>\n<li> somewhat strange definitions of services and their purposes.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Atatus<\/h3>\n<p>\nPros:<\/p>\n<ul>\n<li> deep instrumentation for PHP;<\/li>\n<li> similar user interface to New Relic.<\/li>\n<\/ul>\n<p>\nCons:<\/p>\n<ul>\n<li> does not work on older operating systems (Ubuntu 12.05, CentOS 5);<\/li>\n<li> weak auto-instrumentation;<\/li>\n<li> supports only two programming languages (Node.js and PHP);<\/li>\n<li> slow interface performance.<\/li>\n<\/ul>\n<p>\nConsidering Atatus's price of 69 USD per month per server, we would rather use Datadog, which integrates excellently with our needs (web applications in K8s) and offers many useful features.<\/p>\n<h2>P.S.<\/h2>\n<p>\nAlso read in our blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/462707\/\">Tools for application developers running in Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/436112\/\">The kubectl-debug plugin for debugging in Kubernetes pods.<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/424531\/\">Microservices: Size Matters, Even If You Have Kubernetes<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/465177\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u0441\u0440\u0435\u0434\u0435 SRE-\/DevOps-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u043d\u0438\u043a\u043e\u0433\u043e \u043d\u0435 \u0443\u0434\u0438\u0432\u0438\u0448\u044c, \u0447\u0442\u043e \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043b\u0438\u0435\u043d\u0442 (\u0438\u043b\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430) \u0438 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442, \u0447\u0442\u043e \u00ab\u0432\u0441\u0451 \u043f\u0440\u043e\u043f\u0430\u043b\u043e\u00bb: \u0441\u0430\u0439\u0442 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043e\u043f\u043b\u0430\u0442\u044b \u043d\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442, \u0436\u0438\u0437\u043d\u044c \u2014 \u0442\u043b\u0435\u043d\u2026 \u041a\u0430\u043a \u0431\u044b \u043d\u0438 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u043e\u043c\u043e\u0447\u044c \u0432 \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0431\u0435\u0437 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0431\u044b\u0432\u0430\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e. \u0417\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441\u043a\u0440\u044b\u0442\u0430 \u0432 \u043a\u043e\u0434\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u2014 \u043d\u0443\u0436\u043d\u043e \u043b\u0438\u0448\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28443,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37901","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u0441\u0440\u0435\u0434\u0435 SRE-\/DevOps-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u043d\u0438\u043a\u043e\u0433\u043e \u043d\u0435.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/ne-new-relic-om-odnim-vzglyad-na-datadog-i-atatus\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041d\u0435 New Relic\u2019\u043e\u043c \u043e\u0434\u043d\u0438\u043c: \u0432\u0437\u0433\u043b\u044f\u0434 \u043d\u0430 Datadog \u0438 Atatus | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u0441\u0440\u0435\u0434\u0435 SRE-\/DevOps-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u043d\u0438\u043a\u043e\u0433\u043e \u043d\u0435.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/ne-new-relic-om-odnim-vzglyad-na-datadog-i-atatus\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:20:26+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:20:26+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Not just New Relic: a look at Datadog and Atatus | ProHoster","description":"Nobody in the SRE\/DevOps engineering environment.","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/ne-new-relic-om-odnim-vzglyad-na-datadog-i-atatus","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041d\u0435 New Relic\u2019\u043e\u043c \u043e\u0434\u043d\u0438\u043c: \u0432\u0437\u0433\u043b\u044f\u0434 \u043d\u0430 Datadog \u0438 Atatus | ProHoster","og:description":"\u0412 \u0441\u0440\u0435\u0434\u0435 SRE-\/DevOps-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u043d\u0438\u043a\u043e\u0433\u043e \u043d\u0435.","og:url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/ne-new-relic-om-odnim-vzglyad-na-datadog-i-atatus","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:20:26+00:00","article:modified_time":"2019-10-31T19:20:26+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37901","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 19:41:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 18:39:28","updated":"2026-01-23 19:41:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/37901","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/comments?post=37901"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/37901\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media\/28443"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=37901"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=37901"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=37901"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}