• EnglishEspañol日本語한국어Português
  • 로그인지금 시작하기

이 한글 문서는 사용자의 편의를 위해 기계 번역되었습니다.

영문본과 번역본이 일치하지 않는 경우 영문본이 우선합니다. 보다 자세한 내용은 이 페이지를 방문하시기 바랍니다.

문제 신고

Python 에이전트 로깅

문제

출력을 기록하도록 Python 에이전트를 구성할 수 있습니다. 이 구성을 통해 에이전트는 New Relic에 제대로 연결되고 있는지와 오류가 발생하는지 추적할 수 있습니다. 이 정보는 문제가 발생할 경우 New Relic Support에 유용합니다.

해결책

자세한 debug 로깅은 표준 Python 에이전트 설치 문제를 해결하는 데 도움이 될 수 있습니다.

중요

일부 파트너는 다른 절차를 사용합니다.

debug 로깅을 활성화하려면:

  1. 일반적으로 앱 계층 구조 내에 있는 newrelic.ini 를 엽니다.

  2. #log_file = /tmp/newrelic-python-agent.log 주석을 제거합니다. 로그 위치에 대한 쓰기 권한이 있는지 확인하고 필요한 경우 경로와 파일 이름을 변경합니다. 적절한 파일 위치가 없으면 log_filestderr 로 설정할 수 있습니다.

  3. log_level 을(에서 info 에서) debug (으)로 변경합니다.

    주의

    debug 에서의 로깅은 많은 데이터를 매우 빠르게 생성할 수 있습니다. 문제 해결을 마치면 log_level 을 다시 info 로 변경하여 로그 파일의 크기를 면밀히 모니터링하십시오.

  4. 파일을 저장하고 닫습니다. 설정을 적용하려면 앱을 다시 시작하세요.

  5. 앱에 대한 몇 분의 트래픽을 생성합니다.

  6. 로그 파일을 New Relic Support에 보내는 경우 newrelic.ini 를 지원 티켓에 첨부하고 지원팀에 귀하의 시간대를 알려주십시오.

중요

New Relic Python 에이전트의 문제를 해결할 때 디버그 수준 로그 파일을 생성하도록 구성되었는지 확인하고 로그 파일의 크기를 면밀히 모니터링하십시오. log_level = debug 을 사용하면 많은 데이터가 매우 빠르게 생성됩니다. 문제를 재현한 후 로그 파일을 log_level = info 에 반환합니다.

파일에 기록

에이전트는 Python 로깅 모듈을 사용하여 로그 메시지를 출력합니다. 따라서 에이전트의 출력은 애플리케이션의 전체 로깅 전략에 고려되어야 합니다.

로깅 모듈을 사용하지 않는 경우 에이전트는 Python 에이전트에 대한 로그 파일을 활성화하는 간소화된 방법을 제공합니다. 이를 사용하려면 에이전트 구성 파일 에서 log_filelog_level 옵션을 설정합니다.

예시:

log_file = /tmp/newrelic-python-agent.log
log_level = info

log_file 에 제공된 경로는 애플리케이션이 실행되는 사용자가 쓸 수 있어야 합니다.

Apache/mod_wsgi 을 사용하는 경우 Apache 사용자는 파일 시스템에 대한 액세스를 제한했습니다. Apache 사용자가 쓸 수 있는 로그 파일을 저장할 수 있는 특수 디렉터리를 만듭니다. 상대 경로가 아닌 절대 경로를 사용하는 것이 좋습니다.

사용된 로그 수준은 error , warning , info 또는 debug 중 하나일 수 있습니다. 일반적인 상황에서는 info 를 사용합니다. 더 자세한 디버그 옵션이 debug 에 사용됩니다. 이러한 자세한 디버그 옵션을 장기간 사용하지 마십시오. 과도한 출력을 생성할 수 있으며 로깅 모듈의 로그 파일 핸들러는 표준 파일 핸들러이며 로그 파일 회전을 수행하지 않습니다.

표준 오류에 기록

일부 호스팅 제공업체의 경우 에이전트에 대해 고유한 로그 파일을 사용하지 못할 수 있습니다. 표준 오류 출력에 기록하도록 로깅 모듈을 구성합니다. 이 출력은 호스팅 메커니즘에 대한 일반 오류 로그 파일에 캡처됩니다.

에이전트 구성 파일 내에서 이 작업을 수행하려면 다음을 실행합니다.

log_file = stderr
log_level = info

stdout 값은 stderr 대신 사용할 수도 있습니다.

모든 데이터 기록(감사 로그)

