Автоматическое удаление хостов в zabbix

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

Оптимизация настроек Zabbix

Настройка Grafana с Graphite/Zabbix/Prometheus/MySQL/InfluxDB/Elasticsearch/CloudWatch для сбора и отображения метрик в 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» завершена.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.