Примечание переводчика:
Тихо и незаметно вышла 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