Нацеливание New Relic на работу только на 1 (из 3) серверов приложений

Наше рельсовое приложение среднего размера работает (в производстве) на трех серверах. Мы только что закончили пробный период, используя New Relic в качестве самоцвета. В течение пробного периода мы отслеживали все три сервера, но для продолжения подписки нам нужно (и только есть бюджет) отслеживать app1.

Поэтому нам нужно отключить новую реликвию в приложениях app2 и app3. При общении с их службой поддержки мне сказали, что это возможно, и меня перенаправили на последнюю запись на этой страницы. но я не могу понять, как это помогает мне отключить отслеживание новых реликвий на двух других серверах, в частности потому, что в environment.rb нет упоминания о newrelic_rpm - в конце концов, это жемчужина, и поэтому только упоминается в Gemfile.

В newrelic.yml есть логическая опция agent_enabled, которую, как я думал, можно установить для каждого сервера отдельно, но я не знаю, как это сделать. Есть ли способ узнать, на каком сервере мы находимся в рельсах, подобно переменной RAILS_ENV?


person omnikron    schedule 14.03.2012    source источник
comment
Что вы используете для развертывания? капистрано?   -  person iltempo    schedule 14.03.2012
comment
Да, через драгоценный камень каппера. У нас в capfile есть монитор, который уведомляет о новой реликвии при деплое, в остальном все настраивается через гем и newrelic.yml   -  person omnikron    schedule 14.03.2012


Ответы (2)


Файл newrelic.yml визуализируется с помощью ERB до того, как агент прочитает значения конфигурации. Итак, вы можете сделать это:

monitor_mode: <%= 'app1' == Socket.gethostname ? 'true' : 'false' %>

Это позволит агенту сообщать New Relic только об этом одном хосте.

person rkb    schedule 16.03.2012
comment
Это было бы здорово, если бы работало, но отключило отслеживание на всех серверах, включая app1. Как/где именно происходит рендеринг ERB? - person omnikron; 16.03.2012
comment
Я тоже должен был это заметить... дурацкий HAML заставляет меня забывать о вещах! - person omnikron; 19.03.2012

Я бы предложил связывать newrelic.yml только на том сервере, где это необходимо. Чтобы это произошло, полностью удалите config/newrelic.yml из вашего репозитория и вместо этого поместите его в каталог shared на ваших серверах.

Затем свяжите этот файл только для определенной роли в capistrano снова в config/newrelic.yml. Вы можете ввести новую роль, которая содержит только ваш сервер app1.

Новый драгоценный камень реликвии является отказоустойчивым. Так что он просто отключен в этом случае.

person iltempo    schedule 14.03.2012
comment
Полное удаление config/newrelic.yml приводит к тому, что newrelic_rpm выдает ошибку при каждой загрузке, что довольно утомительно при разработке. В противном случае это было бы отличным решением. Наш текущий план состоит в том, чтобы иметь два дополнительных файла, newrelic_disabled/_enabled.yml, и перезаписывать newrelic.yml ими при развертывании. - person omnikron; 15.03.2012
comment
Вы имеете в виду предупреждение, верно? Если вы проигнорируете этот файл через git и поместите его в свою копию для разработки, вы также обойдете предупреждение. - person iltempo; 15.03.2012
comment
Да, предупреждение, а не ошибка, извините. Это крутой трюк! Я обязательно буду иметь это в виду на будущее, я всегда удивляюсь тому, что файлы могут существовать за пределами репозитория git :) В этом случае мы будем придерживаться нашего метода развертывания. чтобы избежать передачи файлов между командой старомодным способом, хотя позже это может стать головной болью. Большое спасибо за вашу помощь! - person omnikron; 16.03.2012