Pynba — pinba for python

Original author: johnnoone
  • Translation
Примечание переводчика:
Тихо и незаметно вышла 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 для полного описания.
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 11

    +5
    Сейчас в комментариях к этому посту совершенно точно оставят ссылки на statsd и, может быть, даже на sentry :D
      0
      statsd тут каким боком?
        0
        Тем, что в python world обычно именно им и мониторят. И каунтеры, и таймеры, и udp. Вообще никаким боком не похожие задачи решают, да. Понятно, что для любителей php приятно, что появился притащенный из экосистемы инструмент. Мы даже не задаем вопрос «зачем оно здесь?». Мы искренне интересуемся, «чем оно лучше?» и с удовольствием прочли статью. Спасибо автору.

        И пусть расцветают сто цветов.
        0
        Я не сравниваю с либой, представленной в статье, но есть такой вопрос:
        эти либы умеют работать в реальном времени? Под реальным временем я понимаю посылка статистики раз в несколько миллисекунд и обновление графиков раз в полсекунды.
        0
        «программа будет запукаться»
        попробуйте меньше гороха ей давать ))
          +1
          Спасибо. К новой клавиатуре привыкаю. :)
          0
          А есть что-то такое, только для сей и так. чтобы статистика отсылалась сотни раз в секунду, а графики всякие обновлялись раз в секунду?
            +1
            Есть. Graphite, Carbon, и т.д. по этим словам. Держит вполне.
              0
              А любопытно — какие задачи бывают, чтобы видеть актуальные данные с точностью до секунды?
                0
                В моем случае это для отладки и оптимизации надо. А пишу я симуляцию обработки материала на ЧПУ станках, одна из подзадач — программный рендеринг (программный на видеокарте как ни странно). Просто часто надо видеть, что же там происходит внутри приложения во время рендеринга, а рендеринг — штука быстрая, поэтому такие требования.

                Я почитал про Graphite, Carbon, такое ощущение, что они разработаны, все же, немного под другие задачи… Хотя попробовать можно.

            Only users with full accounts can post comments. Log in, please.