Przewodnik szybkiego startu

Po zainstalowaniu zabbix_utils możesz używać go w swoim skrypcie.

Ten przewodnik szybkiego startu pokazuje, jak:

  • Pobierać nazwę hosta z Zabbix agent.
  • Tworzyć host i pozycja typu trapper za pomocą Zabbix API.
  • Wysyłać wartość do pozycji.

Przewodnik przedstawia skrypt krok po kroku, wyjaśniając każdą część w miarę jej wprowadzania. Na końcu strony znajduje się kompletny skrypt.

W przewodniku założono również, że Twój serwer Zabbix, agent i API działają lokalnie.

Pobieranie nazwy hosta z Zabbix agent

Zacznij od pobrania nazwy hosta systemu, na którym działa Zabbix agent. Ta nazwa hosta będzie potrzebna do utworzenia hosta przy użyciu Zabbix API.

1. Zaimportuj klasę Getter z zabbix_utils. Ta klasa działa podobnie jak Zabbix get i umożliwia żądanie danych z Zabbix agent.

2. Utwórz instancję Getter, która łączy się z lokalnym Zabbix agent pod adresem 127.0.0.1 na porcie 10050.

3. Wywołaj metodę get() na instancji Getter, aby zażądać nazwy hosta z Zabbix agent.

  • Metoda get() przyjmuje klucz pozycji jako parametr i wysyła żądanie do Zabbix agent o tę pozycję.
  • Metoda get() zwraca obiekt, a nazwa hosta jest przechowywana w atrybucie value tego obiektu.
  • system.hostname to wbudowany klucz Zabbix agent, który zwraca nazwę hosta.
from zabbix_utils import Getter

agent = Getter(host='127.0.0.1', port=10050)
hostname = agent.get('system.hostname').value

Połącz się i zaloguj do Zabbix API

Następnie połącz się z Zabbix API. Pozwoli to Twojemu skryptowi zarządzać obiektami Zabbix, takimi jak hosty i pozycje.

1. Zaimportuj klasę ZabbixAPI z zabbix_utils.

2. Utwórz instancję ZabbixAPI i podaj adres URL swojego interfejsu webowego Zabbix.

3. Wywołaj metodę login() na instancji ZabbixAPI i podaj swoją nazwę użytkownika oraz hasło. Konto musi mieć uprawnienie do uzyskiwania dostępu do Zabbix API.

4. Wywołaj metodę logout(), aby zamknąć sesję po zakończeniu operacji API.

from zabbix_utils import ZabbixAPI

api = ZabbixAPI(url='127.0.0.1/zabbix')
api.login(user='Admin', password='zabbix')

# API operations go here

api.logout()

Utwórz host w Zabbix

Teraz, gdy masz nazwę hosta z Zabbix agent i jesteś połączony z Zabbix API, możesz utworzyć nowy host w Zabbix.

1. Wywołaj metodę API host.create() na instancji ZabbixAPI i podaj szczegóły hosta:

  • host — ustaw na zmienną hostname zawierającą nazwę hosta pobraną z Zabbix agent.
  • interfaces — zawiera szczegóły połączenia dla Zabbix agent uruchomionego na hoście.
  • groups — zawiera co najmniej jedną grupę hostów, do której host powinien należeć.

2. Ponieważ Zabbix API zwraca ID nowo utworzonego hosta, zapisz to ID w zmiennej host_id do późniejszego użycia.

3. Wyświetl komunikat potwierdzający, że host został utworzony.

api.host.create(
    host=hostname,
    interfaces=[{
        'type': 1,
        'main': 1,
        'useip': 1,
        'ip': '127.0.0.1',
        'dns': '',
        'port': '10050',
    }],
    groups=[{'groupid': '2'}]
)

host_id = host['hostids'][0]

print(f"Host '{hostname}' created with ID {host_id}")

Utwórz nową pozycję w Zabbix

Po utworzeniu hosta możesz dodać do niego pozycję.

1. Zdefiniuj unikalny klucz dla pozycji, która ma zostać utworzona.

