クイックスタートガイド

zabbix_utilsをインストールした後、スクリプトで使用できます。

このクイックスタートガイドでは、次の方法を紹介します。

  • Zabbixエージェントからホスト名を取得する。
  • Zabbix APIを使用してホストとトラッパーアイテムを作成する。
  • アイテムに値を送信する。

このガイドでは、スクリプトを段階的に示し、各部分を導入しながら説明します。 完全なスクリプトはページの最後にあります。

また、このガイドでは、Zabbixサーバー、エージェント、およびAPIがローカルで実行されていることを前提としています。

Zabbixエージェントからホスト名を取得する

まず、Zabbixエージェントが実行されているシステムのホスト名を取得します。 このホスト名は、Zabbix APIを使用してホストを作成する際に必要です。

1. zabbix_utils から Getter クラスをインポートします。 このクラスは Zabbix get と同様に動作し、Zabbixエージェントにデータを要求できます。

2. 127.0.0.1 のポート 10050 でローカルのZabbixエージェントに接続する Getter インスタンスを作成します。

3. Getter インスタンスで get() メソッドを呼び出し、Zabbixエージェントからホスト名を要求します。

  • get() メソッドは、アイテムキーをパラメータとして受け取り、そのアイテムに対するリクエストをZabbixエージェントに送信します。
  • get() メソッドはオブジェクトを返し、ホスト名はそのオブジェクトの value 属性に格納されます。
  • system.hostname は、ホスト名を返す組み込みのZabbixエージェントキーです。
from zabbix_utils import Getter

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

Zabbix APIに接続してログインする

次に、Zabbix APIに接続します。
これにより、スクリプトでホストやアイテムなどのZabbixオブジェクトを管理できるようになります。

1. zabbix_utilsから ZabbixAPI クラスをインポートします。

2. ZabbixAPI インスタンスを作成し、Zabbix WebインターフェースのURLを指定します。

3. ZabbixAPI インスタンスで login() メソッドを呼び出し、ユーザー名とパスワードを指定します。
アカウントには、Zabbix APIにアクセスするための権限が必要です。

4. API操作の完了後にセッションを閉じるため、logout() メソッドを呼び出します。

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()

Zabbixでホストを作成

Zabbixエージェントからホスト名を取得し、Zabbix API に接続できたので、Zabbixで新しいホストを作成できます。

1. ZabbixAPI インスタンスで host.create() APIメソッドを呼び出し、ホストの詳細を指定します。

  • host - Zabbixエージェントから取得したホスト名を含む hostname 変数を設定します。
  • interfaces - ホスト上で実行されているZabbixエージェントの接続情報を含みます。
  • groups - ホストが所属する少なくとも1つのホストグループを含みます。

2. Zabbix API は新しく作成されたホストのIDを返すため、このIDを後で使用できるよう host_id 変数に保存します。

3. ホストが作成されたことを確認するメッセージを表示します。

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}")

Zabbixで新しいアイテムを作成する

ホストを作成した後、そのホストにアイテムを追加できます。

1. 作成するアイテムに対して一意のキーを定義します。

2. ZabbixAPI インスタンスで item.create() メソッドを呼び出し、アイテムの詳細を指定します。

  • hostid - 作成したばかりのホストのIDを含む host_id 変数に設定します。
  • name - アイテムの名前です。
  • key_ - 先ほど定義した item_key 変数に設定します。
  • type - 2トラッパーアイテム)に設定します。これは、後続の手順でスクリプトから送信される値を受信するために必要です。
  • value_type - 3(符号なし数値)に設定します。これは、このアイテムに保存されるデータの種類です。

3. Zabbix API は新しく作成されたアイテムのIDを返すため、このIDを後で使用できるように item_id 変数に保存します。

4. アイテムが作成されたことを確認するメッセージを出力します。

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}")

ホストに値を送信

ホストとアイテムを作成したので、そこにデータを送信できます。

1. time クラスをインポートし、データを送信する前に数秒待機します。
これにより、Zabbix が新しいホストとアイテムを完全に処理したことを確認できます。

2. zabbix_utils から Sender クラスをインポートします。
このクラスは Zabbix sender と同様に動作し、スクリプトから Zabbix にデータを送信できます。

3. 127.0.0.1 のポート 10051 でローカルの Zabbix サーバーに接続する Sender インスタンスを作成します。

4. Sender インスタンスで send_value() メソッドを呼び出して、ホストのアイテムに値を送信し、次の詳細を指定します。

  • hostname - Zabbix エージェントから取得したホスト名を含む hostname 変数に設定します。
  • item_key - スクリプト内で先ほど定義した item_key 変数に設定します。
  • 1 - 送信する値です。

4. 値が送信されたことを確認するメッセージを出力します。

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}")

このコードが正常に実行されると、Zabbix が値を受信したことを示す成功メッセージが表示されます。

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

これで、Zabbix のWebインターフェース (Monitoring > 最新データ) でも値を確認できます。

完全なスクリプト

以下は、すべての手順を組み合わせた完全なスクリプトです。ホスト名の取得、Zabbix API を使用したホストとアイテムの作成、そして Zabbix へのデータ送信を行います。

import time
from zabbix_utils import Getter, ZabbixAPI, Sender

# Zabbixエージェントからホスト名を取得
agent = Getter(host='127.0.0.1', port=10050)
hostname = agent.get('system.hostname').value

# Zabbix API に接続してログイン
api = ZabbixAPI(url='127.0.0.1/zabbix')
api.login(user='Admin', password='zabbix')

# 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}")

# 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}")

# API からログアウト
api.logout()

# Zabbix が新しいホストを処理するまで待機
time.sleep(10)

# ホストに値を送信
sender = Sender(server='127.0.0.1', port=10051)
response = sender.send_value(hostname, item_key, 1)

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