Многие поставщики SAAS с радостью продают вам систему управления журналом Hurn-Key, а в первые дни стартапа, когда вы ценим время в течение денег, покупка, который имеет много смысла. AWS CloudWatch Logs — это еще одно хорошее решение, если вы уже размещаетесь на AWS. Поскольку любые из этих платных услуг, стоимость в конечном итоге собирается начать поднимать несколько бровей, и это может стать благосклонным для создания собственного собственного собственного. Elasticsearch-logstash-Kibana Cocktail — это самое популярное развертывание для этого, но один поставщик SaaS, который я нашел рассчитал TCO, запускал метеруженский стек ELK в течение года почти 500 000 долларов!
Мы разработали собственную систему, используя FluentD, AWS S3 и AWS ATHENA, чтобы зарегистрировать, хранить и запрашивать наши журналы. С этой комбинацией я оцениваю, что глотает 640 ГБ в день журнала данных и сохраняя его доступным в течение всего года, будет стоить всего 79 248 долл. США — экономия 83 процента! Не говоря уже о времени, потраченном мониторингу, масштабирования и эксплуатации кластера. Выполнение нашей системы хороша; Запросы, которые возвращают данные для одного запроса, завершены менее чем за 3 секунды. Поиск полного текста наших журналов для конкретных маркеров или ссылок может занять больше времени Но это все еще очень управляемое.
Эта система не только дает нам быстрый доступ к журналам, которые у нас есть, но он также позволяет нам записать дополнительную информацию на запрос и сохранять журналы доступными для поиска, чем мы, иначе, если бы нам пришлось платить больше для хранения. Но имеющие это дополнительные данные бесценны, чтобы помочь нам решить проблемы и отвечать на вопросы быстро и отзывчиво.
В этом посте я собираюсь пройти через то, что мы сделали, предоставляют некоторые код и дискуссии, чтобы показать наш подход и говорить о возможностях для будущей работы, которая открылась. Я также собираюсь упомянуть некоторые «чтенные» и дорожные блоки, которые мы встречались по пути.
Создание системы
Существует четыре этапа в системе ведения журнала: проглатывание, агрегация, хранение и запрос. Мы собираемся поговорить о них в обратном порядке.
Запрос
Предполагая, что у нас есть наши журналы в структурированном формате, каким был бы идеальный интерфейс для получения доступа к нему? В то время как Kibana является предпочтительным выбором для многих компаний, Kibana предлагает много вещей, которые нам не нужно. Красивые диаграммы и графики приятны, но при отладке состояния ошибки, что нам действительно нужно, это быстрый доступ к нашим журналам. Кроме того, выясняя то, что напоминает SQL, позволяет написать сложные запросы, чтобы ответить на вопросы, как они появляются.
Amazon Athena — это технология, на которой мы остановились, чтобы запросить наши журналы. Афина ищет данные, которые уже существуют в S3, и у него есть несколько свойств, которые делают его идеальным для этой задачи под рукой:
Афина действительно недорого. Мы платим только за данные, которые мы сканируем в процессе завершения запроса: всего 5 долларов за терабайт на момент написания.
Афина понимает и может запрашивать формат файла паркета из коробки. Паркет ориентирован на столбец, что означает, что он способен сканировать данные только в столбцах, которые мы ищем. Это огромное благоустроение для нас, поскольку подавляющее большинство наших поисков — «Получить мне все журналы для этого единственного удостоверения личности запроса». Это всего лишь 128бит UUID, и ATHENA может быстро определить, какие кусочки данных содержат значение в соответствии с поиском, сохраняя нам время и деньги. Кроме того, паркет сжимается, а Афина может запросить его, в то время как в его сжатом формате, сохраняя еще больше денег на расходы на сканирование.
Мы написали небольшой пользовательский поисковую систему журнала, чтобы выступить в качестве внешнего интерфейса для интерфейса Athena для нашей команды. Этот интерфейс имеет поля, базовые параметры запроса, селектор дата, чтобы помочь генерировать язык SQL-подобного запроса, который Athena использует, а также несколько конечных точек, которые выбивают запрос сразу на основе запроса UUID, POD и времени. Мы встроили ссылки на наш инструмент в Datadog для быстрого анализа журналов плохо выполнения конечных точек.
Место хранения
Как уже упоминалось, Athena запросит данные, которые хранятся в S3. Это прочная, надежная среда, обеспечивающая миллисекундную доступ к нашим данным, когда нам это нужно. S3 также поставляется с другим преимуществом. Мы можем настроить правила жизненного цикла для перемещения файлов для более низких затратных ярусов со временем. Эти правила жизненного цикла могут быть настроены всего за несколько кликов (или несколько строк CloudFormation AWS), а затем это сделано.
Агрегация
Агрегация журналов из наших услуг получилось, требует некоторой работы. Вместо того, чтобы использовать продукт Amazon с полки, мы решили использовать Fluentd для глотания, агрегата, а затем обрабатывать наши журналы. Сама конфигурация очень проста. Мы создали образец докера, который построил свободные с libjemalloc
Чтобы сохранить использование памяти в чеке и lib-arrow
Для генерирования сжатых данных в формате паркета. Этот контейнер затем может быть развернут на наш стандартный кластер ECS, а затем рассматривается как любой другой сервис.
Проглатывание
Теперь, когда у нас есть наш запрос, агрегация и услуги хранения, готов, последний шаг — получить данные из нашего приложения в службу FLYENTD. Для этого есть пара вариантов. Один должен был установить поставщика регистрации Docker для свободных и указывать на его кластере агрегации, который мы развернули. Это позволяет нам войти в STDOUT, что бы сохранить регистратор относительно простым. Однако мы решили, что это того стоит сделать наше приложение о службе агрегации и установить библиотеку регистрации клиента для FluentD. FLUENTD поддерживает рубиновую версию своего регистратора, которая работает в качестве замены для перепадения регистратора на рельсах: Свободный логин-Ruby Но это язык-агностик и может быть использован где угодно.
Голчас
Кто регистрирует регистратор?
К сожалению, есть одна область, где мы не можем положиться на эту систему для регистрации — она не может войти в себя! Агент ECS требует, чтобы новый контейнер мог сразу же войти в свой поставщик журналов после загрузки. Это проблема, когда сама служба регистрации должна загружаться, инициализация, а затем пройти проверки здоровья, чтобы начать принимать запросы.
Один из способов этого можно было бы выпетить «экспедитор» службы ECS в AMI для каждого экземпляра кластера ECS. Этот экспедитор может получать и буферные журналы, затем отправляют их в частное имя хоста, настроенного на нашу новую службу регистрации.
Обеспечить правильный размер чанка
Афина имеет «сладкое место. «Из-за столбчатой формата данных и способности ATHENA для чтения заголовков из паркетного файла до того, как он выберет весь объект, Athena работает лучше всего, когда размер отсканированных файлов составляет около 200 МБ. Как только он становится больше, Афина не хватает способности распараллеливать. Когда он меньше, каждый работник запроса тратит много времени для чтения и анализа исходных заголовков вместо сканирования фактических данных. Нам пришлось настроить наши временные ключи и размеры кусочки, чтобы получить это правильно.
Существует баланс-акт между размером и емкостью куска. Чем больше агрегационных контейнеров мы работали, тем больше давления журнала нам нужно было получить правильное количество насыщенности для создания файлов в сладком месте. По нашему опыту кластер действительно хочет бегать примерно на 80% процессора. Выше, чем это И мы рискуем к протоколу переадресации журнала TCP, обеспечивающим восходящее давление на обратную давление к этому в систему. Меньше, чем это И мы в конечном итоге создают файлы журнала, которые недостаточно велики, чтобы получить полную производительность из Афины. Поскольку наш наш использование является внутренним инструментом, обращенным к разработчику, и риск замедления нашего основного приложения не стоит немного лучшей пропускной способности, мы выбрали слегка за пределы наших контейнеров. Второй свободный слой Fluentd Containser, обслуживающий в качестве экспедитора между нашими серверами приложений, и наши контейнеры агрегации, могут помочь этому буферу по существу. Это даст нам отличные характеристики без риска обратного давления на стоимость чуть более сложности и затрат накладные расходы.
Разбиение проекции
Сначала мы попытались создать AWS Clue Clue для наших данных, хранящихся в S3, а затем у лямбда Clambda автоматически создает клеевые перегородки для Athena для использования. Это был плохой подход.
Проекция разбиения говорит Афине о форме данных в S3, какие ключи являются разделами ключами, а какая структура файла похожа на S3. Мы разделяем наши данные по службе, Shard, год, месяц, день и час. В нашем тестировании мы обнаружили, что проекция раздела была необходима для получения полной стоимости из Афины. Без этого многие из наших запросов займется до тридцати секунды, поскольку Athena Consult Consults Consults Consults Consult Clies определяет, какие данные для сканирования. С проецированием раздела такого поиска не было необходимости, и запрос может начать немедленно, сканирование только соответствующих данных.
Имейте в виду, что разделы отлично подходят для определения доступа к количеству данных, но путем разбиения слишком агрессивно, мы заметили наши размеры кусочки под «сладким местом», обсуждаемым выше. Мы заметили аналогичную проблему разделить наши данные экземпляром EC2. Компорация всех хостов вместе озвучительно сделала нашими запросами в систему намного быстрее.
Будущее использование случаев
Сила этой системы огромна. Мы нажимаем ошеломляющее количество данных журналов в нее, заплатите относительно мало для него и запрашивайте его в считанные секунды. Кроме того, проглатывание управляется службой, которую мы бегаем и предоставим себе. Таким образом, легко автоматизировать, когда спрос низкий и масштабирует, когда нам нужна дополнительная лошадиная сила, чтобы не отставать от спроса. Но теперь, когда у нас есть эта система работает, другие случаи использования представили себя, которые выглядят перспективными:
- Аналитика — Мы можем войти в Fluentd со специальным ключом для событий Analytics, которые мы хотим позже ETL и отправлять в Redshift. Мы можем создать новое правило в нашем FluentD Config, чтобы взять тег Analytics, и записывать его в правильное ведро для последующих запросов ATHENA, чтобы экспортировать в Redshift или для редшифта, чтобы запросить непосредственно из S3, используя красный спектр.
- Запросить корреляцию — В AHA!, Каждый запрос на наш сервис выдан request_uuud. Когда мы введем в очередь фоновой задача или позвоните на другую услугу, эти услуги могут вообще входить в систему, используя одну и ту же структуру, и может включать в себя то, что исходит Request_UUID в соответствующем поле. Это означает, что мы можем проследить все, что было задействовано или вызвать из одного запроса пользователя через все наши бэкэндские услуги через один интерфейс запроса и переплетете все журналы вместе в одной графике.
- Нахождение современных журналов — Используя эту систему, это тривиально искать все журналы со всех запросов с очень небольшим окном времени времени. Если мы знаем, что у нас был тупик в определенной строке в базе данных, это позволит вам найти все процессы, которые пытались обновить эту строку, а затем отследить назад, чтобы найти действие контроллера, которое вызвало проблему.
Если нахождение инновационных решений проблем, как это звучит интересно, прийти работать с нами Как мы создаем программное обеспечение Roodmapping Product Roadmapping World Browdmapping World. Мы не только создаем мощную платформу для крупнейших компаний в мире, чтобы планировать и управлять своей стратегией, мы также строим сложную инструмент, чтобы помочь нашей талантливой и дружеской команде развития продолжают преуспеть.
Сноски
1: Предполагая, что 35 фаржевых экземпляров контейнеров с 1,25 VCPU и памятью 2 ГБ каждой, 640 ГБ принимают в день, 640 ГБ в день, 60-дневной стандартной памяти S3 Standard Access, 335-дневная нечастое доступа к хранению доступа и 100 запросов на 100 ATHENA в день, каждый из которых покрывает 100 ГБ. (Это щедрое пособие.) Зарезервированные экземпляры кластеров ECS снимите эту стоимость дальше.
Оригинал: «https://dev.to/aha/log-management-using-aws-athena-34ne»