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 atrybucievaluetego obiektu. system.hostnameto 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ąhostnamezawierają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_idzawierają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 na2(pozycja trapper); jest to wymagane do odbierania wartości wysyłanych ze skryptu w kolejnych krokach.value_type- ustaw na3(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ąhostnamezawierają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}")