zabbix-utils


Namezabbix-utils JSON
Version 1.1.1 PyPI version JSON
download
home_pagehttps://github.com/zabbix/python-zabbix-utils
SummaryA library with modules for working with Zabbix (Zabbix API, Zabbix sender, Zabbix get)
upload_time2024-03-06 11:40:20
maintainerAleksandr Iantsen
docs_urlNone
authorZabbix SIA
requires_python>=3.8
license
keywords monitoring zabbix api sender get utils tools
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Zabbix utils library

[![Tests](https://github.com/zabbix/python-zabbix-utils/actions/workflows/tests.yaml/badge.svg)](https://github.com/zabbix/python-zabbix-utils/actions/workflows/tests.yaml)
[![Zabbix API](https://github.com/zabbix/python-zabbix-utils/actions/workflows/integration_api.yaml/badge.svg)](https://github.com/zabbix/python-zabbix-utils/actions/workflows/integration_api.yaml)
[![Zabbix sender](https://github.com/zabbix/python-zabbix-utils/actions/workflows/integration_sender.yaml/badge.svg)](https://github.com/zabbix/python-zabbix-utils/actions/workflows/integration_sender.yaml)
[![Zabbix get](https://github.com/zabbix/python-zabbix-utils/actions/workflows/integration_get.yaml/badge.svg)](https://github.com/zabbix/python-zabbix-utils/actions/workflows/integration_get.yaml)
[![Zabbix 5.0](https://github.com/zabbix/python-zabbix-utils/actions/workflows/compatibility_50.yaml/badge.svg)](https://github.com/zabbix/python-zabbix-utils/actions/workflows/compatibility_50.yaml)
[![Zabbix 6.0](https://github.com/zabbix/python-zabbix-utils/actions/workflows/compatibility_60.yaml/badge.svg)](https://github.com/zabbix/python-zabbix-utils/actions/workflows/compatibility_60.yaml)
[![Zabbix 6.4](https://github.com/zabbix/python-zabbix-utils/actions/workflows/compatibility_64.yaml/badge.svg)](https://github.com/zabbix/python-zabbix-utils/actions/workflows/compatibility_64.yaml)

**zabbix_utils** is a Python library for working with [Zabbix API](https://www.zabbix.com/documentation/current/manual/api/reference) as well as with [Zabbix sender](https://www.zabbix.com/documentation/current/manpages/zabbix_sender) and [Zabbix get](https://www.zabbix.com/documentation/current/manpages/zabbix_get) protocols.

## Requirements

Supported versions:

* Zabbix 5.0+
* Python 3.8+

Tested on:

* Zabbix 5.0, 6.0, 6.4 and pre-7.0
* Python 3.8, 3.9, 3.10, 3.11 and 3.12

## Documentation

### Installation

Install **zabbix_utils** library using pip:

```bash
$ pip install zabbix_utils
```

### Use cases

##### To work with Zabbix API

To work with Zabbix API you can import and use **zabbix_utils** library as follows:

```python
from zabbix_utils import ZabbixAPI

api = ZabbixAPI(url="127.0.0.1")
api.login(user="User", password="zabbix")

users = api.user.get(
    output=['userid','name']
)

for user in users:
    print(user['name'])

api.logout()
```

You can also authenticate using an API token (supported since Zabbix 5.4):

```python
from zabbix_utils import ZabbixAPI

api = ZabbixAPI(url="127.0.0.1")
api.login(token="xxxxxxxx")

users = api.user.get(
    output=['userid','name']
)

for user in users:
    print(user['name'])
```

When token is used, calling `api.logout()` is not necessary.

It is possible to specify authentication fields by the following environment variables:
`ZABBIX_URL`, `ZABBIX_TOKEN`, `ZABBIX_USER`, `ZABBIX_PASSWORD`

You can compare Zabbix API version with strings and numbers, for example:

```python
from zabbix_utils import ZabbixAPI

url = "127.0.0.1"
user = "User"
password = "zabbix"

api = ZabbixAPI(url=url, user=user, password=password)

# Method to get version
ver = api.api_version()
print(type(ver).__name__, ver) # APIVersion 7.0.0

# ZabbixAPI prototype with version
ver = api.version
print(type(ver).__name__, ver) # APIVersion 7.0.0

# Comparing versions
print(ver > 6.0)      # True
print(ver != 7.0)     # False
print(ver != "7.0.0") # False

# Version additional methods
print(ver.major)    # 7.0
print(ver.minor)    # 0
print(ver.is_lts()) # True

api.logout()
```

In case the API object or method name matches one of Python keywords, you can use the suffix `_` in their name to execute correctly:
```python
from zabbix_utils import ZabbixAPI

api = ZabbixAPI(url="127.0.0.1")
api.login(token="xxxxxxxx")

template_source = ''
with open('template_example.xml', mode='r', encoding='utf-8') as f:
    template_source = f.read()

response = api.configuration.import_(
    source=template_source,
    format="xml",
    rules={...}
)

if response:
    print("Template imported successfully")
```

> Please, refer to the [Zabbix API Documentation](https://www.zabbix.com/documentation/current/manual/api/reference) and the [using examples](https://github.com/zabbix/python-zabbix-utils/tree/main/examples/api) for more information.

##### To work via Zabbix sender protocol

To send item values to a Zabbix server or a Zabbix proxy you can import and use the library as follows:

```python
from zabbix_utils import Sender

sender = Sender(server='127.0.0.1', port=10051)
response = sender.send_value('host', 'item.key', 'value', 1695713666)

print(response)
# {"processed": 1, "failed": 0, "total": 1, "time": "0.000338", "chunk": 1}
```

Or you can prepare a list of item values and send all at once:

```python
from zabbix_utils import ItemValue, Sender

items = [
    ItemValue('host1', 'item.key1', 10),
    ItemValue('host1', 'item.key2', 'test message'),
    ItemValue('host2', 'item.key1', -1, 1695713666),
    ItemValue('host3', 'item.key1', '{"msg":"test message"}'),
    ItemValue('host2', 'item.key1', 0, 1695713666, 100)
]

sender = Sender(server='127.0.0.1', port=10051)
response = sender.send(items)

print(response)
# {"processed": 5, "failed": 0, "total": 5, "time": "0.001661", "chunk": 1}
```

If you need to send values to several Zabbix clusters at once, you can do this by passing a list of Zabbix clusters:

```python
from zabbix_utils import Sender

zabbix_clusters = [
    ['zabbix.cluster1.node1', 'zabbix.cluster1.node2:10051'],
    ['zabbix.cluster2.node1:10051', 'zabbix.cluster2.node2:20051', 'zabbix.cluster2.node3']
]

sender = Sender(clusters=zabbix_clusters)
response = sender.send_value('host', 'item.key', 'value', 1695713666)

print(response)
# {"processed": 2, "failed": 0, "total": 2, "time": "0.000103", "chunk": 2}

print(response.details)
# {
#     zabbix.cluster1.node1:10051: [{"processed": 1, "failed": 0, "total": 1, "time": "0.000050", "chunk": 1}],
#     zabbix.cluster2.node2:20051: [{"processed": 1, "failed": 0, "total": 1, "time": "0.000053", "chunk": 1}]
# }
```

In such case, the value will be sent to the first available node of each cluster.

> Please, refer to the [Zabbix sender protocol](https://www.zabbix.com/documentation/current/manual/appendix/protocols/zabbix_sender) and the [using examples](https://github.com/zabbix/python-zabbix-utils/tree/main/examples/sender) for more information.

##### To work via Zabbix get protocol

To get a value by item key from a Zabbix agent or agent 2 you can import and use the library as follows:

```python
from zabbix_utils import Getter

agent = Getter(host='127.0.0.1', port=10050)
resp = agent.get('system.uname')

print(resp.value)
# Linux test_server 5.15.0-3.60.5.1.el9uek.x86_64
```

> Please, refer to the [Zabbix agent protocol](https://www.zabbix.com/documentation/current/manual/appendix/protocols/zabbix_agent) and the [using examples](https://github.com/zabbix/python-zabbix-utils/tree/main/examples/get) for more information.

### Enabling debug log

If it needed to debug some issue with Zabbix API, sender or get you can enable the output of logging. The **zabbix_utils** library uses the default python logging module, but it doesn't log by default. You can define logging handler to see records from the library, for example:

```python
import logging
from zabbix_utils import Getter

logging.basicConfig(
    format=u'[%(asctime)s] %(levelname)s %(message)s',
    level=logging.DEBUG
)

agent = Getter(host='127.0.0.1', port=10050)
resp = agent.get('system.uname')

print(resp.value)
```

And then you can see records like the following:

```
[2023-10-01 12:00:01,587] DEBUG Content of the packet: b'ZBXD\x01\x0c\x00\x00\x00\x00\x00\x00\x00system.uname'
[2023-10-01 12:00:01,722] DEBUG Zabbix response header: b'ZBXD\x01C\x00\x00\x00C\x00\x00\x00'
[2023-10-01 12:00:01,723] DEBUG Zabbix response body: Linux test_server 5.15.0-3.60.5.1.el9uek.x86_64
[2023-10-01 12:00:01,724] DEBUG Response from [127.0.0.1:10050]: Linux test_server 5.15.0-3.60.5.1.el9uek.x86_64
Linux test_server 5.15.0-3.60.5.1.el9uek.x86_64

```

## License
**zabbix_utils** is distributed under MIT License.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/zabbix/python-zabbix-utils",
    "name": "zabbix-utils",
    "maintainer": "Aleksandr Iantsen",
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "aleksandr.iantsen@zabbix.com",
    "keywords": "monitoring zabbix api sender get utils tools",
    "author": "Zabbix SIA",
    "author_email": "integrationteam@zabbix.com",
    "download_url": "https://files.pythonhosted.org/packages/4d/ae/0445588064ad8beba5c73a5a51a18e55d73dabca535c25d14f333e6ab04a/zabbix_utils-1.1.1.tar.gz",
    "platform": null,
    "description": "# Zabbix utils library\r\n\r\n[![Tests](https://github.com/zabbix/python-zabbix-utils/actions/workflows/tests.yaml/badge.svg)](https://github.com/zabbix/python-zabbix-utils/actions/workflows/tests.yaml)\r\n[![Zabbix API](https://github.com/zabbix/python-zabbix-utils/actions/workflows/integration_api.yaml/badge.svg)](https://github.com/zabbix/python-zabbix-utils/actions/workflows/integration_api.yaml)\r\n[![Zabbix sender](https://github.com/zabbix/python-zabbix-utils/actions/workflows/integration_sender.yaml/badge.svg)](https://github.com/zabbix/python-zabbix-utils/actions/workflows/integration_sender.yaml)\r\n[![Zabbix get](https://github.com/zabbix/python-zabbix-utils/actions/workflows/integration_get.yaml/badge.svg)](https://github.com/zabbix/python-zabbix-utils/actions/workflows/integration_get.yaml)\r\n[![Zabbix 5.0](https://github.com/zabbix/python-zabbix-utils/actions/workflows/compatibility_50.yaml/badge.svg)](https://github.com/zabbix/python-zabbix-utils/actions/workflows/compatibility_50.yaml)\r\n[![Zabbix 6.0](https://github.com/zabbix/python-zabbix-utils/actions/workflows/compatibility_60.yaml/badge.svg)](https://github.com/zabbix/python-zabbix-utils/actions/workflows/compatibility_60.yaml)\r\n[![Zabbix 6.4](https://github.com/zabbix/python-zabbix-utils/actions/workflows/compatibility_64.yaml/badge.svg)](https://github.com/zabbix/python-zabbix-utils/actions/workflows/compatibility_64.yaml)\r\n\r\n**zabbix_utils** is a Python library for working with [Zabbix API](https://www.zabbix.com/documentation/current/manual/api/reference) as well as with [Zabbix sender](https://www.zabbix.com/documentation/current/manpages/zabbix_sender) and [Zabbix get](https://www.zabbix.com/documentation/current/manpages/zabbix_get) protocols.\r\n\r\n## Requirements\r\n\r\nSupported versions:\r\n\r\n* Zabbix 5.0+\r\n* Python 3.8+\r\n\r\nTested on:\r\n\r\n* Zabbix 5.0, 6.0, 6.4 and pre-7.0\r\n* Python 3.8, 3.9, 3.10, 3.11 and 3.12\r\n\r\n## Documentation\r\n\r\n### Installation\r\n\r\nInstall **zabbix_utils** library using pip:\r\n\r\n```bash\r\n$ pip install zabbix_utils\r\n```\r\n\r\n### Use cases\r\n\r\n##### To work with Zabbix API\r\n\r\nTo work with Zabbix API you can import and use **zabbix_utils** library as follows:\r\n\r\n```python\r\nfrom zabbix_utils import ZabbixAPI\r\n\r\napi = ZabbixAPI(url=\"127.0.0.1\")\r\napi.login(user=\"User\", password=\"zabbix\")\r\n\r\nusers = api.user.get(\r\n    output=['userid','name']\r\n)\r\n\r\nfor user in users:\r\n    print(user['name'])\r\n\r\napi.logout()\r\n```\r\n\r\nYou can also authenticate using an API token (supported since Zabbix 5.4):\r\n\r\n```python\r\nfrom zabbix_utils import ZabbixAPI\r\n\r\napi = ZabbixAPI(url=\"127.0.0.1\")\r\napi.login(token=\"xxxxxxxx\")\r\n\r\nusers = api.user.get(\r\n    output=['userid','name']\r\n)\r\n\r\nfor user in users:\r\n    print(user['name'])\r\n```\r\n\r\nWhen token is used, calling `api.logout()` is not necessary.\r\n\r\nIt is possible to specify authentication fields by the following environment variables:\r\n`ZABBIX_URL`, `ZABBIX_TOKEN`, `ZABBIX_USER`, `ZABBIX_PASSWORD`\r\n\r\nYou can compare Zabbix API version with strings and numbers, for example:\r\n\r\n```python\r\nfrom zabbix_utils import ZabbixAPI\r\n\r\nurl = \"127.0.0.1\"\r\nuser = \"User\"\r\npassword = \"zabbix\"\r\n\r\napi = ZabbixAPI(url=url, user=user, password=password)\r\n\r\n# Method to get version\r\nver = api.api_version()\r\nprint(type(ver).__name__, ver) # APIVersion 7.0.0\r\n\r\n# ZabbixAPI prototype with version\r\nver = api.version\r\nprint(type(ver).__name__, ver) # APIVersion 7.0.0\r\n\r\n# Comparing versions\r\nprint(ver > 6.0)      # True\r\nprint(ver != 7.0)     # False\r\nprint(ver != \"7.0.0\") # False\r\n\r\n# Version additional methods\r\nprint(ver.major)    # 7.0\r\nprint(ver.minor)    # 0\r\nprint(ver.is_lts()) # True\r\n\r\napi.logout()\r\n```\r\n\r\nIn case the API object or method name matches one of Python keywords, you can use the suffix `_` in their name to execute correctly:\r\n```python\r\nfrom zabbix_utils import ZabbixAPI\r\n\r\napi = ZabbixAPI(url=\"127.0.0.1\")\r\napi.login(token=\"xxxxxxxx\")\r\n\r\ntemplate_source = ''\r\nwith open('template_example.xml', mode='r', encoding='utf-8') as f:\r\n    template_source = f.read()\r\n\r\nresponse = api.configuration.import_(\r\n    source=template_source,\r\n    format=\"xml\",\r\n    rules={...}\r\n)\r\n\r\nif response:\r\n    print(\"Template imported successfully\")\r\n```\r\n\r\n> Please, refer to the [Zabbix API Documentation](https://www.zabbix.com/documentation/current/manual/api/reference) and the [using examples](https://github.com/zabbix/python-zabbix-utils/tree/main/examples/api) for more information.\r\n\r\n##### To work via Zabbix sender protocol\r\n\r\nTo send item values to a Zabbix server or a Zabbix proxy you can import and use the library as follows:\r\n\r\n```python\r\nfrom zabbix_utils import Sender\r\n\r\nsender = Sender(server='127.0.0.1', port=10051)\r\nresponse = sender.send_value('host', 'item.key', 'value', 1695713666)\r\n\r\nprint(response)\r\n# {\"processed\": 1, \"failed\": 0, \"total\": 1, \"time\": \"0.000338\", \"chunk\": 1}\r\n```\r\n\r\nOr you can prepare a list of item values and send all at once:\r\n\r\n```python\r\nfrom zabbix_utils import ItemValue, Sender\r\n\r\nitems = [\r\n    ItemValue('host1', 'item.key1', 10),\r\n    ItemValue('host1', 'item.key2', 'test message'),\r\n    ItemValue('host2', 'item.key1', -1, 1695713666),\r\n    ItemValue('host3', 'item.key1', '{\"msg\":\"test message\"}'),\r\n    ItemValue('host2', 'item.key1', 0, 1695713666, 100)\r\n]\r\n\r\nsender = Sender(server='127.0.0.1', port=10051)\r\nresponse = sender.send(items)\r\n\r\nprint(response)\r\n# {\"processed\": 5, \"failed\": 0, \"total\": 5, \"time\": \"0.001661\", \"chunk\": 1}\r\n```\r\n\r\nIf you need to send values to several Zabbix clusters at once, you can do this by passing a list of Zabbix clusters:\r\n\r\n```python\r\nfrom zabbix_utils import Sender\r\n\r\nzabbix_clusters = [\r\n    ['zabbix.cluster1.node1', 'zabbix.cluster1.node2:10051'],\r\n    ['zabbix.cluster2.node1:10051', 'zabbix.cluster2.node2:20051', 'zabbix.cluster2.node3']\r\n]\r\n\r\nsender = Sender(clusters=zabbix_clusters)\r\nresponse = sender.send_value('host', 'item.key', 'value', 1695713666)\r\n\r\nprint(response)\r\n# {\"processed\": 2, \"failed\": 0, \"total\": 2, \"time\": \"0.000103\", \"chunk\": 2}\r\n\r\nprint(response.details)\r\n# {\r\n#     zabbix.cluster1.node1:10051: [{\"processed\": 1, \"failed\": 0, \"total\": 1, \"time\": \"0.000050\", \"chunk\": 1}],\r\n#     zabbix.cluster2.node2:20051: [{\"processed\": 1, \"failed\": 0, \"total\": 1, \"time\": \"0.000053\", \"chunk\": 1}]\r\n# }\r\n```\r\n\r\nIn such case, the value will be sent to the first available node of each cluster.\r\n\r\n> Please, refer to the [Zabbix sender protocol](https://www.zabbix.com/documentation/current/manual/appendix/protocols/zabbix_sender) and the [using examples](https://github.com/zabbix/python-zabbix-utils/tree/main/examples/sender) for more information.\r\n\r\n##### To work via Zabbix get protocol\r\n\r\nTo get a value by item key from a Zabbix agent or agent 2 you can import and use the library as follows:\r\n\r\n```python\r\nfrom zabbix_utils import Getter\r\n\r\nagent = Getter(host='127.0.0.1', port=10050)\r\nresp = agent.get('system.uname')\r\n\r\nprint(resp.value)\r\n# Linux test_server 5.15.0-3.60.5.1.el9uek.x86_64\r\n```\r\n\r\n> Please, refer to the [Zabbix agent protocol](https://www.zabbix.com/documentation/current/manual/appendix/protocols/zabbix_agent) and the [using examples](https://github.com/zabbix/python-zabbix-utils/tree/main/examples/get) for more information.\r\n\r\n### Enabling debug log\r\n\r\nIf it needed to debug some issue with Zabbix API, sender or get you can enable the output of logging. The **zabbix_utils** library uses the default python logging module, but it doesn't log by default. You can define logging handler to see records from the library, for example:\r\n\r\n```python\r\nimport logging\r\nfrom zabbix_utils import Getter\r\n\r\nlogging.basicConfig(\r\n    format=u'[%(asctime)s] %(levelname)s %(message)s',\r\n    level=logging.DEBUG\r\n)\r\n\r\nagent = Getter(host='127.0.0.1', port=10050)\r\nresp = agent.get('system.uname')\r\n\r\nprint(resp.value)\r\n```\r\n\r\nAnd then you can see records like the following:\r\n\r\n```\r\n[2023-10-01 12:00:01,587] DEBUG Content of the packet: b'ZBXD\\x01\\x0c\\x00\\x00\\x00\\x00\\x00\\x00\\x00system.uname'\r\n[2023-10-01 12:00:01,722] DEBUG Zabbix response header: b'ZBXD\\x01C\\x00\\x00\\x00C\\x00\\x00\\x00'\r\n[2023-10-01 12:00:01,723] DEBUG Zabbix response body: Linux test_server 5.15.0-3.60.5.1.el9uek.x86_64\r\n[2023-10-01 12:00:01,724] DEBUG Response from [127.0.0.1:10050]: Linux test_server 5.15.0-3.60.5.1.el9uek.x86_64\r\nLinux test_server 5.15.0-3.60.5.1.el9uek.x86_64\r\n\r\n```\r\n\r\n## License\r\n**zabbix_utils** is distributed under MIT License.\r\n",
    "bugtrack_url": null,
    "license": "",
    "summary": "A library with modules for working with Zabbix (Zabbix API, Zabbix sender, Zabbix get)",
    "version": "1.1.1",
    "project_urls": {
        "Bug Tracker": "https://github.com/zabbix/python-zabbix-utils/issues",
        "Changes": "https://github.com/zabbix/python-zabbix-utils/blob/main/CHANGELOG.md",
        "Homepage": "https://github.com/zabbix/python-zabbix-utils",
        "Source": "https://github.com/zabbix/python-zabbix-utils",
        "Zabbix": "https://www.zabbix.com/documentation/current"
    },
    "split_keywords": [
        "monitoring",
        "zabbix",
        "api",
        "sender",
        "get",
        "utils",
        "tools"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "38194519cc9a0b31a6a23973b69437197439c5572b443ee20d71b277ed240d87",
                "md5": "f44b0de3bf7d7d685310400a34805799",
                "sha256": "68783c69ae764f1b62f2e5721b9a741ead1f950318ae96e77731553018a32972"
            },
            "downloads": -1,
            "filename": "zabbix_utils-1.1.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "f44b0de3bf7d7d685310400a34805799",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 24396,
            "upload_time": "2024-03-06T11:40:19",
            "upload_time_iso_8601": "2024-03-06T11:40:19.417297Z",
            "url": "https://files.pythonhosted.org/packages/38/19/4519cc9a0b31a6a23973b69437197439c5572b443ee20d71b277ed240d87/zabbix_utils-1.1.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4dae0445588064ad8beba5c73a5a51a18e55d73dabca535c25d14f333e6ab04a",
                "md5": "7cae3ea472c0b27fed501524f7ebce4b",
                "sha256": "5a3d84832e9f5aa3777c702da3b23980b334fb185d4d95dd68ee800b0fb40cd8"
            },
            "downloads": -1,
            "filename": "zabbix_utils-1.1.1.tar.gz",
            "has_sig": false,
            "md5_digest": "7cae3ea472c0b27fed501524f7ebce4b",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 19183,
            "upload_time": "2024-03-06T11:40:20",
            "upload_time_iso_8601": "2024-03-06T11:40:20.983804Z",
            "url": "https://files.pythonhosted.org/packages/4d/ae/0445588064ad8beba5c73a5a51a18e55d73dabca535c25d14f333e6ab04a/zabbix_utils-1.1.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-03-06 11:40:20",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "zabbix",
    "github_project": "python-zabbix-utils",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "zabbix-utils"
}
        
Elapsed time: 0.43579s