[comment]: # translation:outdated

[comment]: # aside:4

[comment]: # ({ded6a8cd-ebcec779})
# Collecter des données depuis l'agent Zabbix

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

[comment]: # ({1640c1a8-02f6ab0d})
#### Vue d’ensemble

[zabbix\_utils](https://github.com/zabbix/python-zabbix-utils/blob/main/README.md) vous permet de collecter des données depuis l’agent Zabbix (de manière similaire à [Zabbix get](/manual/concepts/get)).

Les données peuvent être collectées en mode synchrone ou asynchrone :

-   En mode synchrone, votre script Python demande les données et attend de les recevoir avant de continuer, ce qui convient aux opérations simples, séquentielles et prévisibles.
-   En mode asynchrone, le script demande les données sans attendre chaque réponse, ce qui permet à d’autres opérations de se poursuivre en parallèle ; cela est plus efficace pour les requêtes lentes ou les lots de données volumineux.

Les exemples de cette page se concentrent sur le mode synchrone, bien que le [mode asynchrone](#asynchronous-mode) suive des principes similaires.
Des exemples supplémentaires sont disponibles dans le dépôt GitHub [zabbix_utils](https://github.com/zabbix/python-zabbix-utils/tree/main/examples).

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

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

Pour utiliser zabbix\_utils afin de collecter les valeurs des éléments, importez la classe `Getter` dans votre script Python :

```python
from zabbix_utils import Getter
```

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

[comment]: # ({fc153113-7e0dc385})
#### Données de requête

Pour demander la valeur d'un élément :

1. Créez une instance `Getter`, en spécifiant l'adresse IP et le port de votre agent Zabbix.
2. Appelez la méthode `get()` sur l'instance `Getter`, en spécifiant la clé de l'élément que vous souhaitez récupérer.

Par exemple, pour demander des données pour l'élément `system.uname` :

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

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

[comment]: # ({2551b53a-b5e0ad53})
##### Utilisation d'une adresse IP non par défaut

Si le serveur exécutant votre script possède plusieurs adresses IP, vous pouvez spécifier une `source_ip` pour que `Getter` l'utilise lors de la connexion à l'agent Zabbix :

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

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

[comment]: # ({e0779036-6bc440d9})
##### Utilisation du délai d'attente

Vous pouvez définir un `timeout` de réponse pour le `Getter` afin de contrôler combien de temps votre script doit attendre une réponse de l'agent Zabbix avant d'abandonner :

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

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

[comment]: # ({bd31e71c-6a0fc829})
##### Utilisation du chiffrement

`Getter` n'inclut pas de prise en charge intégrée du chiffrement, mais vous pouvez l'ajouter en créant un wrapper à l'aide de bibliothèques tierces :

```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})
##### Réponse

La réponse de l'agent Zabbix est traitée par la bibliothèque et renvoyée sous la forme d'un objet `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})
##### Mode asynchrone

Le mode asynchrone permet à votre script de collecter des valeurs sans attendre que chacune d’elles arrive.
Cela peut rendre votre script plus efficace lorsqu’il doit collecter de nombreuses valeurs ou lorsque certaines valeurs prennent beaucoup de temps à être collectées.

Lors de l’utilisation du mode asynchrone, il existe des différences importantes par rapport au mode synchrone :

-   Importez le module Python `asyncio` (vous devez d’abord [installer](/devel/python/install) les dépendances requises).
-   Importez `AsyncGetter` au lieu de `Getter`.
-   Écrivez votre code à l’intérieur d’une fonction `async`.
-   Utilisez `await` lors de l’appel de la méthode `get()`.

Par exemple, pour collecter une seule valeur en utilisant le mode asynchrone :

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