Поиск по сайту:

Введение в отслеживание статистики с помощью Graphite, StatsD и CollectD


Введение

Есть множество причин, по которым сбор статистики о ваших серверах, приложениях и трафике является хорошей идеей. Сбор и систематизация данных могут дать вам уверенность в ваших решениях о масштабировании, устранении неполадок и отслеживании проблемных мест в ваших конфигурациях.

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

В этом руководстве мы собираемся обсудить некоторые технологии, которые позволят вам собирать, хранить и визуализировать данные, генерируемые вашими серверами и приложениями.

Мы обсудим Graphite, графическую библиотеку, состоящую из нескольких компонентов, которые можно использовать для визуализации ваших данных с течением времени. Мы также рассмотрим collectd, демон системной статистики, который может собирать информацию о работающем сервере почти в реальном времени. Последним в нашем списке будет StatsD, гибкий агрегатор статистики, который можно использовать для сбора и систематизации произвольных данных.

В следующем руководстве мы рассмотрим, как установить и настроить эти компоненты на сервере Ubuntu 14.04, чтобы вы могли начать работу.

Почему мы отслеживаем данные?

Первое, что нам нужно установить, — это причины, по которым мы отслеживаем данные в среде сервера или приложения.

Основная причина на самом деле довольно проста: чем больше у нас данных, тем больше вероятность, что мы сможем понять, что происходит в любой момент. Это дает нам замечательную возможность подкреплять наши решения достоверными данными и заранее видеть, нацелены ли изменения на правильный компонент. Статистика отслеживания предоставляет нам дополнительный источник информации, которого может не быть в журналах приложений.

Большинство (но не все) систем журналирования не могут сопоставлять данные из различных приложений или связывать события с определенными состояниями системы, потому что они в основном представляют собой автономные выходные данные приложения. Это может затруднить построение целостного представления об обстоятельствах, связанных с событием.

Мы можем на мгновение представить, что у вас произошел инцидент, когда ваш сервер базы данных выходит из строя. Читая журналы, вы можете заметить, что в 15:35:28 UTC ваша служба MySQL была остановлена из-за ошибки OOM (недостаточно памяти). Теперь мы знаем, что проблема заключалась в использовании памяти, но мы можем не знать, что вызвало всплеск использования памяти на ранее стабильном сервере.

Если бы мы отслеживали данные о нашем сервере и наших приложениях, мы могли бы начать собирать воедино явно разрозненные фрагменты системных данных, чтобы помочь нам понять, как выглядела среда именно во время проблемы. Мы можем обнаружить, что у нас был устойчивый рост использования памяти, который может быть вызван утечкой памяти. Если у нас есть информация об использовании памяти на уровне приложения, мы, вероятно, сможем точно определить, какая программа является виновником. Мы также можем увидеть необычный всплеск, который может означать что-то совершенно другое.

В другом сценарии мы можем увидеть, как выглядит система до и после развертывания. Если новый код создает какие-то странные условия, мы можем увидеть, как он влияет на другие наши компоненты, и сравнить его производительность с нашим старым кодом. Мы можем определить точки, в которых наш новый код показывает улучшение, и места, где мы, возможно, допустили ошибку.

Благодаря интеллектуальному сбору данных мы можем рассматривать нашу систему как систему, а не как свободный набор несвязанных компонентов.

Графитовые компоненты

Мы собираемся начать здесь немного назад и сначала поговорим о Graphite, графической библиотеке. Затем мы вернемся назад и рассмотрим некоторые программы, которые Graphite может использовать для получения данных.

Graphite — это графическая библиотека, отвечающая за хранение и отображение визуальных представлений данных. Это означает, что Graphite требует других приложений для сбора и передачи точек данных.

Сам проект Graphite состоит из нескольких различных компонентов, каждый из которых имеет определенную цель.

Графитовое веб-приложение

Наиболее заметным и динамичным компонентом установки Graphite является веб-приложение Graphite.

Здесь вы можете создавать графики, отображающие ваши данные:

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

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

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

Однако на этом гибкость не заканчивается. Graphite позволяет отображать графики по простому URL-адресу для встраивания в другие интерфейсы. Вы также можете экспортировать данные в неграфические представления, такие как JSON или CSV, или вывести SVG со встроенной информацией о данных.

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

Углерод

Carbon — это серверная часть хранилища для конфигурации Graphite. В одной конфигурации Graphite будет один или несколько демонов Carbon, отвечающих за обработку данных, отправляемых другими процессами, собирающими и передающими статистику (сборщики не являются частью Graphite).

Существует множество различных демонов Carbon, каждый из которых обрабатывает данные по-своему. Самый простой из них называется carbon-cache.py. Этот демон прямолинеен. Он прослушивает данные на порту и записывает эти данные на диск по мере их поступления эффективным способом.

Он сохраняет данные по мере их поступления, а затем сбрасывает их на диск по истечении заданного периода времени. Важно понимать, что компонент Carbon обрабатывает процедуры получения и сброса данных. Он не обрабатывает фактические механизмы хранения. Это остается за компонентом whisper, о котором мы сейчас поговорим.

Демону carbon-cache.py сообщается, с какими форматами, протоколами и портами работать. Также сообщается, какие политики хранения данных следует использовать для хранения данных. Они даны шепотом. В большинстве базовых конфигураций для обработки приема данных достаточно одного экземпляра carbon-cache.py.

Несколько экземпляров могут быть запущены одновременно по мере роста вашей установки. Их можно сбалансировать демоном carbon-relay.py или carbon-aggregator.py впереди.

