터미널(UNIX)의 로그 파일 시각화 도구(터미널 로깅 재생)

터미널(UNIX)의 로그 파일 시각화 도구(터미널 로깅 재생)

SSH를 통해 다양한 서버에 로그인해야 하며 터미널에 로그인하는 것이 훌륭하게 작동합니다(정확하고 정확한 날짜/시간이 있는 smitty 메뉴/AIX의 항목도 포함). 이미 해결책이 있습니다.

0)
# with root:
apt-get install bsdutils

# with the given user:
mkdir ~/logs

1)
# append this to you're "~/.bashrc" - this must be the last line!!
STARTTIME=`date +%F-%Hh-%Mm-%Ss-%N`; script -q -t 2> /home/USERNAMEHERE/logs/$STARTTIME-timing.txt -c 'bash --rcfile /home/USERNAMEHERE/.bashrc-cp' -f /home/USERNAMEHERE/logs/$STARTTIME-log.txt; exit 0

2)
# make sure the 1) is the last line of bashrc, then [this is needed to avoid "fork bomb"..]:
sed -e '$d' /home/USERNAMEHERE/.bashrc > /home/USERNAMEHERE/.bashrc-cp

정말 좋아요!

이제 문제는 이러한 터미널 로그 기록을 어떻게 재생하느냐 하는 것입니다. 이를 수행하는 기본 방법은 다음과 같습니다.

REPLAY:
# rename the filenames to you're needs! - you can only play 1 file at one time..
scriptreplay "/home/USERNAMEHERE/logs/$STARTTIME-timing.txt" "/home/USERNAMEHERE/logs/$STARTTIME-log.txt"

좋아요 효과가있다. 하지만 그것만으로는 충분하지 않습니다...: 녹음 재생만 시작할 수 있습니다. 하지만 특정 시간 동안만 로깅이 필요하거나 명령의 정확한 실행 시간을 알아야 하는 경우(터미널 로그 파일 + "스크립트"에 의해 생성된 타이밍 파일에서 확인할 수 있음)? 또는 더 나은 방법은 교육 목적으로 터미널 로깅이 필요하다는 것입니다(따라서 녹음 내용을 기록하려면 녹음 재생을 중지해야 합니다).

나는 이러한 재생 문제에 대한 좋은 해결책을 찾지 못했습니다. 그래서 나는 이것을 위해 내 자신의 프로그램을 작성해야 한다고 생각했습니다(그러나 나는 bash 스크립팅 경험만 있습니다).

내 생각에 이 작업을 위한 가장 좋은 방법은 ncurses를 사용하는 것입니다(재생 솔루션은 OpenBSD, Ubuntu, Redhat 등 여러 운영 체제에 필요함). - 터미널 로깅은 SSH를 통해 사용자가 수행하는 작업을 추적하기 위한 "감사 도구"가 될 수 있습니다.

그래서 저는 이것에 대해 생각하고 있습니다(이것은 터미널 창입니다, 예: gnome-terminal):

UI 모형: 스크립트 하단의 검색, 재생 버튼, 스크롤 막대 및 타임스탬프

묻다: unix.stackexchange에 대해 어떻게 생각하시나요? 이 재생 솔루션을 사용할 수 있습니다저주(아니면 프로그래머가 아닌 사람들에게 더 나은 이식성/더 쉬운 것이 있습니까?) 이를 수행하는 방법에 대한 몇 가지 팁/URL을 제공할 수 있습니까? (ncurses가 이것을 할 수 있나요?)

ps: 터미널 로그 파일의 예(터미널을 열고 "echo hi"를 입력한 다음 터미널을 닫습니다):

[USER@HOST ~/logs] cat -vte 2012-09-14-12h-46m-27s-509330863-log.txt 
Script started on Fri 14 Sep 2012 12:46:27 PM CEST$
^[[0;32m[USER@HOST ~]^[[m echo hi^M$
hi^M$
^[[0;32m[USER@HOST ~]^[[m [USER@HOST ~/logs] 
[USER@HOST ~/logs] 
[USER@HOST ~/logs] cat -vte 2012-09-14-12h-46m-27s-509330863-timing.txt 
0.512822 29$
0.179438 1$
0.925494 1$
0.254477 1$
0.065499 1$
0.075037 1$
0.139497 1$
0.136499 1$
0.039944 35$
[USER@HOST ~/logs] 

업데이트: 이 문제에 대해 현상금을 설정했습니다. :) (아니면 잘 재생될 수 있는 더 나은 로깅 솔루션이 있습니까? - ty!)

답변1

AFAIK, 어떤 도구도 로깅과 시각화를 똑같이 잘 수행하지 않습니다.

rootsh유사한 도구는 기존 로깅에 적합합니다. 귀하의 질문은 시각화가 중요하다고 생각하고 단순히 자신을 문서화하는 것이므로 이것이 내 대답의 요점입니다.

TTY 레코드단말기 화면 녹화 시스템입니다. 그것은 단지 다음과 같이 작동합니다.의사 터미널귀하와 애플리케이션 또는 셸 사이.

아래의 모든 항목은 형식을 지원하므로 ttyrec이론적으로는 적합하게 혼합하여 사용할 수 있어야 합니다.

터미널 녹화

  • 티렉오랫동안 사용되어 온 스크린 레코더(예: 레코더)입니다. script에서 포크하는 방법을 모방하기 위해 로그인 시 쉽게 인스턴스화할 수 있습니다 .bashrc.
  • 셰르녹음, 재생 및 공유를 제공하는 비교적 젊은 프로젝트입니다. 루비로 쓰여 있습니다. 웹 플레이어는 기존 웹 비디오 플레이어(일시 중지, 앞으로/뒤로 검색)를 모방합니다. https://github.com/shelr
  • 템렉, C로 작성되었으며 ttyrec을 대체합니다. 몇 가지 흥미로운 도구(proxyrec)가 포함되어 있으며 녹음 내용을 자동으로 압축합니다. 80x24가 아닌 터미널 크기 관련 문제.
  • ascii.ioPython으로 작성된 로거. 쉘러형 웹사이트와 서비스, 모두 오픈소스입니다.

다른 플레이어

기타 소프트웨어(호환되지 않는 형식)

답변2

또 다른 접근 방식은 GNU 스크린을 사용하고 각 명령 앞에 쉘에 출력을 기록할 위치를 스크린에 알려주는 것입니다. 예를 들어, zsh를 사용하면(screen 세션을 시작한 후):

preexec() {
  ((cmd++))
  { 
    date +%F-%T
    print -r -- "$3"
  } > ~/logs/$cmd
  screen -X msgminwait 0
  screen -X log off
  screen -X logfile ~/logs/$cmd
  screen -X log on
  screen -X msgminwait 3
}

그런 다음 ~/logs에서 명령과 출력을 사용하여 파일 번호를 매겼습니다.

관련 정보