Вот в первую очередь не хватает банального таймстемпа у запросов (его же нет, да?). Из-за этого я не могу получить точных секундных срезов. Во всяком случае по простому.
В моем случае я имею источник секундных «сырых» данных, которые потом как угодно используются. Хоть для реалтаймовых графиков, хоть для хранения с последующей агрегацией.
Да, посекундно. Пинба это да показывает, но не дает возможности по простому получать секундные среды, кроме как раз в секунду вычитывать новые записи из таблиц, что не очень удобно. Плюс не очень удобна работа с таймерами и «отчётами» по таймерам — нужно заранее сделать отчёты (и в случае с ррд графики по ним), в моем случае я всегда могу посмотреть что было пол-часа назад имея все данные и имея возможность делать какие угодно отчёты.
Если бы всё было так просто :) Пробовали, не подошло по кучи разных причин.
Но основной плюс данного демона — возможно посмотреть что происходит (тормозит) вот прям сейчас.
Да, хотим хранить данные за всё время.
Само собой архивные данные группируются за бОльший интервал, но цель была хранить данные за максимальный срок для анализа того как у нас меняются показатели с течением времени.
Например стали ли наши скрипты за год работать лучше или хуже.
Активно используем пинбу в течении последних 2х лет. Сразу как-то не понравилась зависимость от MySQLя, т.к. хотели хранить данные и иметь возможность мониторить работу в реальном времени.
В итоге был сделан свой демон: github.com/aryoh/pinba2zmq — слушает пинбу и отдает данные в zmq сокет раз в секунду. Теоретически можно и чаще, но нафига? :)
Написан на питоне, установка может показаться нетривиальной. Работает в продакшене на слабенькой vps'ке уже года полтора, сейчас держит нагрузку в 10к запросов к пхп в секунду, с 35-40к таймеров.
С него данные потом собираются и сохраняются в постоянное хранилище, плюс можно смотреть данные онлайн. Пример «клиента»:
#!/usr/bin/env python
from gevent_zeromq import zmq
import ujson
def pinba_slow():
context = zmq.Context()
sub = context.socket(zmq.SUB)
sub.connect("tcp://[хост с pinba2zmq]:5000")
sub.setsockopt(zmq.SUBSCRIBE, '')
try:
while True:
ts, requests = ujson.decode(sub.recv())
cnt = 0
for info in requests:
(hostname, server, script), (rps, request_size, request_time), timers = info
cnt = cnt + rps
print ts, 'requests per second:', cnt
except KeyboardInterrupt:
pass
if __name__ == '__main__':
pinba_slow()
Буду рад если кому-то ещё он будет полезен :)
В дальнейшем надеюсь выложим в опенсорс и вывод графиков и остальные компоненты системы.
В моем случае я имею источник секундных «сырых» данных, которые потом как угодно используются. Хоть для реалтаймовых графиков, хоть для хранения с последующей агрегацией.
Но основной плюс данного демона — возможно посмотреть что происходит (тормозит) вот прям сейчас.
Само собой архивные данные группируются за бОльший интервал, но цель была хранить данные за максимальный срок для анализа того как у нас меняются показатели с течением времени.
Например стали ли наши скрипты за год работать лучше или хуже.
phantomjs.org
github.com/marcelduran/yslow/wiki/PhantomJS
gist.github.com/3179988
В итоге был сделан свой демон: github.com/aryoh/pinba2zmq — слушает пинбу и отдает данные в zmq сокет раз в секунду. Теоретически можно и чаще, но нафига? :)
Написан на питоне, установка может показаться нетривиальной. Работает в продакшене на слабенькой vps'ке уже года полтора, сейчас держит нагрузку в 10к запросов к пхп в секунду, с 35-40к таймеров.
С него данные потом собираются и сохраняются в постоянное хранилище, плюс можно смотреть данные онлайн. Пример «клиента»:
Буду рад если кому-то ещё он будет полезен :)
В дальнейшем надеюсь выложим в опенсорс и вывод графиков и остальные компоненты системы.
И оплату по карточкам охота :)