Автоматическое удаление хостов в 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» завершена.