[comment]: # translation:outdated

[comment]: # aside:4

[comment]: # ({ded6a8cd-ebcec779})
# Datu vākšana no Zabbix aģenta

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

[comment]: # ({1640c1a8-02f6ab0d})
#### Pārskats

[zabbix\_utils](https://github.com/zabbix/python-zabbix-utils/blob/main/README.md) ļauj vākt datus no Zabbix aģenta (līdzīgi kā [Zabbix get](/manual/concepts/get)).

Datus var vākt sinhronā vai asinhronā režīmā:

-   Sinhronajā režīmā jūsu Python skripts pieprasa datus un gaida to saņemšanu, pirms turpināt darbu, kas ir piemēroti vienkāršām, secīgām un paredzamām darbībām.
-   Asinhronajā režīmā skripts pieprasa datus, negaidot katru atbildi, tādējādi ļaujot citām darbībām notikt paralēli; tas ir efektīvāk lēniem pieprasījumiem vai lielām datu paketēm.

Šīs lapas piemēri ir vērsti uz sinhrono režīmu, lai gan [asinhronais režīms](#asynchronous-mode) izmanto līdzīgus principus.
Papildu piemēri ir pieejami GitHub repozitorijā [zabbix_utils](https://github.com/zabbix/python-zabbix-utils/tree/main/examples).

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

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

Lai izmantotu zabbix\_utils vienumu vērtību iegūšanai, importējiet `Getter` klasi savā Python skriptā:

```python
from zabbix_utils import Getter
```

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

[comment]: # ({fc153113-7e0dc385})
#### Pieprasījuma dati

Lai pieprasītu vienuma vērtību:

1. Izveidojiet `Getter` instanci, norādot Zabbix aģenta IP adresi un portu.
2. Izsauciet `get()` metodi `Getter` instancei, norādot vienuma atslēgu, kuru vēlaties izgūt.

Piemēram, lai pieprasītu datus vienumam `system.uname`:

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

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

[comment]: # ({2551b53a-b5e0ad53})
##### Izmantojot nestandarta IP

Ja serverim, kurā darbojas jūsu skripts, ir vairākas IP adreses, varat norādīt `source_ip`, ko `Getter` izmantos, veidojot savienojumu ar Zabbix aģentu:

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

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

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

Varat iestatīt `Getter` atbildes `timeout`, lai kontrolētu, cik ilgi jūsu skriptam jāgaida Zabbix aģenta atbilde, pirms tas pārtrauc mēģinājumu:

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

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

[comment]: # ({bd31e71c-6a0fc829})
##### Šifrēšanas izmantošana

`Getter` neietver iebūvētu šifrēšanas atbalstu, taču to var nodrošināt, izveidojot ietvaru, izmantojot trešo pušu bibliotēkas:

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

Atbilde no Zabbix aģenta tiek apstrādāta bibliotēkā un atgriezta kā `AgentResponse` objekts:

```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})
##### Asinhronais režīms

Asinhronais režīms ļauj jūsu skriptam savākt vērtības, negaidot, līdz katra no tām tiek saņemta.
Tas var padarīt jūsu skriptu efektīvāku, ja tam jāapkopo daudzas vērtības vai ja dažu vērtību savākšana aizņem ilgu laiku.

Izmantojot asinhrono režīmu, pastāv svarīgas atšķirības salīdzinājumā ar sinhrono režīmu:

-   Importējiet Python `asyncio` moduli (vispirms jums jā[instalē](/devel/python/install) nepieciešamās atkarības).
-   Importējiet `AsyncGetter` nevis `Getter`.
-   Rakstiet savu kodu `async` funkcijā.
-   Izmantojiet `await`, izsaucot `get()` metodi.

Piemēram, lai savāktu vienu vērtību, izmantojot asinhrono režīmu:

```python
# 1. Import asyncio asinhronajam režīmam un AsyncGetter no zabbix_utils:
import asyncio
from zabbix_utils import AsyncGetter

# 2. Definējiet galveno async funkciju, kurā tiks izpildīti visi datu pieprasījumi:
async def main():
    aģents = AsyncGetter(host='192.0.2.1', port=10050)

    # 3. Iegūstiet system.uname vērtību no Zabbix aģents (jāizmanto await):
    response = await aģents.get('system.uname')

    # 4. Izdrukājiet Zabbix aģents atgriezto vērtību:
    print(response.value)

# 5. Palaidiet async main() funkciju, izmantojot asyncio notikumu ciklu:
asyncio.run(main())
```

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