모니터링되는 프로세스와 New Relic 수집기 간에 전송되는모든 데이터 에 대한 정보를 기록하고 확인해야 하는 경우 짧은 기간 동안 감사 로깅을 활성화할 수 있습니다. 이는 디버깅이나 감사 등에서 정확히 전송되는 내용에 대한 자세한 정보가 필요할 때 유용합니다.

로그 모듈 충돌 문제 해결

로깅이 캡처되지 않으면 Python 로깅 모듈이 초기화 및/또는 구성되는 방식과 충돌이 있을 수 있습니다. 다음 기능을 사용할 때 문제가 발생할 수 있습니다.

사용 중인 웹 프레임워크 또는 애플리케이션의 문서를 참조하십시오. Python 로깅 모듈을 구성하기 위한 특수 메커니즘을 제공할 수 있습니다. 예를 들어 Django를 사용할 때 Python 로깅 모듈을 설정하는 사전 접근 방식은 자동으로 지원되며 정의는 Django 설정 모듈 내의 LOGGING 속성에 설정됩니다.

자세한 내용은 Django 로깅 구성 설명서를 참조하세요.

에이전트 로그 파일 회전

에이전트 구성에서 log_file 옵션을 사용할 때 로깅 모듈의 표준 파일 핸들러가 사용됩니다. 이것은 로그 파일 회전을 수행하지 않습니다. 어떤 종류의 회전 로그 파일 핸들러를 사용하고 싶은지 알 수 없기 때문에 로그 파일 회전이 자동으로 수행되지 않으며 Python과 함께 제공되는 표준 회전 로그 파일 핸들러가 다중 프로세스 구성에 반드시 안전한 것은 아닙니다. 따라서 타사 순환 로그 파일 처리기 중 하나를 다운로드하여 사용하거나 전용 로깅 시스템을 사용해야 할 수 있습니다.

애플리케이션이 단일 프로세스에서 실행되는 경우 로깅 모듈과 함께 제공되는 RotatingFileHandler 또는 TimedRotatingFileHandler 핸들러를 안전하게 사용할 수 있습니다. 이것을 Python 에이전트의 출력에만 사용하려면 WSGI 스크립트 파일 또는 모듈의 시작 부분에 포함하되 newrelic 모듈을 가져오기 전에 다음을 포함합니다.

_LOG_FORMAT = '%(asctime)s (%(process)d/%(threadName)s)' \
' %(name)s %(levelname)s - %(message)s'
_logger = logging.getLogger('newrelic')
_handler = logging.handlers.TimedRotatingFileHandler(
'agent.log', when='midnight', backupCount=7)
_formatter = logging.Formatter(_LOG_FORMAT)
_handler.setFormatter(_formatter)
_logger.addHandler(_handler)
_logger.setLevel(logging.INFO)

이 코드는 루트 newrelic 로거 인스턴스에 액세스하고 회전하는 로그 파일 핸들러를 연결하고 이 로그 파일로 보낼 메시지의 로그 수준을 설정합니다. 또한 로그 메시지 형식을 설정하는 방법도 보여주지만 이는 선택 사항입니다.

로깅 모듈 전체가 초기화되면 모든 로그 출력이 전파되고 표준 오류를 포함하여 루트 로거와 관련된 모든 핸들러에 의해 기록됩니다. 중복을 방지하려면 루트 로거에 대한 로그 처리기를 구성하십시오.

위의 코드는 logging.fileConfig() 함수와 구성 파일을 사용하여 단순화할 수도 있습니다. 구성 파일 사용에 대한 자세한 내용은 로깅 구성 에 대한 Python 로깅 모듈 설명서를 참조하십시오.

다중 프로세스 구성에서 로그 회전

표준 로깅 모듈에서 제공되는 순환 로그 파일 핸들러는 다중 프로세스 서버 구성에서 사용하기에 완전히 안전하지 않습니다. 발생할 수 있는 문제는 여러 프로세스의 메시지가 섞이거나 여러 프로세스가 동시에 로그 파일 회전을 시도하는 것입니다.

보다 강력한 로그 파일 회전 메커니즘을 위해 Python 로깅 모듈과 함께 타사 로그 처리기를 사용하십시오.

PyPi에서 사용할 수 있는 이러한 구현 중 하나는 다음과 같습니다.

보다 복잡한 솔루션의 경우 다음과 같은 로깅 서비스를 고려할 수도 있습니다.

또한 Python 로깅 모듈에서 표준으로 제공되는 다른 핸들러 목록을 참조하십시오. 소켓으로 전송하거나 HTTP URL에 게시하기 위한 핸들러도 일부 상황에서는 합리적인 솔루션일 수 있습니다.

Copyright © 2024 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.