문제
루비 에이전트가 시작되지 않거나 뉴렐릭에 데이터를 보고하지 않습니다.
해결책
이 문제를 해결하려면:
Ruby 에이전트 버전 을 확인하고 필요한 경우 업데이트하십시오.
애플리케이션 환경에 newrelic_rpm
Ruby gem이 필요한 경우 자동으로 모니터링을 시작하고 New Relic으로 측정항목 전송을 시작할지 아니면 비활성화된 상태로 유지할지 결정합니다.
프로덕션 및 스테이징: 에이전트는 일반적으로 이러한 환경에서 자동으로 모니터링하도록 구성됩니다.
테스트 및 개발: 에이전트는 일반적으로 이러한 환경에서 비활성화된 상태로 유지됩니다.
이 논리를 제어하려면
newrelic.yml
의 각 환경 섹션에서monitor_mode
구성 키를true
또는false
로 설정합니다.
에이전트의 자동 시작 논리를 재정의하는 가장 쉬운 메커니즘은 NEW_RELIC_AGENT_ENABLED=true
환경 변수를 설정하는 것입니다. 예를 들어:
NEW_RELIC_AGENT_ENABLED=true rake assets:precompile
Ruby 에이전트 버전 3.6.1 이상을 실행하는 경우 에이전트가 시작을 거부하는 몇 가지 이유가 있습니다.
에이전트가 대화형 세션에 있음을 감지합니다. 예:
rails console
또는irb
세션.에이전트는 Rails의 내장 레이크 작업 중 하나에 있음을 감지합니다. 예:
assets:precompile
또는db:migrate
.Ruby 에이전트
newrelic.yml
파일의 구성 변수를 사용하여 상수, 스크립트 이름 및 레이크 작업에 대한 자동 시작 동작을 사용자 지정할 수 있습니다.Variable
Description
상수
- 에이전트가 시작되지 않도록 해야 하는 Ruby 상수입니다. 쉼표로 구분된 목록을 허용합니다.
- 기본값은
"Rails::Console"
입니다. Rails::Console
이 환경에 있을 때 에이전트를 시작하도록 지시하려면""
으로 설정합니다.
레이크 작업
- 에이전트가 모니터링하지 않을 작업을 긁어모으십시오. 예:
assets:precompile
. 쉼표로 구분된 목록을 허용합니다. - 일반적으로
resque:work
과 같은 작업이 모니터링되기 때문에 모든 레이크 작업에서 Ruby 에이전트를 비활성화하지 않습니다.
실행 파일
- 에이전트가 자동으로 시작되지 않도록 하는 스크립트 이름(예:
irb
)의 목록입니다. 쉼표로 구분된 목록을 허용합니다. - 에이전트가 rake 작업에서 시작되지 않도록 하려면 이것을
"rake"
으로 설정하고, rake 및 사용자 정의 스크립트에서 시작하지 않도록 하려면"rake,my_ruby_script.rb"
로 설정하십시오.
문제
루비 에이전트는 시작하고 싶지 않은 상황에서 시작됩니다.
해결책
루비 에이전트는 대부분의 고객이 에이전트가 자동으로 시작되기를 원하는 컨텍스트에 대해 몇 가지 가정을 합니다.
이 동작을 사용자 정의하는 데 사용할 수 있는 세 가지 설정 옵션이 있습니다.
autostart.denylisted_constants
이 목록에 있는 대부분의 상수는 모니터링을 통해 거의 이점을 얻지 못하는 작업을 수행하는 Rails 명령입니다.목록에는
rails db:*
및rails solid_queue:start
같은 명령과 Rake 작업과 관련된 기타 Rails 명령을 지원하는Rails::Command::RakeCommand
가 포함되어 있지 않습니다.autostart.denylisted_executables
이 설정은rspec
및irb
같은 실행 파일을 제어합니다.autostart.denylisted_rake_tasks
Rails 5.1 이전에는db:migrate
과 같은 많은 명령에 대해thor
대신rake
가 사용되었습니다. 이 설정의 기본값에는 당시의 많은 명령이 나열되어 있습니다. 이 목록에 자신만의rake
명령을 추가할 수도 있습니다.
NewRelic::Agent.manual_start
API를 사용하여 특정 컨텍스트에서 에이전트를 시작할 수 있습니다. 구성 파일에서 :agent_enabled
false
로 설정하거나 환경 변수를 NEW_RELIC_AGENT_ENABLED=false
설정한 경우에도 이 API를 사용하여 에이전트를 수동으로 시작할 수 있습니다.
NewRelic::Agent.manual_start(agent_enabled: true)
프로세스가 끝나기 전에 에이전트를 중지하려면 NewRelic::Agent.shutdown
호출하면 됩니다.