우리의 루비 에이전트는 여러 가지 공통 백그라운드 작업 프레임워크를 자동으로 제공합니다. 또한 트레이스의 모든 백그라운드 작업에 맞게 사용자 정의할 수도 있습니다. 백그라운드 작업의 데이터는 APM의 Transactions 페이지 에 Non-web transactions 로 나타납니다.
지원되는 프레임워크
다음 백그라운드 작업 프레임워크는 최신 버전의 Ruby 에이전트에서 기본적으로 지원됩니다.
- Resque 계측 (Ruby 에이전트 3.4.0)
- Sidekiq 계측 (Ruby 에이전트 3.6.0)
- 지연::작업 계측 (Ruby 에이전트 2.10)
중요
JRuby 사용자는 CPU 메트릭과 관련된 문제를 볼 수 있습니다.
이러한 프레임워크를 사용하는 경우 일반적으로 백그라운드 작업을 모니터링하는 데 추가 구성이 필요하지 않습니다.
사용자 지정 백그라운드 작업 모니터링
사용자 정의 백그라운드 작업을 사용하여 APM Transactions 페이지 에 Non-web transactions로 표시할 수 있습니다. 지원되지 않는 프레임워크를 사용하는 동안 Non-web transactions 모니터링하려면 로그 소스를 추가해야 합니다.
예를 들어 백그라운드 작업은 SalesOrganization#find_new_leads
이라는 작업을 주기적으로 실행합니다.
ControllerInstrumentation
모듈을 추가합니다.add_transaction_tracer
지시어 below 메서드 정의를 사용하세요.에이전트 트레이스가 Non-web transaction 임을 알리려면
:category => :task
추가하세요.require 'newrelic_rpm'class SalesOrganizationinclude::NewRelic::Agent::Instrumentation::ControllerInstrumentationdef find_new_leads...endadd_transaction_tracer :find_new_leads, :category => :taskend문자열을
:category
에 전달할 수 있지만 문자열이OtherTransaction/
로 시작하는 경우에만 값이 APM Transactions 페이지에 표시됩니다.
사용자 정의 백그라운드 방법 모니터링
루비 에이전트 API 사용하면 Non-web transactions를 트레이스할 특정 메소드를 지정할 수 있습니다. 이는 느리게 실행되는 작업에 대한 트레이스를 수집하고 캡처된 오류를 프로세서에 연결합니다.
클래스 메서드를 계측하려면 singleton
클래스를 사용합니다.
예를 들어 백그라운드 작업은 SalesOrganization#find_new_leads
이라는 작업을 주기적으로 실행합니다.
ControllerInstrumentation
모듈 below 메소드 정의를 추가합니다.add_transaction_tracer
지시문 사용에이전트 트레이스가 Non-web transaction 임을 알리려면
:category => :task
추가하세요.require 'newrelic_rpm'class SalesOrganizationdef self.find_new_leads...endclass << selfinclude::NewRelic::Agent::Instrumentation::ControllerInstrumentationadd_transaction_tracer :find_new_leads, :category => :taskendend자세한 내용은 Ruby 사용자 지정 측정항목 을 참조하십시오.
단기 프로세스 모니터링
에이전트가 백엔드 서버에 연결하기 전에 프로세스가 실행되고 있지 않은지 확인하십시오. 이렇게 하려면 기본 비동기 동작이 아닌 Ruby 에이전트가 New Relic에 동기적으로 연결되도록 합니다.
먼저 Gemfile에서 newrelic_rpm
gem 설치 끝에 require: false
을 추가합니다.
gem 'newrelic_rpm', require: false
그런 다음 manual_start
을 호출하고 :sync_startup => true
옵션을 전달합니다.
require 'new_relic/agent'NewRelic::Agent.manual_start(:sync_startup => true)
Note: 대부분의 설정 옵션은 수동 시작으로 전달될 수 있습니다.
require 'new_relic/agent'
를 사용하려면 에이전트의 코드가 필요하며 수동으로 시작할 때까지 에이전트가 실행되지 않도록 합니다.
프로세스가 에이전트 수집 주기 보다 짧은 경우 대기 중인 모든 데이터가 전송되도록 ::NewRelic::Agent.shutdown
을 사용하여 에이전트를 수동으로 종료해야 합니다.
백그라운드 프로세스에 대해 newrelic.yml 구성
newrelic.yml 구성은 백그라운드 애플리케이션의 컨텍스트에 따라 다릅니다.
대체 애플리케이션 이름으로 보고
기존 New Relic 웹 응용 프로그램의 컨텍스트에서 실행되는 작업을 APM UI의 다른 응용 프로그램 이름 으로 표시할 수 있습니다.
시작 before
newrelic_rpm
작업자 코드에 필요합니다.NEW_RELIC_APP_NAME
환경 변수를 백그라운드 작업자 프로세스를 시작할 때 백그라운드 작업에 사용할 애플리케이션 이름으로 설정합니다. 이는newrelic.yml
의app_name
설정을 재정의합니다.bash$NEW_RELIC_APP_NAME="My Background Jobs"$./bin/my_background_worker.rb
에이전트 시작 확인
에이전트가 블랙리스트에 있는 실행 파일 이름, 레이크 작업 이름 또는 상수를 감지하지 않는 한 대부분의 경우 Ruby 에이전트는 require 'newrelic_rpm'
하자마자 자동으로 시작됩니다. 이렇게 하면 일반적인 레이크 작업 및 대화형 콘솔 세션 중에 시작되지 않습니다.
자세한 내용은 에이전트 시작 제어 에 대한 설명서를 참조하십시오.
스크립트 모니터링
에이전트 시작 지침 은 데몬에서 백그라운드 작업을 실행할 때 적용됩니다. 스크립트가 단일 백그라운드 작업을 실행하고 종료하는 경우 스크립트가 완료되면 ::NewRelic::Agent.shutdown
를 사용하여 에이전트를 수동으로 종료합니다. 이렇게 하면 New Relic 수집기가 데이터를 수신할 수 있습니다. 예를 들어:
require 'newrelic_rpm'
class SalesOrganization include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation def find_new_leads ... end add_transaction_tracer :find_new_leads, :category => :taskend
SalesOrganization.new.find_new_leads::NewRelic::Agent.shutdown