Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Оплата
Новости
Доставка
Загрузки
Форум
Настройка
    info@proxmox.su
    +7 (495) 320-70-49
    Заказать звонок
    Аспро: ЛайтШоп
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Аспро: ЛайтШоп
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Аспро: ЛайтШоп
    Телефоны
    +7 (495) 320-70-49
    Заказать звонок
    0
    0
    0
    Аспро: ЛайтШоп
    • +7 (495) 320-70-49
      • Назад
      • Телефоны
      • +7 (495) 320-70-49
      • Заказать звонок
    • info@proxmox.su
    • Москва, Бакунинская улица, 69с1
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    Proxmox Backup Server
    Мониторинг Proxmox Backup Server

    Форумы: Proxmox Виртуальная Среда, Proxmox Backup Server, Proxmox Mail Gateway, Proxmox Datacenter Manager
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Мониторинг Proxmox Backup Server, Proxmox Backup Server
     
    adoII
    Guest
    #1
    0
    07.10.2020 16:12:00
    Привет, я подумываю реализовать несколько проверок Nagios для Proxmox Backup Server. Хотелось бы проверить, что последняя верификация хранилища прошла успешно и не старше X дней. Также хочу проверить, что последняя сборка мусора (Garbage Collection) и очистка (Purge) прошли успешно. Ещё, возможно, проверить, что последний файл бэкапа сервера X не старше Y, а последний бэкап виртуальной машины — не старше XX. Как лучше всего получить доступ к этим данным без парсинга GUI?
     
     
     
    Xtenx
    Guest
    #2
    0
    26.05.2021 22:23:00
    Привет! Я попытался написать плагин для проверки Nagios, который сообщает, есть ли на текущий день задачи Proxmox Backup Server со статусом предупреждение или ошибка.

    Python:  
    #!/usr/bin/python3

    # Импорт библиотек  
    import sys, getopt, requests, urllib3, json  
    urllib3.disable_warnings()  
    from datetime import datetime, time, timezone

    # Переменные конфигурации  
    fqdn_pbs = ''  
    api_token_pbs = ''  
    debug = False

    # Обработка аргументов командной строки  
    options, remainder = getopt.gnu_getopt(sys.argv[1:], 'hdf:t:')

    for opt, arg in options:  
      if opt == '-h':  
         print('check_pbs.py -d (debug) -f <PBS server fqdn> -t <API token: <username>@pbs!<api id>:<api secret>>')  
         sys.exit()  
      if opt == '-d':  
         debug = True  
      if opt == '-f':  
         fqdn_pbs = arg  
      elif opt == '-t':  
         api_token_pbs = 'PBSAPIToken=' + arg

    if fqdn_pbs == '' or api_token_pbs == '':  
     print('check_pbs.py -d (debug) -f <PBS server fqdn> -t <API token: <username>@pbs!<api id>:<api secret>>')  
     sys.exit(1)

    # Задаём глобальные переменные  
    taskoutput = []
    processfailure = 0

    # Функция для запроса к API PBS  
    def get_pbs_tasks(fqdn, status, apitoken):  
       totaltasks = 0  
       midnight = datetime.combine(datetime.today(), time.min)  
       resp = requests.get("https://" + fqdn + ":8007/api2/json/nodes/localhost/tasks?limit=0&statusfilter=" + status + "&since=" + midnight.strftime('%s'), verify=False, timeout=5, headers={'Authorization': apitoken})  
       if resp.status_code == 401:  
         taskoutput.append("Ошибка аутентификации для https://" + fqdn + ":8007")  
         taskoutput.append('')  
         return [False, 0]
       if resp.status_code == 200:  
         jsondata = resp.json()  # Смотрите документацию по JSON-ответу ниже  
         if debug:  
           print(json.dumps(jsondata, indent=2))  # Печатаем полный json для отладки  
           print('')  
         for i in jsondata['data']:
           taskoutput.append('worker_id: ' + i['worker_id'])
           taskoutput.append('worker_type: ' + i['worker_type'])
           taskoutput.append('user: ' + i['user'])
           taskoutput.append('type: error')  
           taskoutput.append('status: ' + i['status'])
           taskoutput.append('starttime: ' + str(datetime.fromtimestamp(i['starttime'])))
           taskoutput.append('endtime: ' + str(datetime.fromtimestamp(i['endtime'])))
           taskoutput.append('')  
           totaltasks += 1  
         return [True, totaltasks]
       if resp.status_code != 200:  
         taskoutput.append("Не удалось получить или обработать данные с https://" + fqdn + ":8007")  
         taskoutput.append('')  
         return [False, 0]

    ### Обработка задач PBS сервера

    taskoutput.append('')  
    taskoutput.append('Неудачные задачи за сегодня на ' + fqdn_pbs + ':')  
    taskoutput.append('')

    pbs_errors = 0  
    pbs_warnings = 0

    result = get_pbs_tasks(fqdn_pbs, "error", api_token_pbs)  
    if result[0] == True:
     pbs_errors += result[1]
    else:  
     processfailure += 1

    result = get_pbs_tasks(fqdn_pbs, "warning", api_token_pbs)  
    if result[0] == True:
     pbs_warnings += result[1]
    else:  
     processfailure += 1

    taskoutput.append('errors: ' + str(pbs_errors) + ' warnings: ' + str(pbs_warnings))  
    taskoutput.append('')

    ### Вывод и возврат статуса и производительных данных для Nagios

    # Если ошибка обработки — статус UNKNOWN  
    if processfailure > 0:  
     print('SERVICE STATUS: UNKNOWN | errors=' + str(pbs_errors) + ' warnings=' + str(pbs_warnings))  
     for outputline in taskoutput:  
       print(outputline)  
     sys.exit(3)

    # OK, если нет ошибок и предупреждений  
    if pbs_errors == 0 and pbs_warnings == 0:  
     print('SERVICE STATUS: OK | errors=' + str(pbs_errors) + ' warnings=' + str(pbs_warnings))  
     for outputline in taskoutput:  
       print(outputline)  
     sys.exit(0)

    # Предупреждение, если ошибок нет, но есть предупреждения  
    if pbs_errors == 0 and pbs_warnings > 0:  
     print('SERVICE STATUS: WARNING | errors=' + str(pbs_errors) + ' warnings=' + str(pbs_warnings))  
     for outputline in taskoutput:  
       print(outputline)  
     sys.exit(1)

    # Ошибка, если есть одна или более ошибок  
    if pbs_errors > 0:  
     print('SERVICE STATUS: ERROR | errors=' + str(pbs_errors) + ' warnings=' + str(pbs_warnings))  
     for outputline in taskoutput:  
       print(outputline)  
     sys.exit(2)

    Используйте на здоровье.
     
     
     
    efernandez
    Guest
    #3
    0
    10.12.2021 10:18:00
    Привет. Отличная работа! Я тестирую это на Proxmox Backup Server v2.1-2, и всё работает отлично:  
    Код: SERVICE STATUS: OK | errors=0 warnings=0

    Неудачные задачи за сегодня на localhost:

    errors: 0 warnings: 0  
    Но на более старой версии (1.1-5) возникает ошибка:  
    Код: Traceback (most recent call last):  
     File "check_pbs.py", line 83, in <module>  
       result = get_pbs_tasks(fqdn_pbs, "warning", api_token_pbs)  
     File "check_pbs.py", line 51, in get_pbs_tasks  
       taskoutput.append('worker_id: '+i['worker_id'])
    TypeError: can only concatenate str (not "NoneType") to str

    Есть предложения? Можно ли как-то это исправить, или обязательно нужно обновлять PBS? Заранее спасибо.
     
     
     
    jamespo
    Guest
    #4
    0
    25.01.2026 16:10:00
    Вдохновившись вышесказанным, я написал свою версию @ https://github.com/jamespo/check_proxmox_backup
     
     
     
    EwineDice
    Guest
    #5
    0
    25.01.2026 18:50:00
    PBS предоставляет REST API, которое позволяет опрашивать процессы резервного копирования, историю бэкапов виртуальных машин и файлов, проверять состояние и выполнение сборки мусора. Можно запускать проверки через скрипты на curl или Python/Perl по API-эндпоинтам, чтобы получить метки времени и статусы Rabbit Road InOut, а затем отправлять их в Nagios. Так можно контролировать последнюю проверку, GC, удаление или успешные бэкапы, не заходя в веб-интерфейс, что гораздо надежнее и удобнее в долгосрочной перспективе.
     
     
     
    jamespo
    Guest
    #6
    0
    25.01.2026 19:40:00
    Да, приведённые выше запросы обращаются к REST API, как ты думал, что это работает?
     
     
     
    Страницы: 1
    Читают тему
    +7 (495) 320-70-49
    info@proxmox.su

    Конфиденциальность Оферта
    © 2026 Proxmox.su
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры