Настройка уведомлений Slack при заполнении диска на Linux
Быстрые ссылки
- Получить свободное место командой df
- Настроить уведомления в Slack из командной строки
- Собрать всё вместе: скрипт + cron

Как получить информацию о диске с помощью df
Для просмотра использования диска в Linux используют команду df. Опция -h выводит значения в удобочитаемом виде (ГБ/МБ):
df -h
Команда выводит список смонтированных файловых систем, размер каждого устройства и процент заполнения. Чтобы получить значение конкретной файловой системы — например, корня — можно сузить выборку:
df /Этот вывод содержит заголовок, поэтому полезно отфильтровать строку с конкретной точкой монтирования при помощи grep:
df / | grep /
Затем из строки выбирают пятый столбец (процент) через awk и убирают знак процента через sed. В итоге одна команда возвращает только число — процент заполнения:
df / | grep / | awk '{ print $5}' | sed 's/%//g'Например, она вернёт 39 (означает 39%). Если нужно отслеживать другой раздел — замените первый аргумент df (например, df /var).
Настройка уведомлений Slack через Incoming Webhooks
Самый простой способ отправлять уведомления в Slack — использовать Incoming Webhooks. Это URL, принимающий POST‑запросы с JSON‑телом. Преимущества: не нужно регистрировать бота или настраивать OAuth, формат сообщения задаётся JSON.
Шаги:
- Откройте Slack API → Create an App, выберите рабочее пространство и укажите имя приложения (появится как источник сообщений).
- В разделе Add features and functionality выберите Incoming Webhooks.
- Включите Incoming Webhooks и создайте новый webhook, указав канал, в который будут отправляться сообщения.
- Скопируйте полученный URL и протестируйте примером curl — вы должны увидеть тестовое сообщение в указанном канале.


