9

Używam Rails 5 do obsługi strony internetowej i RESTful API i używam Newrelic (newrelic_rpm gem) do monitorowania wydajności aplikacji.Jak rozróżnić połączenia Rails API w Newrelic?

W tej chwili monitor klejnotów do wszystkich wniosków o jedno nazwisko aplikacji.

powiedzmy moje trasy wyglądał:

Rails.application.routes.draw do 
    resources :users 
    namespace :api do 
    namespace :v1 do 
     resources :users, only: :index 
    end 
    end 
end 

Tutaj /users jest trasa dla aplikacji internetowych i api/users jest droga do API. Na razie, po użyciu newrelic_rpm nie będzie widać różnic między API a internetem.

Chcę utworzyć więcej separacji raportów, aby móc rejestrować żądania internetowe pod konkretną nazwą aplikacji, np. web_app, a dla interfejsu API inną nazwą api_app.

Każda pomoc?

+1

Usunąłem odpowiedź, jak się okazało, źle zrozumiałem twoje pytanie. Nie wiem, jak zgłosić się do wielu aplikacji NewRelic, chyba że używałeś wielu aplikacji railsowych, przepraszam. – BoraMa

Odpowiedz

5

Nie możesz zrobić tego, co tutaj nakreśliłeś, używając aktualnej wersji agenta New Relic. Tak nie działa agent; tak nie działa New Relic.

Masz jedną aplikację, której wykonanie należy traktować jako całość. Jeśli udało Ci się przekierować dane o skuteczności do różnych aplikacji, jak możesz zobaczyć, że problem w jednej aplikacji wpływa na drugą? Jak powiązać zdarzenia i dane, gdy znajdują się w osobnych aplikacjach?

Dokładniej, ktoś może zaatakować aplikację A i negatywnie wpłynąć na aplikację B, a to może pojawić się w danych o wydajności aplikacji A, aplikacji B lub obu. Dlatego nie jest to obsługiwane: nie umieszczasz sztucznych ścian w danych dotyczących wydajności dla pojedynczej aplikacji uruchomionej na jednym serwerze.

Skorzystaj z agenta w sposób zgodny z przeznaczeniem i użyj filtrów New Relic transactions page in APM i Web transactions analysis report, aby odfiltrować do interesujących Cię transakcji. Możesz także użyć danych Insights event explorer do filter and chart swoich Transaction.

+0

Dzięki, @anothermh, słyszę cię głośno i wyraźnie. Zgadzam się z tym, co powiedziałeś, jednak czasami ta sama aplikacja szyny może działać jak dwie oddzielne aplikacje (aplikacja internetowa i interfejs API, które mogą być używane z aplikacją mobilną). Jedynym powodem, dla którego warto wdrożyć oba serwery na tym samym serwerze, jest efektywność kosztowa. W takim przypadku przydatne może być posiadanie nazw aplikacji, ponieważ te dwie aplikacje mają inną charakterystykę (szczególnie jeśli montujemy interfejs API). –

+1

Wygląda na to, że chcesz korzyści z oddzielenia usług bez faktycznego rozdzielania usług. Powodem, dla którego nie możesz dostać tego, czego chcesz, jest to, że nie działa w ten sposób aplikacja. Istnieją dwie proste ścieżki: utwórz dwie aplikacje (a następnie dwie aplikacje w New Relic) lub utwórz jedną aplikację (i odfiltruj dane w New Relic). Istnieje wiele niemożliwych ścieżek, w tym: co opisałeś próbując zrobić. Polecam: utworzyć jedną aplikację i przefiltrować dane w New Relic, na przykład za pomocą [custom Insights events] (https://docs.newrelic.com/docs/insights/explore-data/custom-events/) – anothermh

+1

@EkiEqbal The powód, dla którego nie można traktować aplikacji jako oddzielnej: jeśli masz dwóch pracowników jednorożca, którzy zajmują 95% czasu, obsługują bardzo długo żądane aplikacje dla interfejsu API przy bardzo niskiej przepustowości i są dostępne tylko 5% czasu dla twojej sieci w aplikacji, jak odróżnić dwie aplikacje, które zgłaszają do New Relic, że Twoja aplikacja internetowa jest głodna dla pracowników? Pod każdym pozorem obsługuje zlecenia szybko i regularnie, ale nie dostaje ich zbyt często. Uważasz, że Twój interfejs API działa świetnie, a Ty uważasz, że Twoja aplikacja internetowa działa świetnie. Jeśli spojrzysz na nie jako na jedną aplikację, możesz zobaczyć problem. – anothermh