[comment]: # translation:outdated

[comment]: # aside:4

[comment]: # ({ded6a8cd-ebcec779})
# Zbieranie danych z agenta Zabbix

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

[comment]: # ({1640c1a8-02f6ab0d})
#### Przegląd

[zabbix\_utils](https://github.com/zabbix/python-zabbix-utils/blob/main/README.md) umożliwia zbieranie danych z Zabbix agent (podobnie jak [Zabbix get](/manual/concepts/get)).

Dane mogą być zbierane w trybie synchronicznym lub asynchronicznym:

-   W trybie synchronicznym skrypt Python wysyła żądanie i czeka na dane przed kontynuowaniem działania, co jest odpowiednie dla prostych, sekwencyjnych i przewidywalnych operacji.
-   W trybie asynchronicznym skrypt wysyła żądania bez oczekiwania na każdą odpowiedź, umożliwiając równoległe wykonywanie innych operacji; jest to bardziej wydajne w przypadku wolnych żądań lub dużych partii danych.

Przykłady na tej stronie koncentrują się na trybie synchronicznym, chociaż [tryb asynchroniczny](#asynchronous-mode) opiera się na podobnych wzorcach.
Dodatkowe przykłady są dostępne w repozytorium GitHub [zabbix_utils](https://github.com/zabbix/python-zabbix-utils/tree/main/examples).

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

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

Aby używać `zabbix_utils` do zbierania wartości pozycji, zaimportuj klasę `Getter` w swoim skrypcie Python:

```python
from zabbix_utils import Getter
```

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

[comment]: # ({fc153113-7e0dc385})
#### Dane żądania

Aby zażądać wartości pozycji:

1. Utwórz instancję `Getter`, określając adres IP i port swojego agenta Zabbix.
2. Wywołaj metodę `get()` na instancji `Getter`, określając klucz pozycji, którą chcesz pobrać.

Na przykład, aby zażądać danych dla pozycji `system.uname`:

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

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

[comment]: # ({2551b53a-b5e0ad53})
##### Używanie niestandardowego IP

Jeśli serwer, na którym uruchamiany jest skrypt, ma wiele adresów IP, możesz określić `source_ip`, którego `Getter` ma używać podczas łączenia się z agentem Zabbix:

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

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

[comment]: # ({e0779036-6bc440d9})
##### Używanie timeoutu

Możesz ustawić `timeout` odpowiedzi dla `Getter`, aby kontrolować, jak długo skrypt ma czekać na odpowiedź od agent przed rezygnacją:

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

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

[comment]: # ({bd31e71c-6a0fc829})
##### Używanie szyfrowania

`Getter` nie zawiera wbudowanej obsługi szyfrowania, ale można ją zapewnić, tworząc wrapper z użyciem bibliotek firm trzecich:

```python
def psk_wrapper(sock, tls):
    # ...
    # Implementation of TLS PSK wrapper for the socket
    # ...

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

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

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

Odpowiedź z Zabbix agent jest przetwarzana przez bibliotekę i zwracana jako obiekt `AgentResponse`:

```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})
##### Tryb asynchroniczny

Tryb asynchroniczny pozwala skryptowi zbierać wartości bez czekania na nadejście każdej z nich.
Może to zwiększyć wydajność skryptu, gdy musi on zebrać wiele wartości lub gdy niektóre wartości są zbierane przez dłuższy czas.

Podczas korzystania z trybu asynchronicznego występują ważne różnice w porównaniu z trybem synchronicznym:

-   Zaimportuj moduł Python `asyncio` (najpierw musisz [zainstalować](/devel/python/install) wymagane zależności).
-   Zaimportuj `AsyncGetter` zamiast `Getter`.
-   Napisz kod wewnątrz funkcji `async`.
-   Użyj `await` podczas wywoływania metody `get()`.

Na przykład, aby zebrać pojedynczą wartość przy użyciu trybu asynchronicznego:

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