Как заставить 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: неудачные журналы за интервал, который отслеживает графит.