Автоматическое удаление хостов в zabbix
Данная тема, оговорит как можно удалить ненужный мусор с БД. Я не буду затрагивать тему, как можно выключить неиспользуемые хосты…. Это будет другая история….
Имеется несколько способов удалять хосты в zabbix:
- Использовать web-интерфейс самого заббикса и руками все удалять. Не есть труъ!
- Можно написать SQL для очистки хостов напрямую с БД. Ну, можно такое сделать — но установить LIMIT!
- Использовать Zabbix API.
Эти драконы ( я за разрабов заббикса) — не удосужились прикрутить нормальное удаление по триггеру. У них попросту нет такой функции в веб-интерфейсе и по этому…… Велосипеды — наше все! И куда же без костылей!
Вот полезное чтиво по установке, настройке и тюнингу заббикса:
Установка Zabbix из исходников в FreeBSD
Установка Zabbix на Debian/Ubuntu/Linux Mint
Установка Zabbix на RedHat/CentOS/Fedora
Установка Zabbix + nginx+php-fpm + mariaDB в Unix/Linux
Установка Zabbix-agent в Unix/Linux
Приступим…..
Вот готовый скрипт:
$ cat Delete_Hosts_from_Zabbix.py
Вывод:
#!/bin/env python3 import re, requests, sys, json, time from pyzabbix import ZabbixAPI from datetime import datetime # host, login, password to connect to zabbix-server Zabbix_Host='https://URL_to_Zabbix_Server' Zabbix_User='Zabbix_User' Zabbix_Password='Zabbix_Password' # You can use the Connection_Timeout Connection_Timeout = 25 # Verify SSL Verify_SSL = False # Connect to zabbix-server zapi = ZabbixAPI(Zabbix_Host, timeout=Connection_Timeout) zapi.session.verify = Verify_SSL if not Verify_SSL: from requests.packages.urllib3.exceptions import InsecureRequestWarning requests.packages.urllib3.disable_warnings(InsecureRequestWarning) r = requests.get(Zabbix_Host, verify=Verify_SSL) zapi.login(Zabbix_User,Zabbix_Password) zapi.session.auth = (Zabbix_User, Zabbix_Password) # re-define Connection_Timeout after zapi.timeout = Connection_Timeout Host_Names_array_for_Delete = [] Host_Names_array_for_Recommend_Delete = [] # Get_Groups, Get_Hosts Get_Groups = zapi.hostgroup.get() for group in Get_Groups: Group_ID = group['groupid'] if (int(group['groupid']) > 0): Get_Hosts = zapi.host.get(groupids=Group_ID, output=['hostid','name','status']) for host in Get_Hosts: Host_Name = host['name'] Host_ID = host['hostid'] Host_Name_Status = host['status'] if (Host_Name not in Host_Names_array_for_Delete) and (Host_Name_Status == '1'): Host_Names_array_for_Delete.append(Host_Name) All_Hosts_for_Delete = Host_Names_array_for_Delete Timestamp_Time_Now = int(time.mktime(datetime.now().timetuple())) Timestamp_Time_Now_value = datetime.fromtimestamp(Timestamp_Time_Now) # Time_Check_Days=30 Timestamp_Time_Check_Days = Timestamp_Time_Now - (3600 * 24 * Time_Check_Days) Timestamp_Time_Check_Days_value = datetime.fromtimestamp(Timestamp_Time_Check_Days) #regex Pattert_to_Find_Timestamp = r'(.*)_(\d{1,2}-\d{1,2}-\d{4}-\d{1,2}_\d{1,2})$' for host in All_Hosts_for_Delete: Check_Regex_Pat=re.split(Pattert_to_Find_Timestamp,host)[-2::][0] if re.search(r'\d{1,2}-\d{1,2}-\d{4}-\d{1,2}_\d{1,2}', Check_Regex_Pat): dt_obj = datetime.strptime(str(Check_Regex_Pat), '%d-%m-%Y-%H_%M') Check_Timestamp_Host=int(time.mktime(dt_obj.timetuple())) if Check_Timestamp_Host < Timestamp_Time_Check_Days: Host_Names_array_for_Recommend_Delete.append(host) if (len(Host_Names_array_for_Recommend_Delete) > 0): for host_for_delete in Host_Names_array_for_Recommend_Delete: Get_Hosts=zapi.host.get(filter={"name": host_for_delete}, output=['hostid','name']) for host in Get_Hosts: zapi.host.delete(host['hostid'])
Где:
- Pattert_to_Find_Timestamp — установленный патерн (hostname_%d-%m-%Y-%H_%M)! Если у вас используется другой, нужно распарсить под себя!
- Zabbix_Host=’https://URL_to_Zabbix_Server’ — УРЛ к заббикс серверу
- Zabbix_User=’Zabbix_User’ — Пользователь от которого будет удалятся хосты
- Zabbix_Password=’Zabbix_Password’ — Пароль от пользователя
- Time_Check_Days=30 — Все выключенные хосты свыше указанного числа (у меня стоит 30 дней) будут удалены.
Вот такой говно-код. Но рабочий!
Осталось добавить его в крон, например:
0 0 * * * /usr/local/bin/python3 Delete_Hosts_from_Zabbix.py
В 00:00 каждый день будет запускаться данный скрипт и чистить данные.
PS: Не забываем установить нужные либы через pip/pip3!
А на этом у меня все, статья «Автоматическое удаление хостов в zabbix» завершена.