Был бы работать, чтобы фильтровать файл журнала на основе ключевых слов, дат, временных метров? Или есть ли лучшая альтернатива?

Вы также можете настроить демон ssh на отображение сообщения при входе в систему. Укажите файл для отображения с помощью директивы Banner в файле sshd_config:

Banner /etc/ssh/ssh_banner

Имя файла может быть любым, но для разумности я держу его в /etc/ssh вместе с файлом sshd_config.

0
06.06.2018, 22:53
2 ответа

awk es probablemente todo lo que necesita aquí, ya que puede hacer coincidir expresiones regulares, dividir líneas en campos y hacer comparaciones de cadenas (que funciona para la comparación de fechas siempre que use YYYY -MM -DD HH :MM :Marcas de tiempo de SS y no hay cambio de DST ).

Si la fecha está en el primer campo y la hora en el segundo:

awk -v date=1 -v time=2 '
  $date > "2018-05-24" && $time < "12:00:00" && /some text/'

La implementación GNU awk de awktiene extensiones de formato y análisis de fechas que le permiten hacer cosas más avanzadas como:

gawk -v date=1 -v time=2 '
  function parse_time(t) {
    gsub(/[:-]/, " ", t)
    return mktime(t)
  }
  BEGIN {
    start = parse_time("2018-01-01 08:00")
    end = systime() - 86400 # yesterday, same time
  }
  {t = parse_time($date" "$time)}
  t >= start && t <= end && /some test/'
2
28.01.2020, 02:23

grep filtra expresiones regulares. Es muy bueno para filtrar líneas que contienen una palabra clave en particular, pero es difícil especificar un rango de fechas usando expresiones regulares. Por ejemplo, para obtener errores entre el 1 de enero, 20 :00 y el 3 de enero, 2 :00, debe aceptar todas las horas para el 2 de enero, pero solo por la tarde para el 1 de enero y solo temprano por la mañana para el 3 de enero. No puede separar la hora del día y la fecha, por ejemplo.

Es mucho más sencillo utilizar una herramienta más expresiva que pueda comparar fechas de forma nativa. Perl es un lenguaje popular para hacer este tipo de cosas y Python es una buena alternativa.

Aquí hay un ejemplo en Python:

import re
import time

f = open('/var/log/syslog')
line = f.readline()
while line:
    # Get the date at the beginning of line with a regex
    m = re.match(r'^([^\s]+\s+[^\s]+\s+[^\s]+)\s+', line)
    # Parse the date
    date = time.strptime(m.group(1), '%b %d %H:%M:%S')
    # Compare with a given date
    if date > time.strptime('Jun 6 14:00:00', '%b %d %H:%M:%S'):
        print(line, end='')

    # Read next line
    line = f.readline()
1
28.01.2020, 02:23

Теги

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