Статьи

Архивирование и анализ журналов с помощью Amazon S3 и Glacier — Часть IV

Теперь у нас есть  журналы, поступающие с уровня CloudFrontWeb / App  и Search в  централизованное хранилище журналов  в Amazon S3. В этом последнем посте из этой серии, давайте теперь посмотрим, каковы варианты на уровне хранилища с точки зрения стоимости и что делать с горами журналов.

Использование хранилища с уменьшенным резервированием
Amazon S3 имеет другой класс хранения — стандартное, хранилище с пониженным резервированием (RRS) и Glacier. По умолчанию, когда мы создаем хранилище любого объекта в Amazon S3, он хранится в классе хранения Standard. В классе хранения «Стандарт» все объекты имеют срок службы 99,99999999% и доступность объектов 99,99% в течение определенного года. С RRS Объекты, которые хранятся в S3, реплицируются в меньшем количестве мест, чтобы обеспечить долговечность 99,99% и доступность объектов 99,99% в течение данного года. RRS поставляется дешевле, чем стандартное хранилище. Если мы храним 1 ТБ файлов журналов в стандартном хранилище, это будет стоить около 95 долларов США в месяц (в стандартном регионе США). В соответствии с RRS тот же 1 ТБ хранилища будет $ 76 / месяц.

Опция RRS не может быть включена на уровне группы, а скорее на уровне отдельных объектов. Мы можем включить RRS для папок журналов, которые мы создали через свойства объекта

Включить хранилище S3 с уменьшенным резервированием
Включить хранилище S3 с уменьшенным резервированием


Анализ журнала

Теперь мы можем инициировать 
 задания
Elastic Map Reduce, чтобы обрабатывать эти файлы журналов и производить аналитику журналов. Elastic Map Reduce принимает корзину S3 в качестве местоположения источника ввода. Мы можем указать область «log» как источник ввода и предоставить EMR реализацию Map-Reduce для обработки журналов.

Годовой анализ / Многолетний анализ

Некоторые требования требуют, чтобы в конце года проводился анализ включения-выключения. Например, мы можем регулярно анализировать данные журнала ежемесячно или по запросу. А в конце года нам может потребоваться анализ данных за весь год и сравнение его с предыдущими годами. В таких случаях, если мы поддерживаем многолетние файлы журналов в S3, стоимость хранилища может быть очень высокой. И журналы предыдущего года будут доступны только один раз в год. По этим причинам мы можем заархивировать старые данные журнала в 
Amazon Glacier . Amazon Glacier предоставляет недорогие услуги архивирования за 0,01 доллара США за ГБ в месяц.

Архивация на Glacier

Мы не будем хранить файлы журналов вечно. Обычно для любого приложения требуется хранить файлы журналов в течение определенного периода времени, после которого они могут быть удалены. Допустим, мы заинтересованы в том, чтобы сохранить только файлы журнала за последние 6 месяцев. И иногда мы можем проводить анализ один или три года. В таких случаях мы можем использовать установленные политики жизненного цикла в S3 для автоматического архивирования в Glacier по истечении определенного периода времени. Мы также можем поручить S3 автоматически удалять Объекты по истечении определенного периода времени.

  • Нажмите на свойства корзины и перейдите на вкладку «Жизненный цикл»
  • Нажмите «Добавить правило», чтобы создать новое «правило жизненного цикла»
  • Укажите, что правило должно применяться ко всей корзине, и создайте правило «Переход» и «Срок действия».
  • Создайте правило «Переход», указав «180» дней. Это автоматически переместит файлы из корзины S3 на ледник через 180 дней
  • Создайте правило «Срок действия», указав «1095» дней. Это автоматически удалит файлы журнала с S3 или Glacier через 3 года.
Правила жизненного цикла для архивирования на ледник и удаления файлов журнала
Правила жизненного цикла для архивирования на ледник и удаления файлов журнала

При этом файлы журнала будут автоматически заархивированы в Glacier через 6 месяцев (с момента создания) и будут удалены через 3 года.
Как только файлы журналов архивируются в Glacier, класс хранения этих файлов журналов (объектов) в S3 изменяется на Glacier, указывая на то, что они хранятся в Glacier.

S3 Storage Class для архивных файлов
S3 Storage Class для архивных файлов

Восстановление из ледника


Для анализа на конец года нам понадобятся архивные данные в Glacier в Amazon S3, чтобы мы могли запускать задания Elastic Map Reduce для них, чтобы получать аналитическую информацию на конец года / на несколько лет.
Мы можем сделать это через Консоль управления AWS:

  • Щелкните правой кнопкой мыши конкретный объект (файл журнала), класс хранения которого Glacier (что означает, что он заархивирован) и «Инициировать восстановление»
  • Укажите, как долго нам требуется объект в S3 для выполнения анализа и выполнения запроса

Как только этот запрос инициирован, AWS обычно требуется около 3-4 часов для восстановления объекта из Glacier в S3.
Процесс «Восстановление объекта» может быть выполнен только на уровне отдельного объекта. Обычно у нас будет большое количество файлов журналов в конце года, и сделать это практически невозможно.

