Thank you for reading this post, don't forget to subscribe!
Наиболее простой пример использования alertmanager в системе мониторинга Prometheus — получение предупреждений о доступном свободном месте на жестких дисках.
Давайте разберемся, как с помощью функции predict_linear()
получать полезные и своевременные предупреждения!
Чаще всего предупреждения о заканчивающемся свободном месте на жестких дисках приходят когда диск заполнен на 80-90%. Иногда можно настроить получение уведомлений при оставшемся свободном месте объемом, например, 10 гигабайт. Эти подходы хороши когда жесткие диски на серверах заполняются постепенно и медленно, но что делать если вдруг диск начинает заполняться экспоненциально?
Функция predict_linear()
в системе мониторинга Prometheus позволяет получить предупреждение когда диск будет заполнен, например, в течении 4 часов.
Примечание. Несложно догадаться, что название функции происходит от английского to predict — предсказывать.
Выглядеть это будет примерно так:
[codesyntax lang="php"]
1 2 3 4 5 6 |
ALERT DiskWillFillIn4Hours IF predict_linear(node_filesystem_free{job='node'}[1h], 4*3600) < 0 FOR 5m LABELS { severity="page" } |
[/codesyntax]
Рассмотрим данный пример подробнее. В первой строке
1 2 |
<span class="hljs-attribute">ALERT</span> DiskWillFillIn4Hours |
начало описания уведомления и его название. Вторая строка — самая важная
1 2 |
<span class="hljs-keyword">IF</span> predict_linear(node_filesystem_free{job=<span class="hljs-string">'node'</span>}[<span class="hljs-number">1</span>h], <span class="hljs-number">4</span>*<span class="hljs-number">3600</span>) < <span class="hljs-number">0</span> |
Выражение node_filesystem_free{job='node'}[1h]
вычисляет динамику заполнения диска за последний час и с помощью predict_linear()
прогнозирует заполненность диска на следующие 4 часа (4 * 3600 секунд), и если свободного места предположительно остается меньше 0, то будет отправлено предупреждение.
Примечание. Способ отправки предупреждения будет зависеть от ваших индивидуальных настроек alertmanager
- это может быть письмо или смс-сообщение.
Строка
1 2 |
<span class="hljs-attribute">FOR</span> <span class="hljs-number">5m</span> |
позволяет подождать 5 минут перед отправкой предупреждения, для того чтобы исключить из прогнозирования внезапные и аномальные всплески. Метки (LABELS
) вы можете добавить по своему вкусу и необходимости.
Все это можно поместить в файл правил (назовем его node.rules
) и дописать путь к этому файлу в конфиг Prometheus (prometheus.yml
):
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 |
global: scrape_interval: "15s" # Paths are relative to the configuration file. rule_files: - path/to/node.rules scrape_configs: - - - |
[/codesyntax]
Не забываем перезапустить Prometheus для применения изменений