Гид по технологиям

Настройка уведомлений Slack при заполнении диска на Linux

5 min read DevOps Обновлено 20 Dec 2025
Slack-уведомления при заполнении диска на Linux
Slack-уведомления при заполнении диска на Linux

Быстрые ссылки

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

Схема: проверка используемого и свободного пространства на диске

Как получить информацию о диске с помощью df

Для просмотра использования диска в Linux используют команду df. Опция -h выводит значения в удобочитаемом виде (ГБ/МБ):

df -h

Пример вывода команды df -h, перечислены файловые системы, размер, использование и точка монтирования

Команда выводит список смонтированных файловых систем, размер каждого устройства и процент заполнения. Чтобы получить значение конкретной файловой системы — например, корня — можно сузить выборку:

df /

Этот вывод содержит заголовок, поэтому полезно отфильтровать строку с конкретной точкой монтирования при помощи grep:

df / | grep /

Применение grep к выводу df, оставлена только строка с корнем

Затем из строки выбирают пятый столбец (процент) через 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.

Шаги:

  1. Откройте Slack API → Create an App, выберите рабочее пространство и укажите имя приложения (появится как источник сообщений).
  2. В разделе Add features and functionality выберите Incoming Webhooks.
  3. Включите Incoming Webhooks и создайте новый webhook, указав канал, в который будут отправляться сообщения.
  4. Скопируйте полученный URL и протестируйте примером curl — вы должны увидеть тестовое сообщение в указанном канале.

Вкладка Incoming Webhooks в портале Slack API для создания webhook'а

Выбор канала для вебхука — можно указать личные сообщения или создать отдельный канал для оповещений

После создания вебхука Slack обычно предлагает пример запроса, который можно скопировать и запустить, чтобы проверить доставку.

Собираем всё вместе: скрипт и cron

Ниже — минимальный «скелет» скрипта из оригинального примера (без команды отправки):

#!/bin/bash

CURRENT=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')

THRESHOLD=90

if [ "$CURRENT" -gt "$THRESHOLD" ] ; then

fi

Смысл: переменная CURRENT содержит процент заполнения корневого раздела, THRESHOLD — порог, при превышении которого будет отправлено уведомление.

Пример простого curl‑запроса (замените на ваш URL):

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 ниже текущего значения и запустить скрипт локально.

Пример уведомления в Slack с процентом заполнения и расширенным выводом df -h

Более информативные уведомления

Чтобы отправлять не только число, но и таблицу 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 для более точного контроля и логирования.

Мини‑методология тестирования и приёмки

  1. Локально: установите THRESHOLD ниже текущего значения и запустите скрипт вручную; проверьте, что сообщение приходит в Slack.
  2. Тест в cron: добавьте задачу на каждую минуту (на время теста), подтвердите стабильность и отсутствие дублирования сообщений.
  3. Интеграционное тестирование: имитируйте высокую загрузку (создайте временный файл) и проверьте, что оповещение срабатывает и логируется.
  4. Приёмка: скрипт должен отправлять одно уведомление при достижении порога и записывать событие в лог; уведомление должно содержать 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 лишними уведомлениями.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Подпись в встречах Outlook через Quick Step
Продуктивность

Подпись в встречах Outlook через Quick Step

Убрать подчёркивание ссылок в Word
Microsoft Word

Убрать подчёркивание ссылок в Word

Подключить Spotify к Waze — быстро и безопасно
Руководство

Подключить Spotify к Waze — быстро и безопасно

Календарь контента Notion — шаблон и инструкция
Инструменты

Календарь контента Notion — шаблон и инструкция

Как делать снимки экрана на Mac
Руководство

Как делать снимки экрана на Mac

Выбор таблицы или её части в Word — руководство
Microsoft Word

Выбор таблицы или её части в Word — руководство