Восстановление из Glacier программно

Восстановление из Glacier — это, по сути, операция S3, а не операция Glacier, как кажется.
Нам нужно использовать S3 API, чтобы начать восстановление

AmazonS3 s3Client =newAmazonS3Client(newBasicAWSCredentials("aws-access-key","aws-secret-access-key"));ObjectListing listing = s3Client.listObjects(newListObjectsRequest()          .withBucketName("my-global-logs")         .withPrefix("web-logs/"));

Первый шаг — перечислить все ключи Объектов, которые мы хотим восстановить. Для этого используйте вызов API S3 ListObjects, чтобы получить список всех объектов. Несколько указателей при использовании этого API

  • Укажите имя корзины, которое мы хотим перечислить. Также включите префикс, если мы заинтересованы в восстановлении только определенного каталога в этом сегменте. Например, если мы заинтересованы только в проведении анализа веб-журналов, а не других, мы можем указать, как указано выше
  • Поскольку корзина может содержать 1000 объектов, API S3 выполняет разбиение на страницы при отправке ответа. Следовательно, используйте метод isTruncated в ответе «ObjectListing», чтобы проверить, есть ли еще объекты. Если это так, инициируйте дальнейшие вызовы API до конца списка
  • Поскольку мы перечисляем весь сегмент, вызов также приведет к ключам для каталога. Что-то вроде следующего. Поэтому проверьте наличие ключа, содержащего файл, а не каталог, и продолжайте добавлять такие ключи в список (например, выполняя простую проверку «contains («. Log «)»)

         веб-журналы / 2012 /

          веб-журналы / 2012/12 /

          веб-журналы / 2012/12/10 /

          веб-журналы / 2012/12/10 / я-7a3flcd3 /

          веб-журналы / 2012/12/10 / я-7a3flcd3 / tomcat.log

          веб-журналы / 2012/12/10 / я-9d9dedf2 /

          веб-журналы / 2012/12/10 / я-9d9dedf2 / 01 /

          веб-журналы / 2012/12/10 / я-9d9dedf2 / 02 /

          веб-журналы / 2012/12/10 / я-9d9dedf2 / 03 /

Как только мы получим полный список ключей объектов для восстановления, следующим шагом будет запуск процесса восстановления для всех объектов.

RestoreObjectRequest requestRestore =newRestoreObjectRequest("my-global-logs","<object-key>",<restoration-period>);
s3Client.restoreObject(requestRestore);

Как только вышеупомянутый запрос инициируется для всех Объектов, Amazon Glacier требуется около 3-5 часов, чтобы восстановить Объекты и сделать его доступным в Amazon S3. Затем мы можем запустить задания Elastic Map Reduce со всеми необходимыми данными.

Вещи, чтобы запомнить / рассмотреть

  • Архивирование и восстановление являются операциями S3 и, следовательно, являются частью S3 API.
  • Если у вас есть данные, хранящиеся в Glacier, которые не были заархивированы с S3, то для их восстановления вы должны использовать Glacier API для инициирования загрузок. Смотрите шаги, описанные в документации AWS для загрузки архива.
  • Восстановленные объекты по умолчанию хранятся в разделе «Сокращение избыточности».
  • Если у вас есть миллионы Объектов в S3, которые необходимо перенести в Glacier, помните о стоимости запросов на восстановление. Эрик Хаммонд провел здесь очень подробный  анализ
  • Ледник предназначен для архивного хранения. Это означает, что вы не часто получаете доступ к данным и можете ждать доступа к данным. Любой запрос на загрузку от Glacier, займет 3-5 часов, прежде чем он станет доступен. Поэтому тщательно выбирайте архивную политику. Если вы планируете часто получать данные журнала, Glacier не будет правильным выбором и окажется очень дорогим (так как он не предназначен для частого поиска)

Решения для управления журналами

Существует множество решений для управления журналами, которые доступны в качестве службы и могут быть подключены к существующим приложениям и облачной среде.
  • Splunk  — это широко используемое решение для управления и мониторинга журналов. Splunk можно настроить на сервере и легко настроить для начала сбора данных с веб-серверов. Также доступна версия SaaS, где сервис полностью управляется Splunk
  • Loggly  — еще одно облачное решение для управления журналами , которое доступно в качестве службы.
  • Есть также доступные решения с открытым исходным кодом, такие как  LogStash, которые могут быть настроены для наших нужд

На этом мы завершаем цикл статей о том, что я хотел охватить как часть анализа журналов с использованием S3 и Glacier.
Ведение журнала является важным компонентом любой системы, и в эпоху облачных вычислений хорошее решение для управления журналами окажется полезным. Как только проблемы масштабирования и производительности будут решены с помощью облачных вычислений, ближайшей следующей потребностью любой системы будет иметь эффективный способ взглянуть на систему и проанализировать в масштабе. Решение для управления журналами определенно пригодится.