---
title: Connexion de systèmes de supervision externes
url: https://doc2.pstreamer.tv/fr/manual/extras/monitoring.html
lang: fr
product: Perfect Streamer
version: 2.0.2.362
---

# Connexion de systèmes de supervision externes

*pss-metrics* — exportateur universel de métriques pour Perfect Streamer

Un unique script CLI en Python 3 qui récupère les statistiques depuis l’API HTTP du serveur web PSS et produit une sortie destinée aux systèmes de supervision les plus répandus :

> - Zabbix (UserParameter, Low-Level Discovery, zabbix_sender trapper)
> - Prometheus (format d’exposition texte pour le textfile collector)
> - InfluxDB / Telegraf (line protocol ou JSON pour l’entrée exec)
> - JSON générique pour des scripts personnalisés et des contrôles d’état de type Nagios

L’exportateur est un fichier unique et autonome, sans dépendances tierces ; il n’utilise que la bibliothèque standard de Python 3.6+ (*urllib*, *xml.etree*, *json*, *argparse*).

## Fichiers

```
pss-metrics.py                    main CLI (executable)
userparameter_pss.conf.example    UserParameter template for Zabbix
```

## Installation

L’exportateur est fourni dans */opt/pss/monitoring/pss-metrics.py*. Assurez-vous que Python 3.6 ou une version ultérieure est installé:

```
# RHEL / Rocky / AlmaLinux
yum install -y python3

# Debian / Ubuntu
apt-get install -y python3
```

Aucun paquet supplémentaire n’est requis.

## Configuration

Par défaut, *pss-metrics* se connecte au nœud par l’adresse de bouclage en déterminant le port du serveur web à partir de */opt/pss/config/pss.json* (ou de */opt/pss/config/pss_default.json*) ; si le port n’a pu être lu dans aucun des deux fichiers, *http://127.0.0.1:43971* est utilisé. Les paramètres peuvent être redéfinis par des variables d’environnement, par le fichier */etc/pss-metrics.conf* (format *clé=valeur*) ou par des options de ligne de commande. Priorité : CLI > env > fichier > valeurs par défaut. Exception — *PSS_URL* : la valeur issue du fichier peut être remplacée par la détection automatique du port ; définissez l’URL au moyen d’une variable d’environnement ou d’une option de ligne de commande.

Variables prises en charge:

```
PSS_URL          full URL, e.g. http://10.0.0.1:8808          (auto by default)
PSS_USER         web server login (if authorization is enabled)
PSS_PASS         web server password
PSS_TIMEOUT      HTTP timeout, in seconds                      (default 5)
PSS_CACHE_DIR    cache directory                               (default /run/pss-metrics)
PSS_CACHE_TTL    cache TTL, in seconds                         (default 10)
PSS_CA_BUNDLE    path to CA bundle for HTTPS
PSS_INSECURE     1 — disable TLS certificate verification
PSS_VERBOSE      1 — log requests to stderr
```

Cache : chaque exécution effectue au plus un GET HTTP par point de terminaison dans la fenêtre de TTL. Avec TTL=10 s, même des centaines de contrôles UserParameter par minute ne produisent qu’environ 6 requêtes HTTP par minute vers chaque point de terminaison de l’API.

## Démarrage rapide

Contrôle d’état (codes de sortie de type Nagios):

```
pss-metrics.py health
# OK: total=42 running=15 stopped=27 unhealthy=0 version=<version>
```

Découverte LLD Zabbix:

```
pss-metrics.py discover streams
pss-metrics.py discover inputs --running-only
pss-metrics.py discover outputs
```

Récupération d’une métrique unique (à utiliser dans un UserParameter Zabbix):

```
pss-metrics.py get summary.running
pss-metrics.py get stream.10031.bitrate
pss-metrics.py get input.10031.1.speed1
pss-metrics.py get output.10031.1.speed
pss-metrics.py get sysmon.cpu.self-usage
pss-metrics.py get server.server-version
```

Export complet:

```
pss-metrics.py dump --format=json
pss-metrics.py dump --format=prometheus
pss-metrics.py dump --format=influx
pss-metrics.py dump --format=zabbix-trapper --zabbix-host=streamer-01
```

## Chemins de métriques

*pss-metrics get* accepte un chemin séparé par des points. Une sortie vide signifie « valeur absente » (par exemple, la métrique n’existe que pour les flux en cours d’exécution).

```
server.<attr>                e.g. server.server-version, server.uptime
summary.<key>                total | running | stopped | unhealthy |
                             input_bitrate_kbps | output_bitrate_kbps
sysmon.cpu.<attr>            self-usage | total-usage | cores
sysmon.memory.<attr>         self-usage-kb | available-kb | total-kb
sysmon.netbw.<iface>.<attr>  rx-bw | tx-bw  (interface name as in XML)
stream.<id>.<attr>           any <stream> attribute
input.<sid>.<iid>.<attr>     any <input> attribute
output.<sid>.<oid>.<attr>    any <output> attribute
```

