perfmetrics обеспечивает простой способ добавить показатели производительности программного обеспечения для библиотек Python и приложений & NBSP;. Используйте perfmetrics найти истинные узкие места в приложении производства.
Пакет perfmetrics является клиентом демона Statsd по Etsy, который в свою очередь является клиентом графита (в частности, углерода демон). Поскольку пакет perfmetrics посылает UDP пакеты Statsd, perfmetrics не добавляет никаких задержек ввода / вывода для приложений и маленькой загрузкой процессора. Он может работать одинаково хорошо в резьбовой (синхронно) или программного обеспечения (асинхронного) событиями.
Использование
Используйтеmetric иmetricmethod декораторов, чтобы обернуть функции и методы, которые должны отправить времени и статистику вызовов для Statsd. Добавить декораторов к любой функции или метода, которые могут быть узким местом, в том числе библиотечных функций.
Образец:
от perfmetrics импортировать метрика
от perfmetrics импорта metricmethod
metric
Def MyFunction ():
& NBSP; "" "Сделайте что-нибудь, что может быть дороже" ""
класс MyClass (объект):
& NBSP;metricmethod
& NBSP; Def MyMethod (само):
& NBSP; "" "У некоторых других, возможно, дорогую вещь" ""
Далее, скажите perfmetrics, как подключиться к Statsd. (Пока вы этого не сделаете, декораторы не имеют никакого эффекта.) В идеале, приложение должно читать Statsd URI из конфигурационного файла в момент запуска, но ниже пример использует жестко URI для простоты:
от perfmetrics импорта set_statsd_client
set_statsd_client ('statsd: // локальный: 8125 ")
для I в xrange (1000):
& NBSP; MyFunction ()
& NBSP;. MyClass () MyMethod ()
Если вы запустите этот код, он будет стрелять 2000 пакетов UDP в порт 8125. Тем не менее, если вы уже установили графит и Statsd, все эти пакеты будут игнорироваться, и упал. Падение это хорошо: вы не хотите, чтобы ваш Производство приложение на провал или замедлить только потому, что производительность системы контроля останавливается или не работает.
Установите Графит и Statsd получить и график метрики. Один хороший способ, чтобы установить их является graphite_buildout пример на GitHub, который устанавливает графит и Statsd в пользовательском месте без корневого доступа.
Threading
В то время как большинство программ отправить метрики из любого потока в единый глобальный сервер Statsd, некоторые программы необходимо использовать другой сервер Statsd для каждого потока. Если вам нужно только сервер глобального Statsd, используйте функцию set_statsd_client при запуске приложения. Если вам нужно использовать другой сервер Statsd для каждого потока, используйте объект statsd_client_stack в каждом потоке. Используйте толчок, поп, и четкие методы.
Графит Советы
Графит хранит каждый метрику временного ряда с несколькими резолюциями. Второй образец разрешения graphite_buildout магазины 10 в течение 48 часов, 1 час резолюции в течение 31 дней, и резолюции 1 день в течение 5 лет. Для получения крупнозернистый значение из мелкозернистого значение, графит вычисляет среднее значение (среднее) для каждого временного интервала.
Потому Графит вычисляет средние значения неявно, самый разумный способ для лечения счетчики в графит как "хитов в секунду" значение. Таким образом, график не может производить правильные результаты независимо от того, какое разрешение он использует уровень.
Лечение счетчики, как парад в секунду приводит к нежелательным последствиям, однако. Если метрика видит 1000 хит шип в одну секунду, а затем падает до нуля в течение по крайней мере 9 секунд, графит диаграмма для этого показателя будет выброс 100, не 1000, поскольку графит получает метрики каждые 10 секунд и шип выглядит Графит как 100 хитов в секунду на второй период 10.
Если вы хотите, чтобы ваш график, чтобы показать 1000 хиты вместо 100 запросов в секунду, применить функцию Графит HitCount (), используя разрешение 10 секунд или более. Функция преобразует HitCount за секунду значения, чтобы приблизить сырье рассчитывает хит. Будьте уверены, чтобы обеспечить значение достаточно большой, чтобы быть представлены по меньшей мере одной ширины пикселя на графике разрешения результате, в противном случае графит будет вычислить средние хит пунктам и производить заблуждение граф.
Это, как правило, имеет смысл лечить нулевые значения в графите как ноль, хотя это не по умолчанию; по умолчанию, графит ничего не рисует для значений NULL. Вы можете включить этот вариант для каждого графика.
Справочная документация
Декораторы
metric
& NBSP; Сообщает Statsd использованием UDP каждый раз при вызове функции. Отправляет как вызов графов и временной информации. Название метрики направленном Statsd является <модуль>. <Имя функции>.
metricmethod
& NBSP; Какmetric, но имя Statsd метрики <модуль класса> <имя класса> <имя метода>...
Метрическая (стат = нет, ставка = 1, метод = False, считать = Правда, времени = True)
& NBSP; декоратор или контекст менеджер с вариантами.
& NBSP; стат имя метрики, чтобы отправить; установить его на None, чтобы использовать имя функции или метода. Скорость позволяет уменьшить количество пакетов, отправляемых на Statsd выбрав случайную выборку; например, установить его на 0,1, чтобы отправить одну десятую часть пакетов. Если параметр метода, правда, имя метрики по умолчанию на основе имени класса метода, а не имени модуля. Установка счетчика Ложь отключает статистику счетчика, отправленные Statsd. Установка времени Ложь отключает статистику синхронизации, отправленные Statsd.
& NBSP; использование Образец декоратором:
& NBSP;Metric ('frequent_func ", ставка = 0,1, время = False)
& NBSP; Def frequent_func ():
& NBSP; "" "Сделайте что-нибудь быстрый и часто" ""
& NBSP; использование Образец качестве менеджера контекста:
& NBSP; Def do_something ():
& NBSP; с метрической ("doing_something '):
& NBSP; пас
& NBSP; Если perfmetrics посылает пакеты слишком часто, UDP пакеты могут быть потеряны, а производительность приложений могут быть затронуты. Вы можете уменьшить количество пакетов и нагрузку на процессоры, используя метрики декоратор с опциями вместо метрики или metricmethod. Пример декоратор выше использует частоту дискретизации и статический имя метрики. Это также отключает сбор информации синхронизации.
& NBSP; При использовании метрической как менеджер контекстного, вы должны предоставить параметр стат или ничего не будет записано.
Функции
statsd_client ()
& NBSP; Возврат текущей конфигурации StatsdClient. Возвращает поточно-местный клиента, если есть один, или глобальная клиент, если есть один, или ни.
set_statsd_client (client_or_uri)
& NBSP; Устанавливает глобальную StatsdClient. Client_or_uri может быть StatsdClient, А statsd: // URI, или Нет.
statsd_client_from_uri (URI)
& NBSP; Создать StatsdClient из URI. Типичный Ури statsd: // локальный: 8125. Поддерживаемые дополнительные параметры запроса являются префиксом и gauge_suffix. Префикс по умолчанию пуст и gauge_suffix умолчанию .. Смотрите документацию StatsdClient для получения дополнительной информации о gauge_suffix.
Методы StatsdClient
Код Python можете отправить пользовательских метрик сначала получить текущий StatsdClient, используя метод statsd_client (). Обратите внимание, что statsd_client () не возвращает None, если клиент не был настроен.
Большинство перечисленных ниже способов есть дополнительные ставки и Buf параметры. Параметр скорости, при установке на значение меньше 1, вызывает StatsdClient отправить случайную выборку пакетов, а не каждый пакет. Если параметр BUF список, StatsdClient добавляет содержимое пакета в список BUF, а не посылать пакет, что делает возможным для отправки нескольких обновлений в одном пакете. Имейте в виду, что размер UDP пакетов ограничено (предел варьируется в зависимости от сети, но 1000 байт, как правило, хорошее предположение), и любые дополнительные байты будут игнорироваться молча.
времени (стат, стоимость, ставка = 1, ЬиЕ не = None)
& NBSP; Запись информации времени. стат имя метрики для записи и значение измерения времени в миллисекундах. Обратите внимание, что Statsd поддерживает несколько точек данных для каждого временной метрики, так временные показатели могут занять больше места, чем счетчиков или датчиков.
Датчик (стат, стоимость, суффикс = нет, ставка = 1, ЬиЕ не = None)
& NBSP; Обновление значение калибра. стат имя метрики для записи и значение новое значение калибровочной. Манометр представляет собой постоянную величину, такую как размер пула. Потому что датчики из разных машинах часто конфликта, суффикс обычно применяется для оценки имена. Если параметр суффикс строка (в том числе пустую строку), то она перекрывает калибра умолчанию суффикс.
инкр (стат, рассчитывать = 1, скорость = 1, ЬиЕ не = None)
& NBSP; Увеличиваем счетчик на кол. Следует отметить, что все Statsd очищает значение счетчика каждый раз он посылает метрики в графит, который обычно происходит каждые 10 секунд. Если вам нужно постоянное значение, то оно может быть более целесообразно использовать датчик вместо счетчика.
убыв (стат, рассчитывать = 1, скорость = 1, ЬиЕ не = None)
& NBSP; Уменьшение счетчика по количеству.
sendbuf (BUF)
& NBSP; Выслать содержимое списка BUF для Statsd
Что нового В этом выпуске:
- Добавлена опция пирамиды. анимации и аналогичное приложение WSGI-фильтр, который устанавливает клиента Statsd для каждого запроса.
Что нового в версии 0.9.4:.
- Оптимизированный использование сниженным ставкам образца
Что нового в версии 0.9.2:
- Метрическая теперь можно использовать либо как декоратор или менеджер контекстного.
- Сделано подпись StatsdClient больше как StatsClient Джеймса Сокол в.
Требования
- Python
Комментарии не найдены