Отслеживание статистики сайта (инструменты Graphite, StatsD и CollectD)
Cloud Server, General, VPS | Комментировать запись
Вступление
Существует множество причин необходимости сбора статистических данных о сервере, приложения и трафике. Например, статистика может отобразить потребность сервера в масштабировании и эффективность устранения неисправностей, а также укажет на “болевые точки” конфигураций.
Для отслеживания таких данных разработано множество различных инструментов, каждый из которых имеет свои преимущества. Можно подключить все эти инструменты, чтобы создать систему для сбора, записи и отображения результатов сбора статистики.
В данном руководстве речь пойдет о технологиях сбора, хранения и вывода данных сервера и приложений.
Один из инструментов, охваченных статьей – Graphite, графическая библиотека, состоящая из нескольких компонентов, которые помогут получить визуальное представление данных. Также будет рассмотрен демон collectd, собирающий статистику системы почти в реальном времени. Последний инструмент, упомянутый в статье – StatsD, гибкий агрегатор статистики, который может быть использован для сбора и организации произвольных данных.
Зачем нужно отслеживать данные?
Для начала нужно разобраться, почему нужно отслеживать данные среды сервера или приложений.
Главная причина довольно проста: чем больше данных есть у пользователя, тем проще ему понять, что происходит с сервером в тот или иной момент. Благодаря этому можно создавать резервные копии достоверных данных и проследить, правильно ли работают внесенные в конфигурации изменения. Отслеживание статистики – дополнительный источник информации, которую невозможно получить из журналов приложения.
Большинство (но не все) систем журналирования не могут соотносить данные различных приложений или связывать события с определенным состоянием системы, потому что они в основном осуществляют автономный вывод данных приложения. Это может повлиять на целостность представления о подробностях событий системы.
Предположим, сервер базы данных вышел из строя. Просмотрев журналы, можно заметить, что в 15:35 сервис MySQL был убит ошибкой ООМ (out of memory). Теперь понятно, что причиной сбоя стало использование памяти, но выяснить, что вызвало пик использования памяти в ранее стабильной системе, невозможно.
Если бы данные сервера и приложений отслеживались ранее, можно было бы собрать различные фрагменты системных данных воедино, чтобы понять, как именно выглядела среда на момент возникновения проблемы. Возможно, удалось бы обнаружить, что использование памяти постоянно возрастало, что и стало причиной ее нехватки. Владея информацией об использовании памяти на уровне приложений, можно определить, какие именно программы виновны в сбое. Кроме того, неестественный для системы пик использования может означать нечто совершенно иное.
Другой пример: до и после развертывания среды система выглядит одинаково. Если новый код создает некоторые странные условия, можно отследить его влияние на компоненты и сравнить его производительность со старым кодом. Таким образом, можно определить части кода, которые удачнее предыдущего, и части, где были допущены ошибки.
Правильный подход к сбору статистики позволяет взглянуть на ОС как на систему данных, а не свободный набор несвязанных между собой компонентов
Библиотека Graphite и ее компоненты
Graphite – это графическая библиотека, отвечающая за хранение и визуализацию данных. Это означает, что Graphite необходимы другие приложения для сбора и передачи точек данных.
Сам проект Graphite состоит из нескольких компонентов, каждый из которых имеет определенную цель.
Веб-приложение Graphite
Самым динамичным и удобным для просмотра компонентом Graphite является веб-приложение Graphite, которое позволяет создавать графики, отображающие необходимые данные.
Для разработки графика Graphite предоставляет очень гибкий интерфейс, благодаря чему можно сочетать различные типы показателей, управлять маркировкой, шрифтами, цветом и свойствами линии, а также изменять размер и обрабатывать данные по желанию.
Ключевой идеей данного приложения является то, что Graphite отображает графики на основе заданных точек данных и направлений. Приложение не просто выводит график, а затем отбрасывает данные; оно позволяет быстро совмещать данные с любыми другими важными данными.
Кроме того, веб-приложение также позволяет сохранять свойства и макеты графиков, благодаря чему можно улучшать интерфейс мониторинга и использовать все необходимые настройки. Кроме того, можно использовать приборную панель нескольких видов одновременно; это значит, что для каждой машины или приложения может быть отдельная панель. Чтобы установить соотношение данных по графикам, просто перетащите и опустите нужные графики, что совместит вывод.
Тем не менее, это еще не все. Graphite позволяет создавать графики на URL для встраивания в другие интерфейсы.
Можно также экспортировать данные в не-графические представления, как JSON или CSV, или выводить данные в формате SVG.
Кроме веб-приложения, Graphite имеет и другие полезные компоненты.
Carbon
Carbon является бэкэндом для хранения конфигураций Graphite. Одной конфигурации Graphite, как правило, нужен один или больше демонов Carbon, которые отвечают за обработку данных, передаваемых другими процессами, собирающими и передающими статистику (коллекторы не являются частью Graphite).
Существует множество демонов Carbon, каждый из которых обрабатывает данные по-другому. Базовый демон называется carbon-cache.py. Он прослушивает данные на определенных портах и пишет их на диск.
Он сохраняет изначальный вид данных, а затем сбрасывает их на диск после заданного периода времени. На данном этапе важно понять, что компонент Carbon выполняет процедуры получения и сброса данных. Он не является механизмом хранения (эту функцию выполняет whisper – следующий компонент, который нужно рассмотреть).
Демону carbon-cache.py нужно указать, с какими форматами, протоколами и портами он должен работать, а также какую политику хранения данных применять. Полученные данные передаются следующему компоненту – Whisper. Для большинства базовых конфигураций, одного экземпляра carbon-cache.py достаточно для обработки приема данных.
Если сервер растет, можно использовать несколько демонов (например, carbon-relay.py или carbon-aggregator.py).
Демон carbon-relay.py используется для отправки запросов на резервирование серверным демонам. Он также может быть использован для сегментирования данных, чтобы различные экземпляры carbon-cache могли прочитать эти данные в нескольких местах хранения.
Демон carbon-aggregator.py используется для буферизации данных и вывода их демону carbon-cache.py. Это уменьшит воздействие обработки статистики на систему за счет детализации.
Whisper
Whisper – это библиотека баз данных, которую Graphite использует для хранения информации.
Эта библиотека очень гибкая и хранит подробные данные в виде временной последовательности. Она создает архивы разных уровней детализации; в практическом использовании информация, переходящая установленный предел старения, перемещается с более высокого уровня детализации на более низкий.
К примеру, можно сохранять одну точку данных определенной метрики в секунду. Можно сказать Whisper хранить эти подробные данные в течение 5 часов. Можно также использовать архив, в котором хранятся данные более низкого разрешения; тогда Whisper будет сохранять одну точку данных в минуту и хранить их в течение 6 месяцев.
Каждая точка в архиве с низким разрешением рассчитывается из тех же данных, из которых записываются точки в архив более высокого разрешения. Whisper позволяет создавать необходимое количество архивов различных разрешений и отсева. Кроме того, можно сказать Whisper, как вычислять данные для архивов с низким разрешением в зависимости от типа метрики.
К примеру, метрикой может быть подсчет того, сколько раз происходит некоторое событие в течение короткого периода времени. Чтобы создать точку, которая увеличит сроки и понизит разрешение, нужно сложить точки данных архива высшего разрешения и суммировать значения данных за больший промежуток времени.
Whisper может рассчитать данные низкого разрешения и другими способами в зависимости от характера метрики. Например, некоторые данные обобщаются, в то время как другие могут быть отслежены с максимальной точностью значения. В случае с обобщенными значениями (average), фактическое среднее значение рассчитывается из точек с высшим разрешением, чтобы создать точку более низкого разрешения. Для значений maximum сохраняется наивысшее значение, а остальные сбрасываются.
Whisper подсчитывает и записывает данные низшего разрешения в момент получения данных (по прошествии времени, необходимого для сбора определенных значений). Библиотека просто собирает точки данных, необходимые ей для агрегирования данных (average, max, т.д.) и их записи.
Для построения графика Graphite использует архив высшего разрешения, который содержит требуемые интервалы времени при запросе данных.
Сбор статистики
Как уже было сказано, сам по себе Graphite не собирает информацию, а получает ее от других сервисов. Это позволяет проекту поддерживать узкую направленность, а также модульно взаимодействовать с различными сервисами.
Далее речь пойдет о протоколах, которые поддерживает Graphite, а также о популярных программах сбора информации (collectd и StatsD ), которые могут передавать данные на обработку демону Carbon.
Протоколы
Для передачи данных Graphite существует три протокола.
Во-первых, Graphite принимает и может читать простой текст. Это наиболее гибкий формат, потому что почти любое приложение или сервис может производить текстовый вывод, который можно передать Graphite или промежуточному инструменту.
Простые текстовые сообщения включают следующую информацию: имя метрики, заданное значение и метку времени для этого значения. Эти сообщения могут быть отправлены прямо демону Carbon на порт, назначенный для обычного текста, без дополнительного форматирования.
Поскольку Graphite разработан в Python, он также поддерживает формат сериализации данных pickle. Этот стандарт Python позволяет буферизовать и отправлять несколько значений времени в одной транзакции.
Graphite также может принимать данные с помощью сообщений AMQP. Это позволяет более тонко обрабатывать большие объемы данных. Таким образом, можно вносить большое количество статистики и обрабатывать перебои сетевых соединений между удаленными хостами без потери данных.
Collectd
Демон collectd – один из самых простых способов сбора подробной информации о сервере.
Collectd может собирать статистику о различных компонентах среды сервера. Это позволяет без труда отслеживать общие показатели, такие как использование памяти, загрузка процессора, сетевой трафик и т.д., а также легко сопоставлять события с состоянием системы.
Кроме сбора стандартной информации системы, collectd также имеет систему плагинов, которые расширяют его функциональность. Это позволяет то легко отслеживать общее программное обеспечение, как, например, Apache, Nginx, Iptables, memcache, MySQL, PostgreSQL, OpenVPN и многое другое.
Collectd – простой способ получить данные из предустановленных приложений и общих сервисов сервера. Также этот демон можно использовать для отслеживания поведения инфраструктуры и сервисов.
StatsD
StatsD – очень простой в использовании демон, отправляющий данные Graphite, упрощающий отслеживание статистики приложений и систем.
StatsD работает путем прослушивания интерфейса для простых UDP пакетов, представляющих одну точку данных. Это означает, что он может принимать огромное количество информации без установления соединения. Затем он агрегирует полученные значения и передает их Graphite.
Эта система позволяет передавать большие объемы информации , не беспокоясь об увеличении задержки приложений. Сервис StatsD собирает все данные, агрегирует их, а затем отправляет обобщенные точки данных в Graphite в установленные сроки.
Благодаря этому StatsD считается отличным посредником для передачи данных Graphite. Но главным образом он используется для мониторинга созданных приложений и инструментов.
StatsD идеально подходит для этой операции, поскольку является демоном общего назначения, который принимает UDP-трафик. Есть много различных клиентских библиотек на различных языках программирования, которые могут отправлять данные непосредственно экземпляру StatsD. Это означает, что созданные пользователем приложения могут легко отправлять данные, которые необходимо отслеживать.
Итоги
Данная статья дает представление о том, как комбинировать различные статистические данные и графические утилиты, чтобы получить полное представление о среде.
Tags: Carbon, carbon-cache.py, collectd, Graphite, StatsD, Whisper