---
title: Intégration de systèmes de surveillance externes
url: https://doc.pstreamer.tv/fr/manual/monitoring.html
lang: fr
product: Perfect Streamer
version: 1.13.3.445
---

# Intégration de systèmes de surveillance 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 la sortie pour les 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’input exec)
> - JSON universel pour des scripts arbitraires et les vérifications d’état façon Nagios

L’exportateur est un fichier unique et autonome, sans dépendance tierce, qui 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 livré dans */opt/pss/monitoring/pss-metrics.py*. Vérifiez que Python 3.6 ou ultérieur 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 à *http://127.0.0.1:43971* et détecte automatiquement le port depuis */opt/pss/config/pss.json* (ou */opt/pss/config/pss_default.json*). Les paramètres peuvent être remplacés via des variables d’environnement, le fichier */etc/pss-metrics.conf* (format *clé=valeur*) ou des options de ligne de commande. Priorité : CLI > env > fichier > valeurs par défaut.

Variables prises en charge

```
PSS_URL          full URL, e.g. http://10.0.0.1:43971         (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 HTTP GET par endpoint dans la fenêtre TTL. Avec TTL=10 s, même des centaines de vérifications UserParameter par minute ne génèrent que ~6 requêtes HTTP par minute vers PSS.

## Démarrage rapide

Vérification d’état (codes de sortie style Nagios)

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

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 (depuis /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
```

## Intégration avec Zabbix

Deux scénarios sont pris en charge ; choisissez celui qui correspond à votre environnement.

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

   Copiez *userparameter_pss.conf.example* dans */etc/zabbix/zabbix_agentd.d/pss.conf*, redémarrez *zabbix-agent*, puis importez sur le serveur un modèle avec des prototypes LLD utilisant les clés *pss.discover*. Exemples de liaisons

   ```
   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) avec zabbix_sender

   Lancez via un timer (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 des environnements one-shot).

   Exécutez un export périodique via systemd-timer ou 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* exposera le fichier via *–collector.textfile.directory*.
2. Scrape direct via un petit wrapper (par exemple *socat* + *pss-metrics dump*) ou 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 le parseur JSON, utilisez *–format=json* et configurez *data_format = « json »* avec les chemins des champs.

## HTTPS et authentification

Si le serveur web PSS fonctionne derrière HTTPS ou est protégé par mot de passe

```
PSS_URL=https://streamer.example.com:8443 \
PSS_USER=monitor PSS_PASS=secret \
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* suit 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* et *dump* produisent une ligne vide et se terminent 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 » plutôt que 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
```