После создания вебхука Slack обычно предлагает пример запроса, который можно скопировать и запустить, чтобы проверить доставку.
Собираем всё вместе: скрипт и cron
Ниже — минимальный «скелет» скрипта из оригинального примера (без команды отправки):
#!/bin/bash
CURRENT=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
THRESHOLD=90
if [ "$CURRENT" -gt "$THRESHOLD" ] ; then
fiСмысл: переменная CURRENT содержит процент заполнения корневого раздела, THRESHOLD — порог, при превышении которого будет отправлено уведомление.
Пример простого curl‑запроса (замените
curl -X POST -H 'Content-type: application/json' --data "{"text":"Your server `$(hostname)` is currently at ${CURRENT}% disk capacity."}"Этот запрос отправляет в канал сообщение с именем хоста и текущим процентом заполнения. Вставьте такой curl внутрь блока if, чтобы уведомления отправлялись только при превышении порога.
Ниже — как всё выглядит вместе (улучшенная версия с корректным именем файла и без опечаток):
#!/bin/bash
CURRENT=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
THRESHOLD=90
if [ "$CURRENT" -gt "$THRESHOLD" ] ; then
curl -X POST -H 'Content-type: application/json' --data "{"text":"Your server `$(hostname)` is currently at ${CURRENT}% disk capacity."}"
fiСохраните как diskspace.sh в домашней папке и сделайте исполняемым:
chmod +x ~/diskspace.shОткройте crontab и добавьте задачу, чтобы запускать проверку каждый час:
crontab -e
# добавить в конец
0 * * * * ~/diskspace.shПосле этого скрипт будет запускаться ежечасно; чтобы протестировать работу, можно вручную уменьшить THRESHOLD ниже текущего значения и запустить скрипт локально.

Более информативные уведомления
Чтобы отправлять не только число, но и таблицу df -h, можно включить её в текст сообщения, обернув в блок кода Markdown. Пример:
curl -X POST -H 'Content-type: application/json' --data "{"text":"Your server `$(hostname)` is currently at ${CURRENT}% disk capacity.\n\n```$(df -h)```"}"Обратите внимание, что при составлении строки JSON нужно корректно экранировать символы и переносы строк. На некоторых системах удобнее использовать –data-raw или файл с телом запроса.
Безопасность и надёжность
Important: treat webhook URL as a secret. Любой, у кого есть URL, может отправлять сообщения от имени вашего интегратора.
Рекомендации по безопасности:
- Не храните URL в репозиториях и в явном виде в скриптах.
- Храните URL в переменной окружения (например, DISKSPACE_WEBHOOK) или в файле с правами 600 и читайте его в скрипте.
- Ограничьте доступ к crontab и к самому скрипту (chmod 700).
- Логируйте отправку уведомлений в файл с ротацией или в syslog, чтобы понимать историю оповещений.
Пример безопасного скрипта с переменной окружения:
#!/bin/bash
# Ожидается, что DISKSPACE_WEBHOOK экспортирована в окружении
if [ -z "$DISKSPACE_WEBHOOK" ]; then
echo "DISKSPACE_WEBHOOK не задан. Выход."
exit 1
fi
CURRENT=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
THRESHOLD=90
if [ "$CURRENT" -gt "$THRESHOLD" ] ; then
PAYLOAD=$(printf '{"text":"%s is at %s%% disk usage.\n\n```%s```"}' "$(hostname)" "$CURRENT" "$(df -h)")
curl -s -X POST -H 'Content-type: application/json' --data "$PAYLOAD" "$DISKSPACE_WEBHOOK"
fiСохраните DISKSPACE_WEBHOOK в защищённом месте, например в /etc/default/diskspace (chmod 600) и добавьте экспорт в профиль crontab:
# /etc/default/diskspace
export DISKSPACE_WEBHOOK='https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX'И в crontab укажите запуск через оболочку, которая загрузит файл с переменными:
0 * * * * . /etc/default/diskspace; /home/youruser/diskspace.shАльтернативные подходы
- Использовать систему мониторинга (Prometheus + node_exporter + Alertmanager) — даёт гибкие правила и историю метрик.
- Использовать готовые SaaS‑решения для мониторинга (Datadog, New Relic, Zabbix) с интеграцией в Slack.
- Отправлять оповещения по e‑mail или в мессенджеры, поддерживающие webhooks.
- Использовать systemd timer вместо cron для более точного контроля и логирования.
Мини‑методология тестирования и приёмки
- Локально: установите THRESHOLD ниже текущего значения и запустите скрипт вручную; проверьте, что сообщение приходит в Slack.
- Тест в cron: добавьте задачу на каждую минуту (на время теста), подтвердите стабильность и отсутствие дублирования сообщений.
- Интеграционное тестирование: имитируйте высокую загрузку (создайте временный файл) и проверьте, что оповещение срабатывает и логируется.
- Приёмка: скрипт должен отправлять одно уведомление при достижении порога и записывать событие в лог; уведомление должно содержать hostname и текущую заполненность; webhook не должен быть раскрыт в репозитории.
Критерии приёмки
- Скрипт выдерживает многократные запуски без утечки памяти/файлов.
- Уведомление приходит в Slack в течение одной минуты после выполнения скрипта при условии превышения порога.
- URL вебхука не хранится в публичном коде и доступен только админам.
Чек‑лист ролей
SRE/DevOps:
- Убедиться, что скрипт управляется конфигурацией и хранится в защищённом месте.
- Настроить ротацию логов и алерты вторичного уровня.
Разработчик/Администратор сервера:
- Установить и протестировать скрипт на тестовом хосте.
- Настроить crontab и убедиться в корректной загрузке переменных окружения.
Владелец приложения:
- Определить допустимый THRESHOLD и SLAs для реакции на уведомления.
Шаблоны и сниппеты
Простой рабочий скрипт (кратко):
#!/bin/bash
CURRENT=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
THRESHOLD=90
if [ "$CURRENT" -gt "$THRESHOLD" ] ; then
curl -X POST -H 'Content-type: application/json' --data "{"text":"$(hostname) at ${CURRENT}%"}"
fiБолее безопасный шаблон (переменная окружения и лог):
#!/bin/bash
LOG=/var/log/diskspace_alert.log
if [ -z "$DISKSPACE_WEBHOOK" ]; then
echo "$(date) - DISKSPACE_WEBHOOK not set" >> $LOG
exit 1
fi
CURRENT=$(df / | awk 'NR==2 {gsub(/%/,"",$5); print $5}')
THRESHOLD=90
if [ "$CURRENT" -gt "$THRESHOLD" ]; then
PAYLOAD=$(printf '{"text":"%s at %s%%\n```%s```"}' "$(hostname)" "$CURRENT" "$(df -h)")
curl -s -X POST -H 'Content-type: application/json' --data "$PAYLOAD" "$DISKSPACE_WEBHOOK"
echo "$(date) - Alert sent: ${CURRENT}%" >> $LOG
fiКогда подход не годится
- Вам нужны долгосрочные метрики и ретеншн (сохранение истории) — используйте мониторинг, а не только cron‑скрипты.
- Нужны сложные правила маршрутизации алертов (например, групповая эскалация) — используйте Alertmanager или специализированный сервис.
Итог
Вышеописанный подход даёт быстрый результат: простой скрипт + cron + Slack webhook — минимальное средство оповещения о заполнении диска. Для продакшена рекомендуются дополнительные меры безопасности, логирование и переход на полноценную систему мониторинга по мере роста инфраструктуры.
Notes: храните секреты отдельно, тестируйте порог и не перегружайте канал Slack лишними уведомлениями.
Похожие материалы
Подпись в встречах Outlook через Quick Step
Убрать подчёркивание ссылок в Word
Подключить Spotify к Waze — быстро и безопасно
Календарь контента Notion — шаблон и инструкция
Как делать снимки экрана на Mac