Nova 구루 명상 보고서

Jmnote (토론 | 기여)님의 2024년 7월 1일 (월) 21:13 판 (새 문서: ==개요== 분류: Nova ;Guru Meditation Reports ;구루 명상 보고서 https://docs.openstack.org/nova/2024.1/reference/gmr.html ---- Nova에는 개발자와 시스템 관리...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

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의 인라인 문서를 참조하십시오.

6 같이 보기

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}