StatsD — это « сетевой демон, который работает на платформе Node.js и прослушивает статистику, такую как счетчики и таймеры, отправляемую по UDP, и отправляет агрегаты одной или нескольким подключаемым внутренним службам».
Я уже упоминал, что StatsD в вашем стартапе нуждается в панели инструментов , над фруктовым блогом Земанты.
Идея StatsD заключается в следующем:
- Материал случается
- Отправить метрики «материала» в центральную службу (StatsD)
- StatsD действует как буфер, пересылая агрегированные метрики каждые X секунд
Ваша архитектура теперь имеет центральную службу, которая собирает все ваши метрики. Затем он подталкивает их к соответствующему программному обеспечению, которому не нужно обрабатывать слишком много трафика, и гарантируется, что данные будут поступать из одного источника в очищенном формате.
Мечта архитектора программного обеспечения.
Прямо из браузера?
Сбор данных в StatsD работает замечательно. Это быстро, надежно, чрезвычайно надежно, и вы можете предоставить ему практически любые данные, о которых вы только можете подумать.
Если ваш клиент не браузер.
Видите, StatsD принимает только пакеты UDP и браузеры, которые не позволяют отправлять пакеты UDP. Для этого есть веское оправдание — не имеет значения, потеряны ли некоторые пакеты, если все, что вы измеряете, не замедляется измерением.
Чтобы решить эту проблему, я создал простой прокси в node.js. Он принимает обычные HTTP-запросы и отправляет данные в StatsD. Надеюсь, простота гарантирует скорость.
API представляет собой простой пиксель отслеживания:
<img src="http://<address>?t=<type>&v=<value>&b=<bucket>" />
Где тип — один из c (счетчик) , t (таймер) , g (датчик) . Как в соответствии с соглашением об именах StatsD. А ведро — это просто название вашей метрики.
Источник на github. Не стесняйтесь использовать его.
Прямо в браузер
Хорошо, теперь мы можем собирать данные из браузера, но я также хочу отправить их прямо в браузер. Ничего из этого графического материала — я хочу использовать некоторые другие модные графики и визуализации. Да просто так.
Чтобы решить эту проблему, я реализовал сокет socket.io для StatsD. Его также можно найти на github -> https://github.com/etsy/statsd/pull/102.
Я надеюсь, что запрос на удаление будет объединен в ближайшее время или вообще в этом отношении. Я действительно считаю, что это полезное дополнение к StatsD, потому что это означает, что вы можете использовать любой клиентский javascript, который вы хотите сделать для визуализации, почти в реальном времени и все такое.
Данные передаются в простом формате:
{perSecond: {bucket1: 0.2,
bucket2: 0.1
},
counts: {bucket1: 2,
bucket2: 1
},
timers: {timer1: {upper: 2.4,
lower: 1.2,
count: 10}
},
gauges: {gauge1: 10
},
statsd: {numStats: 6},
timestamp: <unix timestamp>}
Цель?
Если все пойдет хорошо, я скоро смогу использовать cubism.js, чтобы привлечь симпатичные временные ряды трафика в этом блоге. И, эй, кто знает, что еще я могу придумать, чтобы добавить в личную панель своей жизни … Теперь у меня есть базовая структура. Время начать его использовать.
