Ubuntu Linux. Поиск и последующий анализ записей в логах за текущий (или нужный) день посредством grep

Для достижения данной цели гугление мне не помогло, поэтому публикую данную статью здесь.

Исходная цель: необходимо автоматизировать процесс поиска нужных записей в логах, используя date и подставлять в него текущую дату, а затем «скормить всё это в grep», чтобы затем выводить в php файлик количество найденных строчек.

Для начала решил проанализировать

$ date —help

отлично. Нужные мне ключи [%b %d]. Идём в [gnome-terminal] и выполняем команду [date «+%b %d»] . Сработало, это то что нужно. Но локаль-то у нас (ru_RU) русская, и вывод команды [янв. 25], а в логах [Jan 25]. Как бы так просто в пределах одной команды поменять локаль? Ответ не заставил себя долго ждать, гугление в этот раз помогло. Нам нужно в пределах одной команды просто изменить локаль. Тогда при вводе команды [export LC_ALL=en_US.utf8;date «+%b %d»] получим вывод [Jan 25]. Отлично, это то что нам нужно. Теперь всё это надо передать в grep в качестве аргумента. Пришлось немного поиграть с кавычками, получилось следующее: [grep «`export LC_ALL=en_US.utf8;date «+%b %d»`»]. Основная часть работы выполнена. Теперь нужно указать файл, который будем грепать, ну и далее избавиться от вывода лишних строк. Конкретно в моём случае грепаем файл auth.log  и ищем строчки, содержащие «Failed password for invalid user», а строчки, содержащие repeated, игнорируем. Получилась вот такая простенькая команда, создадим *.sh файл и запихнём эту команду в него, а затем поставим всё это хозяйство в crontab.


#!/bin/bash
cat /var/log/auth.log | grep "`export LC_ALL=en_US.utf8;date "+%b %d"`" | grep "Failed password for invalid user" | grep -v repeated | wc -l > /path/to/txt/file/brutforce.txt

Ну и как это выглядит в кронтабе.


#bruteforce ssh logs
*/120 * * * *    user    /path/to/sh/file/brutforce.sh >/dev/null 2>&1

Теперь просто выводим файлик в php скрипте на экран с помощью вот такого простого кода


<?php
$brutforce = file_get_contents( "brutforce.txt" );
?>

<font color="#0000CD">За текущие сутки пароль доступа по ssh к серверу пытались подобрать:</font>
<font color="#FF0000"><b><?php print $brutforce ?> раз.</b></font>

UPD: немного изменил bash скрипт, поскольку в первые числа месяца (1-9) ничего не нагрепывалось из-за того, что в логах число текущего дня записывается с ноликом впереди. То есть было так

$ export LC_ALL=en_US.utf8;date «+%b %e»
Mar  4

теперь стало так

$ export LC_ALL=en_US.utf8;date «+%b %d»
Mar 04

По этой причине в первые 9 дней месяца скрипт фактически не работал и на страничке с погодой красовался гордый ноль.

Как всё это выглядит внешне — можно поглядеть вот тут -> http://veloblog.tk/weather/street.php

Добавить комментарий