xtrace
출력을 다음과 같이 리디렉션 할 수 있다는 것을 알고 있습니다 some_file
.
exec 2 >> some_file
set +x
...그러나 이것은 출력 some_file
으로 전송될 뿐만 아니라 원래 전송된 다른 모든 것에도 전송됩니다. 여기에는 대부분의 오류 메시지와 경고가 포함되며 모두 관련이 없습니다 .xtrace
fd 2
xtrace
캡쳐할 방법 없을까요오직출력은 xtrace
어디에 있습니까 some_file
?
xtrace
출력 자체와 설정을 통해 수집된 타이밍 정보를 가능한 한 적게 왜곡하는 방법을 찾고 있다는 점을 덧붙여야 합니다 PS4
.
zmodload zsh/datetime
export PS4='${(j::)epochtime} %N:%i> '
답변1
아마도 당신이 찾고 있는 솔루션은 아닐 것입니다. 그러나 과거에 비슷한 상황이 발생했기 때문에 제가 가장 먼저 선택한 것은 추적 파일을 가져와 관심 있는 데이터만 결과 파일에 출력하는 Python 파서를 작성하는 것이었습니다. 신경쓰지 않는 "쓰레기 텍스트"의 패턴을 xtrace 출력에서 예측/구별할 수 있는 한 구문 분석은 꽤 쉽게 수행할 수 있습니다.
예 - 모든 커밋 대기열의 모든 IO 추적을 파악하고 40GB~70GB 파일에서 결과를 읽고 쓰는 20분 테스트를 수행하지만 관심 있는 데이터를 구문 분석한 후 결과 파일의 크기는 ~1~3GB에 불과하고 실제로 분석 및 시각화에 사용할 수 있습니다. 물론 이렇게 큰 파일 크기로 인해 서버급 시스템은 모든 것을 처리하는 데 약 15~30분이 걸리지만 동일한 프로세스를 수행하면(별도의 시나리오, 동일한 아이디어 - 여러 로그, 각각 ~24kb에 불과) 모든 것을 얻을 수 있습니다. 2초 안에 모든 로그의 데이터를 단일 사용 가능 파일에 저장합니다.
전체적으로 원스톱 상점을 기다리는 것보다 전체 캡처에 몇 초/분을 추가할 수 있는 후처리 단계를 추가하는 것이 가치가 있을 수 있습니다.
행운을 빌어요!