Pynba — pinba for python

в 10:06, , рубрики: pinba, python, Веб-разработка, статистика

Примечание переводчика:

Тихо и незаметно вышла pynba. Странно, что на хабре об этом еще не писали :)

Что это:

Pynba — это WSGI прослойка для pinba. С ее помощью вы можете собирать статистику / производить мониторинг сервера, используя интерфейс MySQL для чтения данных.

Она аккумулирует данные от Python процессов, отправляет их по UDP прототоколу и показывает статистику в красивом человекопонятном виде простых отчетов. Так же она предоставляет доступ только для чтения к сырым данным, что позволяет, например, создавать более детализированные отчеты.

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

Почему не другой обработчик статистики?

Потому что Pinba — это круто!

В IsCool Entertainment мы уже используем Pinba для мониторинга наших PHP приложений.

Требования

Библиотека требует Pinba, Protobuf и Werkzeug.

Сам процесс установки требует наличие setuptools.
Если его нет, пожалуйста, установите его.

Настройка

Если вы используете официальную версию, просто сделайте:

$ pip install iscool_e.pynba

Если же вы предпочитаете текущую (разрабатываемую) версию, то

$ git clone https://github.com/IsCoolEntertainment/pynba.git
$ python setup.py install

Использование

Скажите, где ваша главная WSGI программа:

def app(environ, start_response):
    ...

Импортируйте декоратор pynba и задекорируйте им главное приложение WSGI.

from iscool_e.pynba import monitor

@monitor(('127.0.0.1', 30002))
def app(environ, start_response):
    ...

Каждый раз, когда ваша программа будет запукаться, будет отправлен UDP поток.
В конечном счете вы можете использовать таймеры для измерения особо значимых участков вашего кода. Для этого просто импортируйте pynba proxy и используйте его для создания новых таймеров:

from iscool_e.pynba import pynba

timer = pynba.timer(foo="bar")
timer.start()
...
timer.stop()

Отличия от PHP extension

В отправляемых данных:

  • ru_utime и ru_stime показывают использование ресурсов текущего процесса, а не общих ресурсов.
  • размер страницы (document_size) не может быть вычислен автоматически с использованием текущей спецификации WSGI, но вы можете указать его самостоятельно, вот так, например:
    pynba.document_size = [YOUR VALUE]
    
  • memory_peak пока еще не имплементирован. Как же как и в предыдущем случае вы можете указать его вручную:
    pynba.memory_peak = [YOUR VALUE]
    

В таймерах:

  • Python-версия позволяет задавать несколько значений для каждой метки. Просто укажите любой sequence, mapping или callable. Этот пример:
    pynba.timer(foo='bar', baz=['seq1', 'seq2'], qux={'map1': 'val1'})
    

    породит 4 значения для трех меток в базе Pinba:

    ('foo', 'bar'),
    ('baz', 'seq1'),
    ('baz', 'seq2'),
    ('qux.map1', 'val1')
    

Лицензия

Пакет распространяется под MIT Licence. Пожалуйста прочтите LICENSE для полного описания.

Автор: dovg

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js