Привет! Хотел поделиться своим скриптом для мониторинга статуса резервного копирования VM в Proxmox. Написан для использования в CheckMK. Необходимо, чтобы CheckMK linux client был установлен на proxmox. Должен быть легко адаптирован для других систем, таких как zabbix, nagios и т.д. Нужно положить скрипт в: /usr/lib/check_mk_agent/local/ и сделать его исполняемым командой chmod +x checkmk_proxmox_backup.py. Смело используйте его. (MIT Licence)
Python: #!/usr/bin/python3
# Укажите узлы для проверки (можно указать больше одного узла, только если у вас кластер)
nodes = ['pm0', 'pm1', 'pm2']
# Как далеко назад во времени должен искать скрипт, проверьте на работоспособность из командной строки: date -d "-3 days" +%s
past_time = "-3 days"
####### Не изменяйте ничего ниже этой строки ##########
import subprocess
import json
import datetime
class Backup:
def __init__(self, vmid):
self.vmid = vmid
self.newestendtime = 0
self.node = ''
self.status = ''
vms = {}
for node in nodes:
command = f'pvesh get /nodes/{node}/tasks/ -typefilter vzdump --output-format json -since `date -d "{past_time}" +%s`'
# Раскомментируйте следующую строку для отладки - чтобы найти ошибки
#command = f'pvesh get /nodes/{node}/tasks/ -typefilter vzdump -errors --output-format json' ## для отладки, чтобы находить ошибки
(command_status, command_output) = subprocess.getstatusoutput(command)
tasks = json.loads(command_output)
for task in tasks:
if task['id'] in vms:
if vms[task['id']].newestendtime < task['endtime']: #есть более новая задача, поэтому обновляем
vms[task['id']].newestendtime = task['endtime']
vms[task['id']].node = task['node']
vms[task['id']].status = task['status']
else:
vms[task['id']] = Backup(task['id'])
vms[task['id']].newestendtime = task['endtime']
vms[task['id']].node = task['node']
vms[task['id']].status = task['status']
# Теперь оцениваем:
for vm in sorted(vms):
ts = datetime.datetime.fromtimestamp(vms[vm].newestendtime).strftime('%Y-%m-%d %H:%M:%S')
if vms[vm].status == 'OK':
print(f'0 "VM-Backup {vm}" - "Последнее резервное копирование VM {vm} успешно выполнено {ts} на узле {vms[vm].node} со статусом {vms[vm].status}')
else:
print(f'2 "VM-Backup {vm}" - "Последнее резервное копирование VM {vm} не удалось {ts} на узле {vms[vm].node} со статусом {vms[vm].status}')
Python: #!/usr/bin/python3
# Укажите узлы для проверки (можно указать больше одного узла, только если у вас кластер)
nodes = ['pm0', 'pm1', 'pm2']
# Как далеко назад во времени должен искать скрипт, проверьте на работоспособность из командной строки: date -d "-3 days" +%s
past_time = "-3 days"
####### Не изменяйте ничего ниже этой строки ##########
import subprocess
import json
import datetime
class Backup:
def __init__(self, vmid):
self.vmid = vmid
self.newestendtime = 0
self.node = ''
self.status = ''
vms = {}
for node in nodes:
command = f'pvesh get /nodes/{node}/tasks/ -typefilter vzdump --output-format json -since `date -d "{past_time}" +%s`'
# Раскомментируйте следующую строку для отладки - чтобы найти ошибки
#command = f'pvesh get /nodes/{node}/tasks/ -typefilter vzdump -errors --output-format json' ## для отладки, чтобы находить ошибки
(command_status, command_output) = subprocess.getstatusoutput(command)
tasks = json.loads(command_output)
for task in tasks:
if task['id'] in vms:
if vms[task['id']].newestendtime < task['endtime']: #есть более новая задача, поэтому обновляем
vms[task['id']].newestendtime = task['endtime']
vms[task['id']].node = task['node']
vms[task['id']].status = task['status']
else:
vms[task['id']] = Backup(task['id'])
vms[task['id']].newestendtime = task['endtime']
vms[task['id']].node = task['node']
vms[task['id']].status = task['status']
# Теперь оцениваем:
for vm in sorted(vms):
ts = datetime.datetime.fromtimestamp(vms[vm].newestendtime).strftime('%Y-%m-%d %H:%M:%S')
if vms[vm].status == 'OK':
print(f'0 "VM-Backup {vm}" - "Последнее резервное копирование VM {vm} успешно выполнено {ts} на узле {vms[vm].node} со статусом {vms[vm].status}')
else:
print(f'2 "VM-Backup {vm}" - "Последнее резервное копирование VM {vm} не удалось {ts} на узле {vms[vm].node} со статусом {vms[vm].status}')


