Файл журнала visualizer в Терминале (UNIX) (терминальное воспроизведение входа)

Вращение журналов прежде, чем проанализировать их походит на хорошую идею действительно, пока Ваши приложения не сохраняют файл журнала открытым постоянно. Если они делают, поворачивая их работа привычки - но так как Вы пишете платформу журналирования, можно иметь дело с этим.

Если Вы хотите простую вещь в виде сценария, Вы могли бы использовать что-то как следующее (мог быть выполнен в значительной степени любой язык сценариев):

#! /bin/bash

process_line() {
    # do the work here
    echo "== $1 =="
}

logfile=$1
statefile=${logfile}.state

if [ -f ${statefile} ] ; then
    processed=$(cat $statefile)
else
    processed=0
fi

curline=0
IFS='
'

while read line ; do
    if [ $curline -ge $processed ] ; then
        echo processing $line
        process_line "$line"
    fi
    curline=$(($curline+1))
done < ${logfile}

echo $curline > $statefile

В основном это копит туда, где это обработало вход в отдельном файле ($statefile), и процессы вход линию за линией от той точки (пропускающий уже обработанные).

Этому было бы нужно немного больше обработки ошибок, очевидно, и если вход является большим, это не оптимально. (Мог быть сделан лучше путем сохранения байтового смещения и поиска или использования dd bs=1 skip=$already_read count=$(($size-$already_read)) для передачи по каналу к другому процессу вместо того, чтобы делать вещи линию за линией но я пошел бы с perl если такая оптимизация необходима.)

Как это, сценарий будет производственные линейки дважды, если это будет прервано. Можно ограничить сумму "воспроизведения" путем обновления файла состояния после каждой строки, а не однажды в конце.

Если Вы оба обработаете журналы и повернете их, то необходимо будет быть осторожными с теми файлами состояния. Они должны были бы быть повернуты также, и скрипт, запущенный однажды после вращения для обработки последних строк вывода.

Существует одна вещь, с которой не имеет дело этот подход легко: частичные строки. Если приложение пишет, в то время как сценарий работает, существует шанс, что сценарий будет видеть частичную последнюю строку. Это не сможет сказать различие, таким образом, это запишет его как обработанный. (Это - проблема, с которой необходимо будет иметь дело с в значительной степени любым подходом.)

Этого можно было избежать при наличии маркера EOL в Вашем формате файла журнала и проверки это прежде, чем обработать строку. Но это не очень симпатично.

Вместо того, чтобы выполнять в обработке bash в самом сценарии Вы могли использовать его как это (замена process_line с плоскостью echo):

$ ./logger /var/log/app12.log | ./analyzer --logtype=app12

./analyzer получит данные, как введено.

7
14.04.2015, 17:07
2 ответа

AFAIK, нет никаких инструментов, которые делают и вход и визуализацию одинаково хорошо.

rootsh и подобные инструменты являются подходящим вариантом для традиционного входа. Так как Ваш вопрос рассматривает визуализацию как важную, и Вы просто регистрируете себя - это - то, на чем фокусируется мой ответ.

TTYRec является терминальной экранной системой записи. Это просто действует как псевдотерминал между Вами и приложением или оболочкой.

Все ниже поддержек ttyrec формат, таким образом, в теории необходимо смочь к смешиванию и подгонке подойти.

Терминальная запись

  • ttyrec является устройством записи экрана (т.е. регистратор), который был около долгого времени. Это можно легко инстанцировать при входе в систему, чтобы подражать, как Вы разветвляетесь script от .bashrc.
  • shelr является относительно молодым проектом, который обеспечивает запись, воспроизведение и долю. Это записано в рубине. Веб-плеер подражает традиционному плееру интернет-видео (пауза, ищите вперед/назад). https://github.com/shelr
  • termrec, записанный в C, ttyrec альтернатива. Включает некоторые интересные инструменты (proxyrec) и автоматические записи сжатий. Проблемы с non-80x24 терминальным размером.
  • устройство записи ascii.io записано в Python. shelr вводит сайт и сервис, весь открытый исходный код.

Другие плееры

Другое программное обеспечение (несовместимый формат)

  • termdebug подробно останавливается на ttyrec для поддержки входа входа также.
3
27.01.2020, 20:19

Другой подход должен был бы использовать экран GNU и сказать Вашей оболочке говорить экран, где зарегистрировать вывод перед каждой командой. Например, с 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
}

Затем в ~ / журналы, Вы пронумеровали файлы с командами и их выводом.

1
27.01.2020, 20:19

Теги

Похожие вопросы