Skip to content

Home Администрирование Автоматизированный сбор информации
Автоматизированный сбор информации

Первый шаг на пути к совместному использованию информации заключается в том, чтобы собрать ее.

Сбор информации может оказаться более сложным делом, чем простой поиск и извлечение определенных данных. Часто этот процесс может оказаться связанным с получением информации из одного представления, например, из файла журнала веб-сервера Apache, и сохранением ее в некотором промежуточном виде для последующего использования. Например, если представить, что вам необходимо создать диаграмму, показывающую количество байтов, загруженных каждым отдельным клиентом с уникальным IP-адресом за месяц с определенного веб-сервера Apache, тогда процесс сбора информации мог бы включать в себя ежедневный анализ файла журнала веб-сервера Apache, в ходе которого извлекается необходимая информация (в данном случае: IP-адрес и «количество переданных байтов» для каждого запроса), и сохранение ее в некотором хранилище данных, откуда потом ее можно будет получить. Примерами таких хранилищ данных могут служить реляционные базы данных, объектные базы данных, файлы-хранилища объектов, файлы в формате CSV и обычные текстовые файлы.

Ниже приводится простой модуль, в котором используются модуль анализа файлов журналов веб-сервера Apache и модуль shelve:

В этом примере сначала импортируются модули shelve и apache_log_ parser_regex. Модуль shelve входит в состав стандартной библиотеки языка Python. Затем открываются файл журнала веб-сервера Apache access.log и файл, куда будет сохраняться извлеченная информация, accessюs. Далее выполняется обход всех строк в файле журнала и с помощью модуля разбора журнала для каждой строки создается словарь. Словарь содержит код состояния запроса HTTP, IP-адрес клиента и число байтов, переданных клиенту. После этого мы прибавляем число байтов для данного запроса к общему числу байтов, которое уже было сохранено ранее в объекте shelve для данного IP-адреса. Если в объекте shelve еще отсутствует запись для указанного IP-адреса, общее число переданных байтов автоматически устанавливается равным нулю. После обхода всех строк в файле журнала мы закрываем этот файл, а также объект shelve. Этот пример будет использоваться далее В этом разделе, когда мы подойдем к вопросу форматирования информации.

Прием электронной почты

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

Для получения сообщений от сервера электронной почты обычно используются два протокола: IMAP и РОРЗ. В стандартной поставке Python, куда «входят батарейки», имеются модули, поддерживающие оба эти протокола.

Из этих двух протоколов, пожалуй, наиболее часто используется протокол РОРЗ и доступ к электронной почте через этот протокол легко можно организовать с помощью модуля poplib. В примере 4.1 демонстрируется программный код, использующий модуль poplib для получения всех сообщений, хранящихся на указанном сервере, и записывающий их в отдельные файлы на диске.

Пример 4.1. Получение электронной почты по протоколу РОРЗ

Как видите, в этом примере для начала определяются username (имя пользователя), password (пароль) и mail_server (сервер электронной почты). Затем выполняется подключение к серверу, которому передаются предопределенные имя пользователя и пароль. Предположим, что соединение было выполнено успешно, и мы получили возможность просматривать электронную почту для данной учетной записи. После этого в цикле выполняется обход списка сообщений, извлечение и запись этих сообщений в файлы на диске. Единственное, что не предусмотрено в этом сценарии - сообщения не удаляются с сервера после их получения. Чтобы удалить эти сообщения, достаточно было бы добавить в сценарий вызов метода dele() после retr().

Работа с протоколом IMAP реализуется почти так же просто, как и с протоколом РОРЗ, но этот протокол не так хорошо описан в документации к стандартной библиотеке языка Python. В примере 4.2 приводится программный код, который выполняет те же самые действия, что и предыдущий пример, но с использованием протокола IMAP.

Пример 4.2. Получение электронной почты по протоколу IMAP

Как и в предыдущем примере, здесь также в самом начале сценария определяются username (имя пользователя), password (пароль) и mail_ server (сервер электронной почты). Затем выполняется подключение к серверу IMAP через SSL. Затем выполняется вход и выбор папки электронной почты INBOX. Затем начинается обход всего, что будет найдено в папке. Метод search() плохо описан в документации к стандартной библиотеке языка Python. Этот метод имеет два обязательных аргумента - набор символов и критерий поиска. Какой набор символов является допустимым? В каком формате он должен указываться? Какие критерии поиска могут использоваться? Как правильно оформляется критерий? Мы можем, конечно, предполагать, что чтение IMAP RFC окажется полезным, но, к счастью, в примере использования протокола IMAP имеется достаточно информации, позволяющей организовать извлечение всех сообщений, хранящихся в папке. На каждой итерации цикла выполняется запись содержимого сообщения на диск. Следует заметить, что при этом все сообщения в папке будут помечены как «прочитанные». Для вас это может и не представлять большой проблемы, проблема была бы гораздо большей, если бы сообщения удалялись, но вам следует знать об этой особенности.

Комментарии (0)

RSS feed Comments

Написать комментарий

smaller | bigger

busy
 

Регистрация




Top