Статьи

Заставить StatsD напрямую общаться с браузером

StatsD — это « сетевой демон, который работает на   платформе Node.js и прослушивает статистику, такую ​​как счетчики и таймеры, отправляемую по  UDP,  и отправляет агрегаты одной или нескольким подключаемым внутренним службам».

Я уже упоминал, что StatsD в вашем стартапе нуждается в панели инструментов , над фруктовым блогом Земанты.

Идея StatsD заключается в следующем:

  1. Материал случается
  2. Отправить метрики «материала» в центральную службу (StatsD)
  3. 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, чтобы привлечь симпатичные временные ряды трафика в этом блоге. И, эй, кто знает, что еще я могу придумать, чтобы добавить в личную панель своей жизни … Теперь у меня есть базовая структура. Время начать его использовать.

Cubism.js делает блестящие сериалы