终端 (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):

用户界面模型:脚本底部的搜索、重播按钮、滚动条和时间戳

: 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 记录是一个终端屏幕录制系统。它只是充当伪终端您和应用程序或 shell 之间。

下面的所有内容都支持ttyrec格式,因此理论上您应该能够混合搭配以适应。

终端录音

  • 蒂雷克是一款已经存在很长时间的屏幕录像机(即记录器)。它可以在登录时轻松实例化,以模仿您script从 进行分叉的方式.bashrc
  • 谢尔是一个相对年轻的项目,提供记录、重播和分享。它是用红宝石写的。网络播放器模仿传统的网络视频播放器(暂停、向前/向后搜索)。 https://github.com/shelr
  • 特姆雷克,用C编写,ttyrec的替代品。包括一些有趣的工具(proxyrec),并自动压缩录音。非 80x24 终端尺寸的问题。
  • ascii.io用Python编写的记录器。一个 shelr 类型的网站和服务,全部开源。

其他玩家

其他软件(格式不兼容)

答案2

另一种方法是使用 GNU screen 并告诉 shell 在每个命令之前告诉 screen 在哪里记录输出。例如,使用 zsh(启动屏幕会话后):

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 中,您已使用命令及其输出对文件进行了编号。

相关内容