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

Я использую Graphite и Collectd для мониторинга моего сервера. В частности, я использую хвостовой плагин для подсчета неудачных входов в 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

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

<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 (который отправляет данные в графит):

<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.

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

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

Образ

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

3 ответа

Решение

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

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

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

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

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

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

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

Другие вопросы по тегам