---
title: Conexión de sistemas de monitorización externos
url: https://doc2.pstreamer.tv/es/manual/extras/monitoring.html
lang: es
product: Perfect Streamer
version: 2.0.2.362
---

# Conexión de sistemas de monitorización externos

*pss-metrics* — exportador universal de métricas para Perfect Streamer

Un único script CLI en Python 3 que obtiene las estadísticas de la API HTTP del servidor web PSS y genera la salida para los sistemas de monitorización más habituales:

> - Zabbix (UserParameter, Low-Level Discovery, zabbix_sender trapper)
> - Prometheus (formato de exposición de texto para el textfile collector)
> - InfluxDB / Telegraf (line protocol o JSON para el exec input)
> - JSON genérico para scripts propios y comprobaciones de estado de tipo Nagios

El exportador es un único archivo autónomo sin dependencias de terceros; utiliza solo la biblioteca estándar de Python 3.6+ (*urllib*, *xml.etree*, *json*, *argparse*).

## Archivos

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

## Instalación

El exportador se suministra en */opt/pss/monitoring/pss-metrics.py*. Asegúrese de que esté instalado Python 3.6 o posterior:

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

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

No se requieren paquetes adicionales.

## Configuración

De forma predeterminada, *pss-metrics* se conecta al nodo por la dirección de loopback y determina el puerto del servidor web a partir de */opt/pss/config/pss.json* (o de */opt/pss/config/pss_default.json*); si no se ha podido leer el puerto de ninguno de los dos archivos, se utiliza *http://127.0.0.1:43971*. Los parámetros se pueden redefinir mediante variables de entorno, el archivo */etc/pss-metrics.conf* (formato *clave=valor*) o indicadores de la línea de comandos. Prioridad: CLI > env > archivo > valores predeterminados. *PSS_URL* es la excepción: el valor tomado del archivo puede ser sustituido por la detección automática del puerto; defina la URL mediante una variable de entorno o un indicador de la línea de comandos.

Variables admitidas:

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

Caché: cada ejecución realiza como máximo una petición HTTP GET por punto final dentro de la ventana del TTL. Con TTL=10 s, incluso cientos de comprobaciones de UserParameter por minuto generan unas 6 peticiones HTTP por minuto a cada punto final de la API.

## Inicio rápido

Comprobación de estado (códigos de salida de tipo Nagios):

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

Detección LLD de Zabbix:

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

Obtención de una única métrica (para su uso en un UserParameter de 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
```

Exportación completa:

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

## Rutas de las métricas

*pss-metrics get* acepta una ruta separada por puntos. Una salida vacía significa «valor ausente» (por ejemplo, la métrica solo existe para los flujos en ejecución).

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

Atributos útiles por flujo (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
```

Las velocidades están en kilobits por segundo: `speed1` en la entrada, `speed` en la salida. El atributo `speed` solo existe en las salidas UDP; en los demás tipos de salida la velocidad se deduce del incremento de `sent-bytes` durante el propio intervalo de sondeo.

## Integración con Zabbix

Se admiten dos escenarios: elija el que se adapte a su entorno.

1. UserParameter estático + LLD (Zabbix agent v1 / v2)

   Copie *userparameter_pss.conf.example* en */etc/zabbix/zabbix_agentd.d/pss.conf*, reinicie *zabbix-agent* e importe en el servidor una plantilla con prototipos LLD que utilicen las claves *pss.discover*. Ejemplo de vinculaciones:

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

   En el servidor 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) mediante zabbix_sender

   Ejecútelo con un temporizador (cron / systemd) y redirija la salida a una tubería:

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

## Integración con Prometheus

Dos opciones.

1. Textfile collector (recomendado para entornos de ejecución puntual).

   Ejecute una exportación periódica mediante un temporizador de systemd o 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* entregará el archivo mediante *–collector.textfile.directory*.
2. Scrape directo a través de un pequeño envoltorio (por ejemplo, *socat* + *pss-metrics dump*) o de cualquier proxy HTTP de terceros que prefiera.

## Integración con Telegraf / InfluxDB

Telegraf *inputs.exec*:

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

Para el analizador JSON, utilice *–format=json* y configure *data_format = «json»* indicando las rutas a los campos.

## HTTPS y autenticación

El exportador está previsto para ejecutarse en el propio nodo: el servidor web PSS acepta sin autorización las peticiones procedentes de la dirección local. Las variables *PSS_USER*/*PSS_PASS* se transmiten como HTTP Basic; resultan útiles cuando el acceso a la API se publica a través de un proxy intermedio con autorización Basic. El exportador no supera la autorización Digest propia del servidor web PSS.

Acceso por HTTPS:

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

Certificados autofirmados: establezca *PSS_INSECURE=1* (no recomendado) o indique *PSS_CA_BUNDLE=/path/to/ca.pem*.

## Códigos de salida

*pss-metrics* sigue la convención de Nagios:

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

*get* imprime una cadena vacía y termina con el código 0 si la entidad solicitada no existe; esto se corresponde con la expectativa de Zabbix de que un valor vacío se interprete como «NOT_SUPPORTED» y no como un fallo del agente.

## Diagnóstico

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