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 метрики <модуль класу> <ім'я класу> <ім'я методу> ...
Метрична (стат = None, швидкість = 1, метод = False, вважати = True, терміни = 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. Типовий URI є statsd: // локальний: 8125. Підтримувані додаткові параметри запиту є префікс і gauge_suffix. Префікс за умовчанням є порожнім і gauge_suffix замовчуванням .. Дивіться документацію StatsdClient для отримання додаткової інформації про gauge_suffix.
Методи StatsdClient
Код Python можна відправити користувальницькі метрики спочатку отримання поточної StatsdClient, використовуючи метод statsd_client (). Зверніть увагу, що statsd_client () не повертає None, якщо клієнт не був налаштований.
Більшість із зазначених нижче способів є додаткові ставки і БУФ параметри. Параметр ставка, при установці на значення менше 1, викликає StatsdClient відправити випадкову вибірку пакетів, а не кожен пакет. Якщо параметр BUF є списком, StatsdClient додає вміст пакету в список BUF, а не послати пакет, що робить можливим, щоб відправити кілька оновлень в одному пакеті. Майте на увазі, що розмір UDP пакетів обмежена (межа варіюється залежно від мережі, але 1000 байт, як правило, хороше припущення), і будь-які додаткові байти будуть ігноруватися мовчки.
часу (стат, вартість, ставка = 1, ЬіЕ НЕ = None)
І NBSP; Запис інформації часу. стат ім'я метрики для запису і значення вимірювання часу в мілісекундах. Зверніть увагу, що Statsd підтримує кілька точок даних для кожного часової метрики, так часові показники можуть зайняти більше місця, ніж лічильники або датчиків.
Датчик (стат, вартість, суфікс = None, швидкість = 1, ЬіЕ НЕ = None)
І NBSP; оновити значення калібру. стат ім'я метрики для запису і значення нового значення міра. Датчик являє собою постійне значення, наприклад розміру пулу. Тому що датчики з різних машин часто суперечать, суфікс зазвичай застосовується для оцінки імена. Якщо параметр суфікс рядка (у тому числі порожній рядок), то вона перекриває калібру суфіксом.
інкр (стат, вважайте = 1, швидкість = 1, ЬіЕ НЕ = None)
І NBSP; приріст лічильника на кіл. Слід зазначити, що Statsd очищає всі значення лічильника кожен раз, коли він посилає метрики в графіт, який зазвичай відбувається кожні 10 секунд. Якщо необхідно постійне значення, то воно може бути більш доцільно використовувати датчик замість лічильника.
ВЗЦЗ (стат, вважайте = 1, швидкість = 1, ЬіЕ НЕ = None)
І NBSP; Зменшення лічильника за кількістю.
sendbuf (ЬіЕ)
І NBSP; Вислати вміст списку BUF для Statsd
Що нового У цьому випуску:
- Додана опція піраміди. Твін та аналогічні додатки WSGI фільтр, який встановлює клієнта Statsd для кожного запиту.
Що нового у версії 0.9.4 :.
- Оптимізація використання зменшених ставок зразка
Що нового у версії 0.9.2:
- Метрична тепер можна використовувати або як декоратор або менеджер контексту.
- Зроблено підпис StatsdClient більше як StatsClient Джеймса Сокіл-х років.
Вимоги
- Python
Коментар не знайдено