Python 에이전트 를 사용하면 구성 옵션을 사용하여 기본 에이전트 동작 에이전트를 변경할 수 있습니다.
유일한 필수 Python 에이전트 구성 설정은 입니다. 볼륨 키는 에이전트가 애플리케이션 데이터를 보고하는 계정을 식별합니다. 애플리케이션을 호스팅하는 방법에 따라 라이센스 키는 설정 파일이나 환경 변수를 통해 제공될 수 있습니다.
구성 방법 및 우선 순위
Python 에이전트를 구성하는 기본 방법은 표준 설치 프로세스 의 일부로 생성되는 구성 파일 을 사용하는 것입니다. UI에서 서버 측 구성을 사용하거나 환경 변수 를 사용하여 제한된 수의 구성 옵션을 설정할 수도 있습니다. WSGI 요청 환경 사전 을 사용하여 설정을 전달하여 요청별로 일부 설정을 지정할 수도 있습니다.
Python 에이전트는 구성에 대해 다음과 같은 우선 순위를 따릅니다.
Python 에이전트를 사용하면 요청별 옵션이 서버 측 구성을 재정의합니다. 활성화된 경우 서버 측 구성은 서버 측 값이 비어 있는 경우에도 에이전트 구성 파일의 all 해당 값을 재정의합니다. 에이전트 구성 파일은 환경 변수를 재정의합니다. 환경 변수는 에이전트 기본값을 재정의합니다.
각 구성 방법에 대한 자세한 설명은 다음과 같습니다.
일반적으로 에이전트의 호스트 시스템에 있는 로컬 구성 파일에서 Python 에이전트를 구성합니다. 다음 방법 중 하나를 사용하여 시작 시 구성 파일의 경로를 제공합니다.
NEW_RELIC_CONFIG_FILE 환경 변수를 설정합니다. newrelic-admin 래퍼 스크립트를 사용하는 경우 래퍼 스크립트가 에이전트를 자동으로 호출하므로 환경 변수를 사용해야 합니다.
에이전트는 두 가지 유형의 설정 파일을 지원합니다. 에이전트 v10.2.0 이상은 .ini 구문을 사용해야 하며, Python 버전 3.11 이상에서 실행되는 에이전트 버전 v10.3.0 이상은 .toml 파일도 지원합니다.
설정 파일은 Microsoft Windows .ini 파일과 유사한 구조를 사용합니다. 자세한 내용은 Python ConfigParser 모듈의 파일 형식 설명서를 참조하세요.
기본 구조는 다음과 같습니다.
[newrelic]
license_key=<license key>
app_name=Python Application
팁
Python 3.11부터 설정을 위한 새로운 .toml 구문이 표준 라이브러리 에 추가되었습니다. 에이전트 버전 10.3.0 이 새로운 형식을 사용할 수 있는 지원이 추가되었습니다.
설정 파일은 Tom의 Obvious Minimal Language .toml 파일을 사용합니다. 자세한 내용은 공식 파일 형식 문서를 참조하세요.
.toml 구문을 사용하려면 설정 파일 이름이 구문 유형을 나타내기 위해 .toml 로 끝나야 합니다. 표준 pyproject.toml 다른 라이브러리의 설정과 함께 사용될 수도 있고, newrelic.toml 과 같은 보다 구체적인 파일을 사용할 수도 있습니다.
기본 구조는 다음과 같습니다.
[tool.newrelic]
license_key=<license key>
app_name=Python Application
팁
샘플 구성 파일은 Python 에이전트에 newrelic/newrelic.ini 으로 포함되어 있습니다. generate-config 명령을 사용하여 newrelic-admin 스크립트에서 생성하거나 다운로드 저장소 에서 사본을 다운로드할 수도 있습니다.
서버 측 설정을 사용 하면 뉴렐릭 UI의 특정 설정을 구성할 수 있습니다. 이렇게 하면 여러 호스트에서 실행되는 경우에도 모든 에이전트에 변경 사항이 자동으로 적용됩니다. 사용 가능한 경우 이 문서에는 개별 구성 옵션 아래에 서버 측 구성에 대한 UI 레이블이 Server-side label 으로 포함되어 있습니다.
중요
서버 측 구성이 활성화된 경우 에이전트는 UI에 설정된 could 구성 파일의 모든 값을 무시합니다. UI 값이 비어 있어도 에이전트는 이를 빈 문자열로 처리하고 에이전트 구성 파일을 사용하지 않습니다.
환경 변수를 사용하면 특정 핵심 설정에 대한 기본값을 재정의할 수 있습니다. 동등한 설정이 에이전트 구성 파일에 명시적으로 나열되어 있는 경우 구성 파일 설정이 환경 변수보다 우선합니다. 사용 가능한 경우 환경 변수는 아래 개별 구성 옵션 아래에 Environ variable 으로 설명되어 있습니다.
간단한 구성의 경우 서버 측 구성 과 함께 환경 변수를 사용하고 에이전트 구성 파일을 완전히 피할 수 있습니다. 이것은 New Relic 애드온을 설치하면 필요한 환경 변수가 자동으로 채워지는 Heroku 의 기본 설정입니다.
특정 WSGI 서버의 경우 요청별로 앱 이름 을 재정의하고 속성 설정을 캡처 할 수 있습니다. 이는 요청당 WSGI 환경 사전에 전달되는 추가 키/값 쌍을 정의할 수 있는 WSGI 서버에서 가능합니다.
on , off , true , false , 1 및 0 문자열을 사용하여 이러한 값을 설정합니다. Python 코드를 사용하여 구현된 구성 메커니즘에서 설정하는 경우 True 또는 False로 평가되는 Python 객체도 허용됩니다.
Apache/mod_wsgi 서버에서 SetEnv 지시문을 사용하여 구성 설정을 재정의할 수 있습니다(선택적으로 Location 또는 Directory 블록 내부). 예를 들어 완전한 가상 호스트 또는 해당 가상 호스트에 대해 WSGI 애플리케이션에서 처리하는 URL의 하위 집합에 대해 앱 이름 을 재정의할 수 있습니다.
특정 에이전트 구성 설정을 재정의할 수 있는 것 외에도 WSGI 환경 키로 다른 요청별 구성 설정을 지정할 수 있습니다.
true 으로 설정하면 페이지 로드 타이밍에 대한 JavaScript 머리글/바닥글 자동 삽입이 비활성화됩니다(실제 사용자 모니터링 또는 RUM이라고도 함). 웹 프레임워크에 자동 삽입을 사용할 수 있는 경우에만 적용됩니다.
중요
WSGI 미들웨어를 사용하여 이러한 값을 설정하는 것은 Python 에이전트의 자체 WSGI 애플리케이션 래퍼가 외부 범위에서 적용된 경우 작동하지 않습니다. 이러한 경우 동일한 결과를 얻으려면 에이전트 API를 호출해야 합니다.
다중 환경 구성
에이전트는 ini 파일의 경우 [newrelic] , .toml 파일의 경우 [tool.newrelic] 라는 에이전트 구성 섹션에서 기본 설정을 읽습니다. 추가 섹션에서 특정 배포 환경(예: 개발, 스테이징, 프로덕션)에 대한 재정의를 제공할 수 있습니다. .ini 파일의 경우 [newrelic:environment] , .toml 파일의 경우 [tool.newrelic.env.environment] 으로 이 섹션을 시작합니다(여기서 environment 환경 이름으로 바뀝니다).
New Relic UI에서 데이터를 집계하는 데 사용되는 애플리케이션 이름 입니다. 동시에 여러 앱에 데이터를 보고하려면 세미콜론 ; 으로 구분된 이름 목록을 지정하십시오. 세미콜론 앞에 공백을 두지 마십시오. 그러면 Python 구성 파서가 이름을 포함된 주석으로 해석합니다.
로그 파일 위치 를 설정한 경우 로그 메시지의 세부 수준을 설정합니다. 이 log_level 은 Python 로깅 모듈 로그 수준에 영향을 주지 않습니다. 가능한 값은 세부정보의 오름차순으로 critical , error , warning , info 및 debug 입니다.
에이전트 문제를 보고하는 데 가장 유용한 설정은 debug 입니다. 그러나 debug 은(는) 많은 정보를 매우 빠르게 생성하므로 문제를 재현하는 데 걸리는 시간 이상으로 에이전트를 이 수준으로 유지하지 마십시오.
기본적으로 Python 에이전트는 서버에 직접 연결을 시도합니다. 호스트와 수집기 사이에 HTTP 프록시를 사용해야 하는 방화벽이 있는 경우 proxy_host 및 proxy_port 을 HTTP 프록시에 필요한 값으로 설정합니다. 프록시 인증이 HTTP 프록시에 의해 구현되는 경우 proxy_user 및 proxy_pass 도 설정합니다.
proxy_scheme 설정은 HTTP 프록시와 통신하는 데 사용되는 프로토콜 체계를 지정합니다. http 로 설정하면 에이전트는 종단 간 암호화를 위해 HTTP 프록시를 통해 SSL 터널을 사용합니다.
proxy_scheme , proxy_host 및 proxy_port 설정을 지정하는 대신 proxy_host 설정을 프록시에 대한 유효한 URI로 지정할 수도 있습니다. 체계, 호스트 및 포트를 포함합니다. 예: http://proxy-host:8000 . 이는 NEW_RELIC_PROXY_HOST 환경 변수를 사용하여 HTTP 프록시의 세부정보를 설정하는 경우에도 작동합니다.
트랜잭션 추적 프로그램이 활성화 되면 에이전트는 SQL 문을 기록할 수 있습니다. 레코더에는 off (SQL을 전송하지 않음), raw (SQL 문을 원래 형식으로 전송) 및 obfuscated (숫자 및 문자열 리터럴 제거)의 세 가지 모드가 있습니다.
대부분의 웹 프레임워크(Django 포함)는 SQL 쿼리를 매개변수화하므로 쿼리를 채우는 데 사용되는 값이 실제로 포함되지 않습니다. 이러한 프레임워크 중 하나에서 raw 모드를 사용하는 경우 Python 에이전트는 값을 삽입하기 전에 SQL만 보게 됩니다. 매개변수화된 SQL은 obfuscated 모드와 매우 유사합니다.
이 설정을 사용하여 트랜잭션 추적에 대한 모든 속성을 켜거나 끌 수 있습니다. 루트 수준의 attributes.enabled 가 false 이면 이 구성 설정( transaction_tracer.attributes.enabled )이 설정되는 방식에 관계없이 속성이 트랜잭션 추적으로 전송되지 않습니다.
이 설정을 사용하여 트랜잭션 추적 세그먼트의 모든 속성을 켜거나 끌 수 있습니다. 루트 수준의 attributes.enabled 이 false 이면 이 구성 설정( transaction_segments.attributes.enabled )이 설정되는 방식에 관계없이 트랜잭션 추적의 세그먼트에 속성이 전송되지 않습니다.
에이전트가 오류로 기록하지 않고 무시해야 하는 HTTP 상태 코드를 나열합니다. 추가 상태 코드를 공백으로 구분된 정수로 나열하고 시작 값과 끝 값 사이에 하이픈 - 구분 기호로 범위를 지정합니다. 기본 코드 중 하나를 허용 목록에 추가하려면 코드 앞에 느낌표 ! 를 붙입니다.
일부 프레임워크는 예외를 사용하여 HTTP 응답을 반환하지 않기 때문에 이 설정은 일부 웹 프레임워크와만 호환됩니다.
팁
이 구성 옵션은 Python 에이전트 버전 6.4.0 이상의 서버 측 구성에서만 설정할 수 있습니다.
APM에 오류를 보고하는 동안 지정된 HTTP 상태 코드가 오류율 또는 Apdex 점수에 영향을 미치지 않도록 합니다. 상태 코드를 공백으로 구분된 정수로 나열하고 시작 값과 끝 값 사이에 하이픈 - 구분 기호를 사용하여 범위를 지정합니다. 목록에 있는 코드 중 하나를 부정하려면 코드 앞에 느낌표 ! 를 붙입니다.
일부 프레임워크는 예외를 사용하여 HTTP 응답을 반환하지 않기 때문에 이 설정은 일부 웹 프레임워크와만 호환됩니다.
이 설정을 사용하여 추적된 오류에 대한 모든 속성을 켜거나 끌 수 있습니다. 루트 수준에서 attributes.enabled 이 false 이면 이 구성 설정( error_collector.attributes.enabled )이 설정되는 방식에 관계없이 추적된 오류에 속성이 전송되지 않습니다.
이 설정을 사용하여 브라우저 모니터링에 대한 모든 속성을 켜거나 끌 수 있습니다. 페이지 보기 이벤트로 전송되는 데이터입니다. 루트 수준에서 attributes.enabled 이 false이면 구성 설정( browser_monitoring.attributes.enabled )이 설정되는 방식에 관계없이 브라우저 모니터링에서 속성이 전송되지 않습니다.
이 설정을 사용하여 트랜잭션 이벤트의 모든 속성을 켜거나 끌 수 있습니다. 루트 수준에서 attributes.enabled 이 false 이면 이 구성 설정( transaction_events.attributes.enabled )이 설정되는 방식에 관계없이 트랜잭션 이벤트에 속성이 전송되지 않습니다.
이 설정을 사용하여 스팬 이벤트의 모든 속성 을 켜거나 끌 수 있습니다. 루트 수준의 attributes.enabled 이 false 이면 이 구성 설정( span_events.attributes.enabled )이 설정되는 방식에 관계없이 스팬 이벤트에 속성이 전송되지 않습니다. 자세한 내용은 에이전트 속성 규칙 을 참조하십시오.
이 목록에 있는 모든 속성 키는 범위 이벤트에서 전송되지 않습니다. 자세한 내용은 에이전트 속성 규칙 을 참조하십시오.
이벤트 수확 구성
이벤트 수집 설정은 New Relic으로 전송되는 이벤트 유형 데이터의 양을 제한합니다. 이러한 설정을 사용할 때 다음과 같은 중요한 사항을 고려하십시오.
이벤트 수집 설정은 전체 애플리케이션이 아니라 에이전트의 단일 인스턴스에 대한 제한에 영향을 줍니다. 전체 애플리케이션에서 제한을 설정하는 방법은 아래 사용 예를 참조하십시오.
실시간 스트리밍은 5초마다(분당 12회) 데이터를 전송하지만 이벤트 수집 설정은 여전히 minute 당 이벤트 속도에 영향을 미칩니다. 실시간 스트리밍을 활성화하거나 비활성화하기 위해 이러한 설정을 변경할 필요는 없습니다.
실시간 스트리밍(기본적으로 활성화됨)을 사용하면 New Relic은 5초 간격으로 엔터티에 대한 이벤트 수집 제한을 표시합니다. 예를 들어 구성 파일에서 제한 값을 1200으로 설정하면 New Relic에서 100으로 표시됩니다.
사용 예
애플리케이션이 10개의 호스트에 배포되고 각각 호스트당 4개의 프로세스를 실행한다고 가정해 보겠습니다. 전체 애플리케이션에 대해 스팬 이벤트 수를 분당 10,000개 이벤트로 제한하려면 해당 수를 10개의 호스트로 나눕니다. 그런 다음 호스트당 4개의 프로세스로 다시 나눕니다.
true 인 경우 에이전트는 사용 가능한 컨텍스트 데이터(추가 항목, 사전 메시지 속성, 로깅 프레임워크에서 제공하는 속성)를 캡처하고 해당 콘텐츠를 New Relic에 전달되는 로그의 속성으로 추가합니다. application_logging.forwarding.context_data 섹션 아래의 설정을 통해 이 동작을 제어할 수 있습니다.
New Relic에 분당 보낼 로그 레코드 수입니다. 이 설정은 로그 전달 기능을 사용할 때 전체 메모리 소비를 제어합니다.
전송되는 로그 라인의 양을 줄이려면 이 값을 더 낮게 설정하십시오(로그 샘플링이 발생할 수 있음). 더 많은 로그 라인을 보내려면 이 값을 더 높게 설정하십시오.
각 로그는 연결된 트랜잭션과 동일한 우선 순위를 받습니다. 트랜잭션 외부에서 발생하는 로그는 임의의 우선 순위를 받습니다. 일부 로그는 max_samples_stored 에 의해 제한되기 때문에 포함되지 않을 수 있습니다. 예를 들어, 로깅 max_samples_stored 이 10,000으로 설정되고 트랜잭션 1에 10,000개의 로그 항목이 있는 경우 트랜잭션 1에 대한 로그 항목만 기록됩니다. 트랜잭션 1에 10,000개 미만의 로그가 있는 경우 트랜잭션 1에 대한 모든 로그를 수신합니다. 여전히 공간이 있으면 트랜잭션 2에 대한 모든 로그를 받는 식입니다.
샘플링된 트랜잭션에 대한 모든 로그가 기록된 후 max_samples_stored 의 한도에 도달하지 않은 경우 샘플링에 없는 트랜잭션에 대한 로그 메시지가 전송됩니다. 남아있는 경우 트랜잭션 외부의 로그 메시지가 기록됩니다.
허용 목록에 나열된 예외는 strip_exception_messages.enabled 이 true 인 경우에도 메시지가 제거되지 않습니다. 허용 목록은 공백으로 구분된 예외 유형 문자열이며 각각 module:exception_name 형식입니다. 기본 제공 예외를 exception_name 으로 나열합니다. 앞에 module: 를 붙일 필요가 없습니다.
Example: Built-in exception and user-defined exception
기본적으로 에이전트는 첫 번째 트랜잭션(웹 또는 비웹)을 수신할 때 시작됩니다. 그런 다음 에이전트는 병렬로 시작하여 이 초기 요청이 지연되지 않도록 합니다. 그러나 에이전트는 등록이 완료될 때까지 데이터를 수집할 수 없기 때문에 이 초기 요청의 세부 정보를 기록하지 않습니다. 이것은 New Relic이 시작되는 동안 첫 번째 커플 트랜잭션을 지연시키지 않기 위해 대부분의 웹 애플리케이션에 권장되는 구성입니다.
이를 재정의하려면 시작 제한 시간을 초 단위로 설정할 수 있습니다. 그런 다음 에이전트는 초기 트랜잭션을 일시 중지하고 등록이 완료될 때까지 기다립니다. 이는 프로세스가 한 번 실행되고 즉시 종료되는 단일 프로그램 실행 또는 작업을 계측할 때 유용할 수 있습니다.
중요
startup_timeout 은 앱 시작을 지연시키므로 웹 애플리케이션이 아닌 백그라운드 작업 대기열 시스템에 대해서만 시작 시간 제한을 설정하는 것이 좋습니다.
프로세스 종료 시 에이전트는 수집기 에 대한 최종 업로드를 한 번 시도합니다. 문제 발생 시 에이전트가 무기한 실행되는 것을 방지하기 위해 shutdown_timeout 임계값에 도달하면 프로세스가 정상적으로 종료됩니다. 이 종료로 인해 데이터가 손실될 수 있지만 에이전트는 업로드 프로세스 동안 주요 메트릭 데이터의 우선 순위를 지정합니다.
백그라운드 작업 대기열 시스템, 특히 프로세스당 적은 수의 작업을 실행하는 시스템의 경우 에이전트가 프로세스 종료 시 모든 데이터를 업로드할 수 있도록 종료 시간 초과를 늘릴 수 있습니다.
팁
Apache 및 기타 많은 웹 서버에는 3.0초의 프로세스 종료 시간 초과가 있으므로 에이전트의 기본값은 2.5초입니다. 에이전트는 프로세스가 실행되도록 등록된 atexit 정리 코드를 허용하기 위해 2.5초 후에 종료됩니다.
이 설정을 활성화하면 에이전트가 시작 스크립트에서 자세한 문제 해결 메시지를 직접 콘솔(STDOUT)로 보냅니다. 이는 newrelic-admin 시작 스크립트, 대체 bootstrap/sitecustomize.py 시작 스크립트 또는 Kubernetes APM 자동 연결의 시작 시퀀스에서 충돌을 디버깅하는 데 도움이 될 수 있습니다.
주의
이 환경 변수 설정에는 해당 구성 파일 설정이 없습니다. 관련 코드는 구성 파일을 읽기 전에 실행되기 때문입니다. 에이전트 시작 후 포괄적인 디버그 로깅을 위해서는 로그 레벨을debug 으로 설정하세요.