1 개요[ | ]
- Guru Meditation Reports
- 구루 명상 보고서
https://docs.openstack.org/nova/2024.1/reference/gmr.html
Nova에는 개발자와 시스템 관리자가 실행 중인 Nova 실행파일의 상태에 대한 보고서를 생성할 수 있는 메커니즘이 포함되어 있습니다. 이 보고서는 구루 명상 보고서(Guru Meditation Report, GMR)라고 합니다.
2 GMR 생성하기[ | ]
USR2 신호를 지원되는 모든 Nova 프로세스에 보내면 GMR을 생성할 수 있습니다. 그런 다음 GMR은 해당 프로세스의 표준 오류에 출력됩니다.
예를 들어, nova-compute
의 프로세스 ID가 8675
이고, 2>/var/log/nova/nova-compute-err.log
로 실행되었다고 가정해 보겠습니다. 그러면 kill -USR2 8675
명령어를 통해 구루 명상 보고서가 /var/log/nova/nova-compute-err.log
에 출력되도록 할 수 있습니다.
Nova API는 일반적으로 uWSGI 하에서 실행되며, 이 경우 SIGUSR2
신호가 인터셉트됩니다. 이 경우 파일 트리거를 사용할 수 있습니다:
[oslo_reports]
log_dir = /var/log/nova
file_event_handler = /var/log/nova/gmr_trigger
트리거 파일이 수정될 때마다 GMR이 생성됩니다. 보고서를 얻으려면, touch /var/log/nova/gmr_trigger
명령어를 사용할 수 있습니다. Nova가 시작될 때 설정된 파일 트리거가 존재해야 합니다.
로그 디렉토리가 지정된 경우 보고서는 stderr
대신 해당 디렉토리에 파일로 작성됩니다. 보고서 파일은 ${serviceName}_gurumeditation_${timestamp}
형식으로 명명됩니다.
3 GMR의 구조[ | ]
GMR은 확장가능하도록 설계되어 있으며, 특정 실행파일은 자체 섹션을 추가할 수 있습니다. 그러나 기본 GMR은 여러 섹션으로 구성됩니다:
- 패키지(Package)
- 이 프로세스가 속한 패키지에 대한 정보, 버전 정보를 포함합니다.
- 쓰레드(Threads)
- 이 프로세스 내의 각 스레드에 대한 스택 트레이스와 스레드 ID를 표시합니다.
- 그린 쓰레드(Green Threads)
- 이 프로세스 내의 각 그린 쓰레드에 대한 스택 트레이스를 표시합니다 (그린 쓰레드에는 쓰레드 ID가 없음).
- 설정(Configuration)
- 현재 프로세스의 CONF 객체를 통해 접근 가능한 모든 설정 옵션을 나열합니다.
4 새 실행파일에 GMR 지원 추가하기[ | ]
실행파일에 GMR 지원을 추가하는 것은 비교적 간단합니다.
먼저 모듈과 Nova 버전 모듈을 가져옵니다:
from oslo_reports import guru_meditation_report as gmr
from oslo_reports import opts as gmr_opts
from nova import version
그런 다음 추가 섹션을 등록합니다 (선택사항):
gmr.TextGuruMeditation.register_section('Some Special Section',
some_section_generator)
마지막으로 (main 함수에서), 실행 파일의 "메인 루프"를 실행하기 전에 (보통 service.server(server)
또는 이와 유사한 코드), GMR 훅을 등록합니다:
gmr_opts.set_defaults(CONF)
gmr.TextGuruMeditation.setup_autorun(
version, conf=CONF, service_name=service_name)
서비스 이름은 보고서 파일을 생성할 때 사용됩니다. 지정되지 않은 경우, GMR은 스택 트레이스를 사용하여 바이너리 이름을 자동으로 감지하려고 하지만 보통 thread.py
로 끝납니다.
5 GMR 확장하기[ | ]
앞서 언급한 대로 특정 실행 파일에 대해 추가 섹션을 GMR에 추가할 수 있습니다. 자세한 내용은 oslo.reports
의 인라인 문서를 참조하십시오.