Как стать автором
Обновить

Pynba — pinba for python

Время на прочтение2 мин
Количество просмотров2.5K
Автор оригинала: johnnoone
Примечание переводчика:
Тихо и незаметно вышла 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 для полного описания.
Теги:
Хабы:
Всего голосов 30: ↑25 и ↓5+20
Комментарии11

Публикации

Истории

Работа

Python разработчик
137 вакансий
Data Scientist
61 вакансия

Ближайшие события