After you have installed zabbix_utils, you can use it in your script.
This quickstart guide shows you how to:
The guide presents the script step by step, explaining each part as it is introduced. The complete script is provided at the end of the page.
The guide also assumes your Zabbix server, agent, and API are running locally.
Start by retrieving the hostname of the system where Zabbix agent is running. You will need this hostname to create a host using Zabbix API.
1. Import the Getter class from zabbix_utils. This class works like Zabbix get and lets you request data from Zabbix agent.
2. Create a Getter instance that connects to the local Zabbix agent at 127.0.0.1 on port 10050.
3. Call the get() method on the Getter instance to request the hostname from Zabbix agent.
get() method takes an item key as its parameter and sends a request to Zabbix agent for that item.get() method returns an object, and the hostname is stored inside the value attribute of that object.system.hostname is a built-in Zabbix agent key that returns the host's name.from zabbix_utils import Getter
agent = Getter(host='127.0.0.1', port=10050)
hostname = agent.get('system.hostname').valueNext, connect to the Zabbix API. This lets your script manage Zabbix objects such as hosts and items.
1. Import the ZabbixAPI class from zabbix_utils.
2. Create a ZabbixAPI instance and provide the URL of your Zabbix web interface.
3. Call the login() method on the ZabbixAPI instance and provide your username and password. The account must have permission to access Zabbix API.
4. Call the logout() method to close the session after API operations.
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()Now that you have the hostname from Zabbix agent and you're connected to Zabbix API, you can create a new host in Zabbix.
1. Call the host.create() API method on the ZabbixAPI instance and provide the host details:
host - set to the hostname variable containing the hostname you retrieved from Zabbix agent.interfaces - contains connection details for Zabbix agent that's running on the host.groups - contains at least one host group the host should belong to.2. Since Zabbix API returns the ID of the newly created host, save this ID in the host_id variable for later use.
3. Print a message to confirm the host was created.
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}")After creating a host, you can add an item to it.
1. Define a unique key for the item to be created.
2. Call the item.create() method on the ZabbixAPI instance and provide the item details:
hostid - set to the host_id variable containing the ID of the host you just created.name - a name for the item.key_ - set to the item_key variable you just defined.type - set to 2 (trapper item), required to receive values sent from your script in the following steps.value_type - set to 3 (numeric unsigned), the type of data this item stores.3. Since Zabbix API returns the ID of the newly created item, save this ID in the item_id variable for later use.
4. Print a message to confirm the item was created.
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}")Now that you've created your host and item, you can send data to it.
1. Import the time class and wait a few seconds before sending the data. This ensures Zabbix has fully processed your new host and item.
2. Import the Sender class from zabbix_utils. This class works like Zabbix sender and lets your script send data to Zabbix.
3. Create a Sender instance that connects to the local Zabbix server at 127.0.0.1 on port 10051.
4. Call the send_value() method on the Sender instance to send a value to your host's item and provide these details:
hostname - set to the hostname variable containing the hostname you retrieved from Zabbix agent.item_key - set to the item_key variable you just defined earlier in your script.1 - the value to send.4. Print a message to confirm the value was sent.
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}")After this code runs successfully, you should see a success message indicating Zabbix received your value:
Now you can also check your Zabbix web interface (Monitoring > Latest data) to see the value.
Below is the complete script that combines all the steps: retrieving the hostname, creating the host and item using Zabbix API, and sending data to Zabbix.
import time
from zabbix_utils import Getter, ZabbixAPI, Sender
# Retrieve host name from Zabbix agent
agent = Getter(host='127.0.0.1', port=10050)
hostname = agent.get('system.hostname').value
# Connect and log in to Zabbix API
api = ZabbixAPI(url='127.0.0.1/zabbix')
api.login(user='Admin', password='zabbix')
# Create host in 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}")
# Create item in 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}")
# Log out from API
api.logout()
# Wait for Zabbix to process new host
time.sleep(10)
# Send value to host
sender = Sender(server='127.0.0.1', port=10051)
response = sender.send_value(hostname, item_key, 1)
print(f"Sender response: {response}")