График старых данных с использованием графита и statsd

Могу ли я ввести метку времени для отправки данных в графит через statsd (javascript statsd)? Мне нужно отобразить старые данные.

Ответы

Ответ 1

Нет, вы не можете сделать это с помощью statsd, однако вы можете добиться того же, отправив свои данные непосредственно на углерод, который принимает tiemstamps.

Statsd просто собирает данные в режиме реального времени и на сконфигурированные периоды суммы или усредняет каждую метрику, полученную в этот период, и отправляет ее на графический углеродный демона с текущей временной меткой.

Отправка данных на демоном углерода очень просто, вам просто нужно открыть сокет для общего углеродного порта (имеет другой порт, если вы хотите использовать рассол), а затем распечатать на нем один метрик в строке со следующими значениями: metric_name metric_value metric_timestamp

Carbon сохранит это значение в этой временной отметке, и вы можете использовать любую временную метку, которую хотите, до тех пор, пока она находится в диапазоне, настроенном для хранения этой метрики.

Существует много примеров, например этот, который нужно отправить netcat

Также существует графический клиент написанный на C

Ответ 2

Я хотел использовать statsd, но не в режиме реального времени, потому что обрабатываю файлы журнала один раз в час. Поэтому я изменил код сервера, чтобы принять временную метку, и изменил код клиента, чтобы отправить его. Это закончило работать для меня, хотя он чувствует себя очень "домом", и я не могу обновляться до более новых версий statsd без дополнительной работы. Сложная часть состоит в том, что сервер делает некоторую агрегацию в 10-секундные ковши. В режиме реального времени это довольно легко сделать, но если вы собираетесь принять временную метку, вам нужно хранить намного больше данных. Для меня, поскольку моим данным может быть всего около часа, это было не слишком сложно, но мое решение действительно не работает для общего случая.

Ответ 3

Похоже, есть способ отправить необработанные данные через STATSD, но он не будет агрегирован:

def send(self, subname, value, timestamp=None):
    '''Send the data to statsd via self.connection
    :keyword subname: The subname to report the data to (appended to the
        client name)
    :keyword value: The raw value to send
    '''
    name = self._get_name(self.name, subname)
    return statsd.Client._send(self, {name: '%s|r|%s' % (value, ts)})

см: http://python-statsd.readthedocs.org/en/latest/_modules/statsd/raw.html https://github.com/chuyskywalker/statsd/blob/master/README.md