[comment]: # translation:outdated

[comment]: # aside:4

[comment]: # ({ded6a8cd-ebcec779})
# Daten vom Zabbix Agent erfassen

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

[comment]: # ({1640c1a8-02f6ab0d})
#### Überblick

[zabbix\_utils](https://github.com/zabbix/python-zabbix-utils/blob/main/README.md) ermöglicht es Ihnen, Daten vom Zabbix Agent zu erfassen (ähnlich wie bei [Zabbix get](/manual/concepts/get)).

Daten können im synchronen oder asynchronen Modus erfasst werden:

-   Im synchronen Modus fordert Ihr Python-Skript Daten an und wartet vor dem Fortfahren auf die Antwort, was sich für einfache, sequenzielle und vorhersehbare Vorgänge eignet.
-   Im asynchronen Modus fordert das Skript Daten an, ohne auf jede einzelne Antwort zu warten, sodass andere Vorgänge parallel fortgesetzt werden können; dies ist bei langsamen Anfragen oder großen Datenmengen effizienter.

Die Beispiele auf dieser Seite konzentrieren sich auf den synchronen Modus, obwohl der [asynchrone Modus](#asynchronous-mode) ähnlichen Mustern folgt.
Zusätzliche Beispiele sind im GitHub-Repository [zabbix_utils](https://github.com/zabbix/python-zabbix-utils/tree/main/examples) verfügbar.

[comment]: # ({/1640c1a8-02f6ab0d})

[comment]: # ({d16d4df7-8b91e8b3})
#### Import

Um zabbix\_utils zum Sammeln von Datenpunkt-Werten zu verwenden, importieren Sie die Klasse `Getter` in Ihr Python-Skript:

```python
from zabbix_utils import Getter
```

[comment]: # ({/d16d4df7-8b91e8b3})

[comment]: # ({fc153113-7e0dc385})
#### Anfragedaten

Um einen Datenpunktwert anzufordern:

1. Erstellen Sie eine `Getter`-Instanz und geben Sie die IP-Adresse und den Port Ihres Zabbix Agent an.
2. Rufen Sie die Methode `get()` für die `Getter`-Instanz auf und geben Sie den Schlüssel des Datenpunkts an, den Sie abrufen möchten.

Um beispielsweise Daten für den Datenpunkt `system.uname` anzufordern:

```python
agent = Getter(host='192.0.2.1', port=10050)
response = agent.get('system.uname')
```

[comment]: # ({/fc153113-7e0dc385})

[comment]: # ({2551b53a-b5e0ad53})
##### Verwendung einer nicht standardmäßigen IP

Wenn der Server, auf dem Ihr Skript ausgeführt wird, mehrere IP-Adressen hat, können Sie für den `Getter` eine `source_ip` angeben, die beim Verbinden mit dem Zabbix Agent verwendet werden soll:

```python
agent = Getter(
    host='192.0.2.1',
    port=10050,
    source_ip='10.10.7.1'
)
```

[comment]: # ({/2551b53a-b5e0ad53})

[comment]: # ({e0779036-6bc440d9})
##### Verwenden von Timeout

Sie können für den `Getter` ein Antwort-`timeout` festlegen, um zu steuern, wie lange Ihr Skript auf eine Antwort vom Zabbix Agent warten soll, bevor es aufgibt:

```python
agent = Getter(
    host='192.0.2.1',
    port=10050,
    timeout=30
)
```

[comment]: # ({/e0779036-6bc440d9})

[comment]: # ({bd31e71c-6a0fc829})
##### Verwendung von Verschlüsselung

Der `Getter` enthält keine integrierte Unterstützung für Verschlüsselung, aber Sie können diese bereitstellen, indem Sie mithilfe von Bibliotheken von Drittanbietern einen Wrapper erstellen:

```python
def psk_wrapper(sock, tls):
    # ...
    # Implementierung des TLS-PSK-Wrappers für den Socket
    # ...

agent = Getter(
    host='192.0.2.1',
    port=10050,
    socket_wrapper=psk_wrapper
)
```

[comment]: # ({/bd31e71c-6a0fc829})

[comment]: # ({4eff4d20-9556e19b})
##### Antwort

Die Antwort des Zabbix Agent wird von der Bibliothek verarbeitet und als `AgentResponse`-Objekt zurückgegeben:

```python
print(response)
# {
#     "error": null,
#     "raw": "Linux zabbix_server 5.15.0-3.60.5.1.el9uek.x86_64",
#     "value": "Linux zabbix_server 5.15.0-3.60.5.1.el9uek.x86_64"
# }

print(response.value)
# Linux zabbix_server 5.15.0-3.60.5.1.el9uek.x86_64

print(response.error)
# None
```

[comment]: # ({/4eff4d20-9556e19b})

[comment]: # ({ab16eafa-abc52038})
##### Asynchroner Modus

Der asynchrone Modus ermöglicht es Ihrem Skript, Werte zu erfassen, ohne auf das Eintreffen jedes einzelnen Werts warten zu müssen.
Dadurch kann Ihr Skript effizienter arbeiten, wenn es viele Werte erfassen muss oder wenn die Erfassung mancher Werte lange dauert.

Bei der Verwendung des asynchronen Modus gibt es wichtige Unterschiede im Vergleich zum synchronen Modus:

-   Importieren Sie das Python-Modul `asyncio` (Sie müssen zuvor die erforderlichen Abhängigkeiten [installieren](/devel/python/install)).
-   Importieren Sie `AsyncGetter` anstelle von `Getter`.
-   Schreiben Sie Ihren Code innerhalb einer `async`-Funktion.
-   Verwenden Sie `await`, wenn Sie die Methode `get()` aufrufen.

Zum Beispiel, um einen einzelnen Wert im asynchronen Modus zu erfassen:

```python
# 1. Import asyncio for asynchronous mode, and AsyncGetter from zabbix_utils:
import asyncio
from zabbix_utils import AsyncGetter

# 2. Define the main async function where all data requests will be executed:
async def main():
    agent = AsyncGetter(host='192.0.2.1', port=10050)

    # 3. Fetch the system.uname value from Zabbix agent (must await):
    response = await agent.get('system.uname')

    # 4. Print the value returned by Zabbix agent:
    print(response.value)

# 5. Run the async main() function using asyncio's event loop:
asyncio.run(main())
```

[comment]: # ({/ab16eafa-abc52038})
