Protokolldatei-Visualizer in einem Terminal (UNIX) (Terminal-Protokollierungswiedergabe)

7

Ich muss mich über ssh bei verschiedenen Servern anmelden, und es ist nützlich, das Terminal zu protokollieren (auch Dinge in Smitty-Menüs / AIX und mit korrektem / genauem Datum / Uhrzeit). Ich habe bereits eine Lösung dafür:

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

Und das funktioniert super!

Die Frage ist nun: Wie werden diese Terminalprotokollierungen wiedergegeben? Dies ist die Standardmethode:

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"

OK. Es klappt. Aber es ist nicht genug ..: Sie können nur mit der Wiedergabe der Aufnahme beginnen. Was aber, wenn Sie die Aufzeichnung nur zu einem bestimmten Zeitpunkt benötigen oder wissen müssen, wann genau ein Befehl ausgeführt wurde (Sie können dies in den Terminal-Protokolldateien + Timing-Dateien sehen, die "Skript" generiert). Oder besser: Sie benötigen eine Terminalprotokollierung für Bildungszwecke (daher müssen Sie die Wiedergabe der Aufzeichnung stoppen, um etwas davon aufzuschreiben usw.).

Für diese Wiederholungsprobleme habe ich immer noch keine guten Programme gefunden. Also sollte ich mein eigenes Programm darüber schreiben (aber ich habe nur Erfahrung mit Bash-Skripten).

Ich dachte, das Beste für diese Aufgabe wäre die Verwendung von ncurses (die Wiedergabelösung muss auf mehreren verschiedenen Betriebssystemen verwendet werden, z. B. OpenBSD, Ubuntu, Redhat). - Die Terminalprotokollierung könnte ein "Auditing-Tool" sein, um zu verfolgen, was die Benutzer über SSH getan haben.

Also denke ich darüber nach (dies ist ein Terminalfenster, z. B.: Gnome-terminal):

Modell der Benutzeroberfläche: Suche, Wiedergabetasten, Bildlaufleiste und Zeitstempel am unteren Rand des Skripts

F : Was denkt unix.stackexchange? Könnte diese Wiedergabelösung mit ncurses durchgeführt werden (oder gibt es besser-> portabler / einfacher für einen Nicht-Programmierer?)? Können Sie einige Hinweise / URLs dazu geben? (Können Flüche das tun?)

ps: ein Beispiel für die Terminal-Protokolldateien (ich habe ein Terminal geöffnet, "echo hi" eingegeben und dann das Terminal geschlossen):

[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] 

UPDATE: Ich habe ein Kopfgeld für diese Frage festgelegt. :) (oder gibt es bessere Protokollierungslösungen, die gut wiedergegeben werden können? - ty!)

gasko peter
quelle
1
Nur ein Kommentar: Vielleicht rootshkönnen Sie Ihre Ziele erreichen. Es ist einfach perfekt, um Terminalsitzungen zu protokollieren, und ich denke, es kann Ihnen auch dabei helfen, die Sitzung wiederzugeben (fügen Sie Ihrer Protokolldatei Marker / Zeitstempel hinzu). Berechnen Sie einfach das Zeitintervall dtzwischen aufeinanderfolgenden protokollierten Befehlen, warten Sie dtSekunden und setzen Sie stdin und stdout der protokollierten Sitzung auf stdout. Und natürlich können Sie dies in ein ncurses-Frontend einbetten, aber ich habe keine Ahnung davon :). Nur meine zwei Cent.
user1146332
jemand anderes plz?
Gasko Peter

Antworten:

3

AFAIK, es gibt keine Tools, die sowohl die Protokollierung als auch die Visualisierung gleich gut ausführen.

rootshund ähnliche Tools eignen sich gut für die herkömmliche Protokollierung. Da Ihre Frage die Visualisierung als wichtig erachtet und Sie sich einfach selbst protokollieren, konzentriert sich meine Antwort darauf.

TTYRec ist ein Terminal-Bildschirmaufzeichnungssystem. Es fungiert einfach als Pseudo-Terminal zwischen Ihnen und der Anwendung oder Shell.

Alles unten unterstützt das ttyrecFormat, daher sollten Sie theoretisch in der Lage sein, zu mischen und anzupassen.

Terminalaufzeichnung

  • ttyrec ist ein Bildschirmrekorder (dh ein Logger), der schon lange existiert. Es kann leicht bei der Anmeldung zu imitieren instanziert werden , wie Sie Forking scriptaus .bashrc.
  • Shelr ist ein relativ junges Projekt, das Aufzeichnung, Wiedergabe und Freigabe bietet. Es ist in Rubin geschrieben. Der Web-Player ahmt einen herkömmlichen Web-Video-Player nach (Pause, Vorwärts- / Rückwärtssuche). https://github.com/shelr
  • termrec , geschrieben in C, ttyrec alternativ. Enthält einige interessante Tools (Proxyrec) und komprimiert Aufnahmen automatisch. Probleme mit der Terminalgröße nicht 80x24.
  • ascii.io recorder in python geschrieben. Eine Website und ein Service vom Typ Shelr, alles Open Source.

Andere Spieler

  • Die Wiedergabezeit (IPBT) ist ein ausgezeichneter ttyrec- Konsolenspieler (ncurses). Unterstützt Dinge wie: Bild für Bild vorwärts und rückwärts, logarithmische Zeitkomprimierung und Suche! Es wurde auch erwähnt, dass jemand die Unterstützung für das Konvertieren in Videos patcht .
  • jsttyplay und ttyplayer (erfordert jquery) sind ttyrec- Spieler, die in Javascript geschrieben sind.

Andere Software (inkompatibles Format)

  • termdebug erweitert ttyrec, um auch die Protokollierung der Eingabe zu unterstützen .
h0tw1r3
quelle
1

Ein anderer Ansatz wäre, den GNU-Bildschirm zu verwenden und Ihre Shell anzuweisen, dem Bildschirm mitzuteilen, wo die Ausgabe vor jedem Befehl protokolliert werden soll. Zum Beispiel mit zsh (nachdem eine Bildschirmsitzung gestartet wurde):

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
}

Dann haben Sie in ~ / logs Dateien mit Befehlen und deren Ausgabe nummeriert.

Stéphane Chazelas
quelle