У нас бекапы с корпоративного сервера сохраняются, в том числе, на яндекс диск. Мы там прикупили терабайт облака, и вот совсем недавно он уже начал забиваться.
Пока написать автоматический «удалятор» старых дампов руки не доходят, набросал простой скрипт для проверки свободного места и уведомления заббиксом меня об этом.
Подготавливаем токен для доступа к яндекс.диску по api:
- Заходим на https://tech.yandex.ru/disk/rest/, там есть ссылка на документацию и полигон
- В документации находим инструкцию, как получить токен ручками (https://tech.yandex.ru/oauth/doc/dg/tasks/get-oauth-token-docpage/). Там же находим страницу для создания приложения: https://oauth.yandex.ru/client/new
- Указываем произвольное название, выбираем Права: «Яндекс.Диск REST API» и справа галочку «Доступ к информации о Диске»
- В самом низу тыкаем пвсевдоссылку «Подставить URL для разработки» и жмем Сохранить.
- Копируем ID
- Открываем страницу https://oauth.yandex.ru/authorize?response_type=token&client_id=<идентификатор приложения> , подставляя скопированный ID в урле, нажимаем Разрешит, и перед нами наш токен. Сохраняем его, чтобы не потерять
Теперь с этим токеном можно поиграться на полигоне:
- Открываем https://tech.yandex.ru/disk/poligon/
- Вводим свой токен в поле
- Нас интересует раздел /v1/disk : Диск пользователя. Разворачиваем аккордеон, выбираем метод Get. Видим в описании список доступных полей, нам нужны total_space и used_space. Вписываем их через запятую в поле возвращаемых параметров.
- Жмем попробовать. Видим результат в виде json объекта с двумя записями. Если в ответе пишет Не авторизован — значит проблема с токеном, получаем еще раз и внимательно проверяем что ничего не перепутали.
- В поле URL запроса копируем адрес api, к которому будем обращаться из нашего скрипта
Теперь у нас есть нужный урл api яндекса и токен, можем писать скрипт
#!/usr/bin/env python import pycurl import pprint import json from io import BytesIO c = pycurl.Curl() data = BytesIO() c.setopt(c.URL, 'https://cloud-api.yandex.net:443/v1/disk?fields=total_space%2C%20used_space') c.setopt(pycurl.HTTPHEADER, ['Authorization: OAuth &lt;токен&gt;']) c.setopt(c.WRITEFUNCTION, data.write) c.perform() d = json.loads(data.getvalue()) pprint.pprint((d['total_space']-d["used_space"])/1024/1024/1024)
Скрипт, в принципе, в комментариях не нуждается, отмечу только, что в последней строке мы вычитаем из общего размера нашего яндекс диска занятое пространство и приводим цифру к гигабайтам.
Теперь настроим заббикс:
- Кладем этот скрипт в папку /usr/lib/zabbix/externalscripts, я назвал его pyandex.py
- В заббиксе в Настройках для нужного Узла сети (в моем случае это Zabbix server, по дефолту) создаем новый элемент данных. В качестве имени указываем произвольное название, у меня это «Проверка места на яндекс диске», Тип: Внешняя проверка, Ключ — имя файла, который мы положили в папку в п.1. У меня это pyandex.py. Пишем без полного пути, просто имя скрипта
- Ставим нужный интервал обновления, здесь по потребностям. У меня стоит два раза в сутки. Сохраняем.
- Переходим в Мониторинг — Последние данные, смотрим на значение нашего новосозданного элемента данных.
Дальше по вкусу. Я настроил график, триггер (срабатывает при значении свободного места меньше 100 гигов), и уведомление смской. Соответственно, можно прогнозировать заполнение диска, работы по удалению старых и ненужных бекапов (или докупанию лишнего терабайта ;)