Демон carbon-relay.py можно использовать для отправки запросов всем внутренним демонам для некоторой избыточности. Его также можно использовать для разделения данных по разным экземплярам carbon-cache.py, чтобы распределить нагрузку чтения по нескольким хранилищам.

Демон carbon-aggregator.py может буферизовать данные, а затем через некоторое время сбрасывать их в carbon-cache.py. Это может помочь уменьшить влияние обработки вашей статистики на систему за счет детализации.

Шепот

Whisper — это библиотека базы данных, которую Graphite использует для хранения отправляемой информации.

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

Например, вы можете хранить одну точку данных в секунду для определенной метрики. Вы можете сказать шепотом, что эти подробные данные должны храниться в течение 5 часов. У вас также может быть архив, в котором хранятся данные с более низким разрешением. Он может хранить только одну точку в минуту и хранить ее в течение 6 месяцев.

Каждая точка в архиве с более низким разрешением рассчитывается из тех же данных, которые записаны в архивах с более высоким разрешением. У вас может быть столько архивов с разным разрешением и скоростью хранения, сколько вы пожелаете. В зависимости от типа отслеживаемой метрики вы можете настроить способ вычисления данных для архивов с более низким разрешением.

Например, метрика может представлять собой количество раз, когда какое-либо событие происходит в течение короткого промежутка времени. Чтобы создать точку для большего временного интервала с более низким разрешением, вы должны сложить точки данных из архива с более высоким разрешением, чтобы суммировать значения данных за больший промежуток времени.

Whisper может вычислять данные с более низким разрешением другими способами в зависимости от характера метрик. Например, некоторые данные обобщаются путем усреднения, тогда как другие могут отслеживать максимальное значение. Для среднего фактическое среднее значение рассчитывается из точек с более высоким разрешением для создания точки с более низким разрешением. Для максимума следует сохранить самое высокое значение, а остальные следует отбросить, чтобы сохранить значение числа.

Whisper вычисляет и записывает данные с более низким разрешением в момент их получения (по истечении времени, необходимого для сбора необходимых значений). Он просто собирает точки данных, необходимые для выполнения метода агрегирования данных (среднее, максимальное и т. д.), а затем записывает их.

Graphite будет использовать архив с самым высоким разрешением, который содержит запрошенный период времени, когда он запрашивает данные для отображения графиков.

Сбор и доставка статистики

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

Ниже мы обсудим протоколы, которые понимает Graphite, а затем обсудим две популярные программы сбора, collectd и StatsD, которые можно использовать для передачи данных в Carbon для обработки.

Протоколы

Существует три разных протокола, которые вы можете использовать для отправки данных в Graphite.

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

Сообщения в виде обычного текста содержат информацию об имени метрики, присваиваемом значении и отметке времени для этого значения. Эти сообщения можно отправлять прямо в Carbon через порт, предназначенный для обычного текста, без дополнительного форматирования.

Поскольку Graphite создан на языке Python, Graphite также поддерживает формат сериализации данных «pickle». Этот стандарт Python позволяет буферизовать и отправлять несколько значений времени в одной транзакции.

Graphite также может принимать данные с помощью сообщений AMQP. Это позволяет более изящно обрабатывать большие объемы данных. С помощью этой конфигурации вы можете передавать большое количество статистических данных и обрабатывать прерывания сетевых подключений между удаленными хостами без потери данных.

Собрано

Один из самых простых способов собрать подробную информацию о сервере — с помощью демона collectd.

Collectd может собирать статистику о многих различных компонентах серверной среды. Это позволяет вам легко отслеживать общие показатели, такие как использование памяти, загрузка ЦП, сетевой трафик и т. д. Это позволяет вам легко сопоставлять события с состоянием ваших систем.

Помимо сбора стандартной системной информации, collectd также имеет систему плагинов, которая расширяет его функциональность. Это означает, что вы можете легко отслеживать распространенное программное обеспечение, такое как Apache, Nginx, iptables, memcache, MySQL, PostgreSQL, OpenVPN и многие другие.

Collectd предоставляет простой способ получения данных из приложений предварительной сборки и общих служб на ваших серверах. Это следует использовать для отслеживания поведения вашей инфраструктуры и сервисов, на которые вы полагаетесь.

СтатистикаD

StatsD — очень простой демон, который можно использовать для отправки других данных в Graphite. Преимущество этого подхода заключается в том, что становится тривиальным встраивание отслеживания статистики в приложения и системы, которые вы создаете.

StatsD работает, прослушивая интерфейс для простых пакетов UDP, которые представляют одну точку данных. Это означает, что он может принимать огромное количество информации без установления соединения. Затем он может агрегировать полученные значения и передавать их в Graphite.

Эта система позволяет отправлять статистику в больших количествах, не беспокоясь об увеличении задержки приложения. Служба StatsD будет собирать все данные по мере их поступления, агрегировать их, а затем отправлять в Graphite хорошие сводные точки данных в ожидаемые временные рамки.

Из-за этих преимуществ он на самом деле является хорошим посредником для любых данных, отправляемых в Graphite. Но основной способ, которым мы можем использовать это, — это мониторинг наших собственных приложений и инструментов, которые мы создаем.

StatsD идеально подходит для этого, потому что это демон общего назначения, который принимает UDP-трафик. Существует множество различных клиентских библиотек на разных языках программирования, которые могут отправлять данные непосредственно в экземпляр StatsD. Это означает, что приложения, которые вы создаете, могут легко отправлять данные для отслеживания.

Заключение

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

В следующем руководстве мы обсудим StatsD для Graphite, чтобы передавать статистику для мониторинга.

Джастин Эллингвуд