Attributs utiles par flux (issus de /data/stream/detail):

```
stream:  state, state-str, bitrate, thread-usage, mpts
input:   speed1, recv-bytes, recv-packets, recv-err,
         stat-disc, stat-disc1, stat-scrambled, stat-scrambled1,
         health-state-good, health-status, check-status
output:  speed, sent-bytes, sent-packets, sent-err, uri, type
```

Les débits sont en kilobits par seconde : `speed1` à l’entrée, `speed` à la sortie. L’attribut `speed` n’existe que sur les sorties UDP ; pour les autres types de sortie, le débit se déduit de l’accroissement de `sent-bytes` sur votre propre intervalle d’interrogation.

## Intégration avec Zabbix

Deux scénarios sont pris en charge — choisissez celui qui convient à votre environnement.

1. UserParameter statique + LLD (agent Zabbix v1 / v2)

   Copiez *userparameter_pss.conf.example* vers */etc/zabbix/zabbix_agentd.d/pss.conf*, redémarrez *zabbix-agent*, puis importez sur le serveur un modèle comportant des prototypes LLD qui utilisent les clés *pss.discover*. Exemple d’associations:

   ```
   UserParameter=pss.discover[*],/opt/pss/monitoring/pss-metrics.py discover $1
   UserParameter=pss.get[*],/opt/pss/monitoring/pss-metrics.py get $1
   UserParameter=pss.health,/opt/pss/monitoring/pss-metrics.py health
   ```

   Sur le serveur Zabbix :

   ```
   Discovery rule key:        pss.discover[streams]
   Item prototype keys:       pss.get[input.{#STREAM_ID}.1.speed1]
                              pss.get[stream.{#STREAM_ID}.bitrate]
                              pss.get[summary.unhealthy]
   ```
2. Trapper (push) au moyen de zabbix_sender

   Lancez-le par minuterie (cron / systemd) et redirigez la sortie dans un pipe:

   ```
   /opt/pss/monitoring/pss-metrics.py dump --format=zabbix-trapper \
       --zabbix-host="$(hostname)" \
     | zabbix_sender -z zabbix.example.com -i -
   ```

## Intégration avec Prometheus

Deux options.

1. Textfile collector (recommandé pour les environnements one-shot).

   Lancez un export périodique au moyen d’un systemd-timer ou de cron:

   ```
   */1 * * * * /opt/pss/monitoring/pss-metrics.py dump --format=prometheus \
       > /var/lib/node_exporter/textfile_collector/pss.prom.$$ \
       && mv /var/lib/node_exporter/textfile_collector/pss.prom.$$ \
             /var/lib/node_exporter/textfile_collector/pss.prom
   ```

   *node_exporter* publiera le fichier au moyen de *–collector.textfile.directory*.
2. Scrape direct au moyen d’un petit enrobage (par exemple, *socat* + *pss-metrics dump*) ou de tout proxy HTTP tiers de votre choix.

## Intégration avec Telegraf / InfluxDB

Telegraf *inputs.exec*:

```
[[inputs.exec]]
  commands = ["/opt/pss/monitoring/pss-metrics.py dump --format=influx"]
  interval = "10s"
  timeout  = "5s"
  data_format = "influx"
```

Pour l’analyseur JSON, utilisez *–format=json* et configurez *data_format = « json »* en indiquant les chemins des champs.

## HTTPS et authentification

L’exportateur est prévu pour s’exécuter sur le nœud lui-même : le serveur web PSS accepte sans autorisation les requêtes provenant de l’adresse locale. Les variables *PSS_USER*/*PSS_PASS* sont transmises en HTTP Basic — elles sont utiles lorsque l’accès à l’API est publié au travers d’un proxy intermédiaire doté d’une autorisation Basic ; l’exportateur ne satisfait pas l’autorisation Digest propre au serveur web PSS.

Accès en HTTPS:

```
PSS_URL=https://streamer.example.com:43981 pss-metrics.py health
```

Certificats auto-signés : définissez *PSS_INSECURE=1* (non recommandé) ou indiquez *PSS_CA_BUNDLE=/path/to/ca.pem*.

## Codes de retour

*pss-metrics* respecte la convention Nagios:

```
0  OK
1  WARNING       (e.g. running streams report unhealthy)
2  CRITICAL      (PSS is unreachable)
3  UNKNOWN       (invalid arguments / internal error)
```

*get* affiche une chaîne vide et se termine avec le code 0 lorsque l’entité demandée est absente — ce comportement correspond à l’attente de Zabbix, selon laquelle une valeur vide est interprétée comme « NOT_SUPPORTED » et non comme une défaillance de l’agent.

## Diagnostic

```bash
pss-metrics.py -v health        # log every HTTP request to stderr
pss-metrics.py --cache-ttl=0 …  # bypass cache while debugging
rm -rf /run/pss-metrics         # purge cache
```
