Как заставить Graphite просто считать счетчики, а не оценивать их по времени

Я использую Graphite и Collectd для мониторинга своего сервера. В частности, я использую подключаемый модуль tail для подсчета неудачных попыток входа по SSH. Я использую счетчик для этой метрики, поэтому ожидайте увидеть 1, 2, 3, 0 и т. д. для точек данных. Однако то, что я вижу, это 0,1, 0,2, 0,3, 0 и т. Д. Мне кажется, что Graphite обеспечивает подсчет в секунду. Я говорю это, потому что моя политика хранения — одна точка данных каждые 10 секунд в течение двух часов. Таким образом, 1 неудачный вход в систему за 10 секунд = 0,1 в секунду. Я смотрю на это на графике. Это выглядит так:

Изображение

Кроме того, когда я масштабирую до следующего уровня удержания, числа корректируются соответствующим образом: так, 1 неудачный вход в систему, который был показан как 0,1, теперь отображается намного меньше, чем это: 0,017 или что-то в этом роде.

Я не думаю, что это связано с используемым методом агрегирования: даже самые точные данные отключены. Как я могу заставить Graphite рассматривать эту метрику как чистый, необработанный счетчик?

Вот мой файл storage-schemas.conf (политика хранения):

[my_server]
pattern = .*
retentions = 10s:2h,1m:2d,30m:400d

Вот моя конфигурация плагина collectd tail:

<Plugin "tail">
    <File "/var/log/auth.log">
            Instance "auth"
            <Match>
                    Regex "sshd[^:]*: Failed password"
                    DSType "CounterInc"
                    Type "counter"
                    Instance "sshd-invalid_user"
            </Match>
    </File>
</Plugin>

А вот моя конфигурация плагина write_graphite (который отправляет данные в graphite):

<Plugin write_graphite>
    <Node "my_server_name">
            Host "localhost"
            Port "2003"
            Protocol "tcp"
            LogSendErrors true
            Prefix "collectd."
            #Postfix ""
            StoreRates true
            AlwaysAppendDS false
            EscapeCharacter "_"
    </Node>
</Plugin>

Я попытался установить StoreRates false для плагина write_graphite, но это не сработало. Это действительно изменило поведение: когда я выполнил один неудачный вход в систему SSH, эта метрика отображается как 1. Однако она не упала до 0. Когда я выполнил еще два неудачных входа в систему, метрика увеличилась до 3.

Также интересно: я также загрузил плагин пользователей, который просто показывает количество пользователей, вошедших в систему, и он отлично работает: показывает 1, когда я вхожу в SSH, два, когда я снова вхожу в SSH, и возвращаюсь к 1, когда я выхожу из одного SSH. Для обеих настроек StoreRates. Так что кажется, что то, что я хочу, возможно каким-то образом. Может быть, не с хвостовым плагином.

Входы в систему SSH с StoreRates false вместе с правильным поведением для пользователей, вошедших в систему, можно увидеть на этих графиках:

Изображение

Есть идеи? Спасибо,


person Cameron Lee    schedule 17.08.2014    source источник


Ответы (3)


Вы просите систему подсчитать количество событий. И это именно то, что он делает: он подсчитывает количество неудачных входов в систему с момента его запуска. Независимо от того, используете ли вы StoreRates или нет, просто меняется способ отображения этой информации: в виде скорости или в виде необработанного счетчика. Счетчик никогда не может уменьшаться! На самом деле вы запрашиваете счетчик, который сбрасывается при чтении: подсчитайте количество неудачных входов в систему с момента последней проверки collectd.

Как оказалось, для этого можно использовать тип источника данных ABSOLUTE в rrdtool, но это вам не поможет.

Сделайте шаг назад и подумайте о том, чего вы пытаетесь достичь: количество неудачных попыток входа в систему в секунду кажется мне совершенно разумной метрикой!

person faxmodem    schedule 17.08.2014
comment
Ты прав. Спасибо за перспективу. Итак, о чем я прошу, так это о том, чтобы метрика была мерой. Плагин tail не поддерживает это для подсчета строк. Возможно, я посмотрю другие плагины. - person Cameron Lee; 17.08.2014
comment
Я вижу, как количество неудачных входов в систему имеет смысл в системе с большими объемами, но для меня я буду получать достаточно низкие числа, чтобы это было не так интуитивно понятно, как сброс счетчика: когда я смотрю на агрегированные данные для в минуту я понимаю 4 легче, чем 4/60 = 0,067. Я также обнаружил, что метки оси графика плохо масштабируются для небольших чисел, таких как это: я вижу графики с 0,0 для каждого тика. Может быть, если я выберу лучшие периоды хранения, это будет лучше. Например, сделав их все делителями 10. - person Cameron Lee; 17.08.2014
comment
Где вы видите, что скорость, сохраненная с помощью StoreRate как true, указана в секунду? Я нигде не могу найти это задокументировано. - person Alec Henninger; 20.06.2015
comment
В справочной странице types.db упоминается, что в collectd используются следующие источники данных: вдохновлен rrdtool. В упомянутой справочной странице rrdcreate явно упоминается, что типы COUNTER и DERIVE хранятся как посекундная ставка - person faxmodem; 25.06.2015

Хотя ответ swissunix очень полезен, для достижения желаемого поведения я в итоге использовал Logster вместо Собран. С Logster вы пишете часть кода, которая анализирует файл, а также часть кода, которая возвращает метрику. Таким образом, несмотря на то, что деление счетчика на время распространено в Logster, вам не нужно делать это, если вы не хотите: существует большая гибкость.

Я разместил свои парсеры здесь: https://github.com/camlee/logster-parsers

person Cameron Lee    schedule 30.09.2014

Если вы установите для StoreRates значение false, в графите вы можете применить производную функцию к постоянно увеличивающемуся счетчику, чтобы получить скорость увеличения за интервал хранения, которая будет соответствовать вашим требованиям.

Например. в вашем примере сообщения об 1 неудачном входе в систему, затем 2 вы видели значения 1 и 3. Производная 1 и 2: неудачные журналы за интервал, который отслеживает графит.

person Alec Henninger    schedule 20.06.2015