2. Wywołaj metodę item.create() na instancji ZabbixAPI i podaj szczegóły pozycji:

  • hostid - ustaw na zmienną host_id zawierającą ID hosta, który został właśnie utworzony.
  • name - nazwa pozycji.
  • key_ - ustaw na zmienną item_key, którą właśnie zdefiniowano.
  • type - ustaw na 2 (pozycja trapper); jest to wymagane do odbierania wartości wysyłanych ze skryptu w kolejnych krokach.
  • value_type - ustaw na 3 (numeric unsigned), czyli typ danych przechowywanych przez tę pozycję.

3. Ponieważ Zabbix API zwraca ID nowo utworzonej pozycji, zapisz to ID w zmiennej item_id do późniejszego użycia.

4. Wyświetl komunikat potwierdzający utworzenie pozycji.

item_key = 'app.myservice.heartbeat'

item = api.item.create(
    hostid=host_id,
    name='App heartbeat',
    key_=item_key,
    type=2,
    value_type=3,
)

item_id = item['itemids'][0]

print(f"Item '{item_key}' created with ID {item_id}")

Wyślij wartość do hosta

Teraz, gdy utworzyłeś host i pozycję, możesz wysłać do niej dane.

1. Zaimportuj klasę time i odczekaj kilka sekund przed wysłaniem danych. Dzięki temu Zabbix w pełni przetworzy nowy host i pozycję.

2. Zaimportuj klasę Sender z zabbix_utils. Ta klasa działa podobnie jak Zabbix sender i umożliwia skryptowi wysyłanie danych do Zabbix.

3. Utwórz instancję Sender, która łączy się z lokalnym serwerem Zabbix pod adresem 127.0.0.1 na porcie 10051.

4. Wywołaj metodę send_value() na instancji Sender, aby wysłać wartość do pozycji hosta, i podaj następujące szczegóły:

  • hostname — ustaw na zmienną hostname zawierającą nazwę hosta pobraną z Zabbix agent.
  • item_key — ustaw na zmienną item_key, którą właśnie wcześniej zdefiniowałeś w skrypcie.
  • 1 — wartość do wysłania.

4. Wyświetl komunikat potwierdzający, że wartość została wysłana.

import time
time.sleep(10)

from zabbix_utils import Sender

sender = Sender(server='127.0.0.1', port=10051)

response = sender.send_value(hostname, item_key, 1)

print(f"Sender response: {response}")

Po pomyślnym wykonaniu tego kodu powinien zostać wyświetlony komunikat o powodzeniu informujący, że Zabbix odebrał wartość:

Sender response: {"processed": 1, "failed": 0, "total": 1, "time": "0.000151", "chunk": 1}

Teraz możesz również sprawdzić wartość w interfejsie webowym Zabbix (Monitoring > Latest data).

Kompletny skrypt

Poniżej znajduje się kompletny skrypt, który łączy wszystkie kroki: pobranie nazwy hosta, utworzenie hosta i pozycji przy użyciu Zabbix API oraz wysłanie danych do Zabbix.

import time
from zabbix_utils import Getter, ZabbixAPI, Sender

# Pobierz nazwę hosta z Zabbix agent
agent = Getter(host='127.0.0.1', port=10050)
hostname = agent.get('system.hostname').value

# Połącz z Zabbix API i zaloguj się
api = ZabbixAPI(url='127.0.0.1/zabbix')
api.login(user='Admin', password='zabbix')

# Utwórz host w Zabbix
host = api.host.create(
    host=hostname,
    interfaces=[{
        'type': 1,
        'main': 1,
        'useip': 1,
        'ip': '127.0.0.1',
        'dns': '',
        'port': '10050',
    }],
    groups=[{'groupid': '2'}]
)

host_id = host['hostids'][0]

print(f"Host '{hostname}' created with ID {host_id}")

# Utwórz pozycję w Zabbix
item_key = 'app.myservice.heartbeat'

item = api.item.create(
    hostid=host_id,
    name='App heartbeat',
    key_=item_key,
    type=2,
    value_type=3
)

item_id = item['itemids'][0]

print(f"Item '{item_key}' created with ID {item_id}")

# Wyloguj się z API
api.logout()

# Poczekaj, aż Zabbix przetworzy nowy host
time.sleep(10)

# Wyślij wartość do hosta
sender = Sender(server='127.0.0.1', port=10051)
response = sender.send_value(hostname, item_key, 1)

print(f"Sender response: {response}")