Сначала определите, что считается записью
Для учебного журнала достаточно времени события, условного имени аккаунта и результата входа. Эти поля нужно трактовать одинаково во всех строках. Например, отсутствие результата нельзя молча считать успешным или неудачным входом: это неполная запись. Если сведения приходят в формате JSON, стандартный модуль Python позволяет преобразовать документ в объекты языка. Но успешный разбор формата не проверяет смысл данных. После него отдельно проверяют наличие полей, их типы и допустимые значения. Внешние данные также требуют ограничения размера. Даже разбор структурированного текста может расходовать значительные ресурсы, если вход чрезмерно большой. Для начала лучше использовать маленький искусственный набор с заранее понятным содержимым и ожидаемым результатом.
Отбор и подсчёт должны быть прозрачными
После проверки записи можно распределить по результату и аккаунту. В программе для этого подходят обычные словари и счётчики. Важно заранее определить, какие строки участвуют в расчёте, а какие отдельно учитываются как некорректные. Представим пять событий. У аккаунта А три явно указанных неудачных входа, у аккаунта Б один успешный, ещё у одной записи аккаунта А результат отсутствует. Корректный итог — три известные неудачи для А и одна неполная запись. Превращать последнюю в четвёртую неудачу нельзя. Временной промежуток также имеет значение. Три события за минуту и три события за месяц описывают разные ситуации. Если время записано неодинаково или неизвестен часовой пояс, это ограничение нужно сохранить в выводе.
Сигнал требует контекста, а журнал — защиты
Повторяющиеся ошибки входа могут быть связаны с неверно сохранённым паролем, действием законного пользователя или подозрительной активностью. Подсчёт помогает заметить участок для проверки, но не раскрывает намерения человека и не подтверждает успешный захват аккаунта. Полезно сформулировать вывод точно: обнаружено столько-то неудачных событий в таком-то наборе. Затем указать, какие сведения ещё нужны для оценки. Автоматическое наказание пользователя по одному учебному счётчику было бы более сильным действием, чем позволяют исходные данные. В реальной работе журналы содержат чувствительную информацию. Пароли, ключи и токены доступа не следует записывать в них как обычные поля. Доступ к журналам ограничивают, а для обучения используют вымышленные или надлежащим образом обезличенные данные. Аналитический скрипт не должен менять исследуемые записи только ради удобства подсчёта.
Попробуйте на практике
Проверьте логику будущего анализатора на пяти вымышленных событиях, не подключаясь к сети и не читая реальные журналы.
- Запишите три события с аккаунтом А и результатом неудача, одно с аккаунтом Б и результатом успех. Пятой записи аккаунта А намеренно не задавайте результат.
- Определите обязательные поля и отделите неполную запись. Сохраните её в отдельной категории, не придумывая недостающее значение.
- Посчитайте неудачные входы по аккаунтам и общее число корректных записей. Убедитесь, что успешный вход не попал в счётчик неудач.
- Составьте краткий вывод и два вопроса к контексту, например о временном промежутке и происхождении данных. Не объявляйте результат доказанной атакой.
Как проверить результат. Получены четыре полные записи и одна неполная. У аккаунта А три подтверждённые неудачи, у Б ни одной. Неполное событие не потеряно и не превращено в вымышленный факт.
Частые вопросы
Если документ успешно прочитан, данные уже проверены?
Нет. Синтаксический разбор и проверка содержания решают разные задачи. Поле может отсутствовать, иметь неподходящий тип или содержать значение, которого процесс не предусматривает.
Нужно ли запускать неизвестный скрипт с повышенными правами?
Для учебного подсчёта вымышленных записей это не требуется. Полномочия должны соответствовать задаче; неизвестный код сначала изучают и проверяют в разрешённой учебной среде.
Самостоятельный разбор темы. Содержание конкретной обучающей программы здесь не представлено.