クイックスタートガイド

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操作を記述

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のローカルZabbixサーバーにポート10051で接続する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インターフェース(監視 > 最新データ)で値を確認できます。

完全なスクリプト

以下は、ホスト名の取得、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}")