[comment]: # aside:2

[comment]: # ({e4e166a4-ebcec779})
# クイックスタートガイド

zabbix\_utilsを[インストール](/devel/python/installation)した後、スクリプトで使用できます。

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

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

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

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

[comment]: # ({/e4e166a4-ebcec779})

[comment]: # ({8ff8a246-7917ae33})
#### Zabbixエージェントからホスト名を取得する

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

1\. zabbix\_utils から `Getter` クラスをインポートします。
このクラスは [Zabbix get](/manual/concepts/get) と同様に動作し、Zabbixエージェントにデータを要求できます。

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

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

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

```python
from zabbix_utils import Getter

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

[comment]: # ({/8ff8a246-7917ae33})

[comment]: # ({8f96b279-7bec0e05})
#### Zabbix APIに接続してログインする

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

1\. zabbix\_utilsから `ZabbixAPI` クラスをインポートします。

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

3\. `ZabbixAPI` インスタンスで `login()` メソッドを呼び出し、ユーザー名とパスワードを指定します。  
アカウントには、Zabbix APIにアクセスするための[権限](/manual/web_interface/frontend_sections/users/user_roles#default-permissions)が必要です。

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

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

[comment]: # ({/8f96b279-7bec0e05})

[comment]: # ({8776420b-6f1a3be3})
#### Zabbixでホストを作成

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

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

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

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

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

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

[comment]: # ({/8776420b-6f1a3be3})

[comment]: # ({14e2596a-b8e7e66c})
#### Zabbixで新しいアイテムを作成する

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

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

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

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

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

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

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

[comment]: # ({/14e2596a-b8e7e66c})

[comment]: # ({6d0ff9a9-10296181})
#### ホストに値を送信

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

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

2\. zabbix\_utils から `Sender` クラスをインポートします。  
このクラスは [Zabbix sender](/manual/concepts/sender) と同様に動作し、スクリプトから Zabbix にデータを送信できます。

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

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

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

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

```python
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 が値を受信したことを示す成功メッセージが表示されます。

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

これで、Zabbix のWebインターフェース (*Monitoring > [最新データ](/manual/web_interface/frontend_sections/monitoring/latest_data)*) でも値を確認できます。

[comment]: # ({/6d0ff9a9-10296181})

[comment]: # ({a620a163-3872741b})
#### 完全なスクリプト

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

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

[comment]: # ({/a620a163-3872741b})
