Подключение внешних систем мониторинга¶
pss-metrics — универсальный экспортёр метрик для Perfect Streamer
Один CLI-скрипт на Python 3, который забирает статистику из HTTP API веб-сервера PSS и формирует вывод для самых распространённых систем мониторинга:
Zabbix (UserParameter, Low-Level Discovery, zabbix_sender trapper)
Prometheus (текстовый формат экспозиции для textfile collector)
InfluxDB / Telegraf (line protocol либо JSON для exec input)
Универсальный JSON для произвольных скриптов и Nagios-style проверок состояния
Экспортёр — единый самодостаточный файл без сторонних зависимостей, использует только стандартную библиотеку Python 3.6+ (urllib, xml.etree, json, argparse).
Файлы¶
pss-metrics.py main CLI (executable)
userparameter_pss.conf.example UserParameter template for Zabbix
Установка¶
Экспортёр поставляется в /opt/pss/monitoring/pss-metrics.py. Убедитесь, что установлен Python 3.6 или новее:
# RHEL / Rocky / AlmaLinux
yum install -y python3
# Debian / Ubuntu
apt-get install -y python3
Дополнительные пакеты не требуются.
Конфигурация¶
По умолчанию pss-metrics подключается к узлу по петлевому адресу, определяя порт веб-сервера из /opt/pss/config/pss.json (либо /opt/pss/config/pss_default.json); если порт не удалось прочитать ни из одного файла, используется http://127.0.0.1:43971. Параметры можно переопределить через переменные окружения, файл /etc/pss-metrics.conf (формат ключ=значение) или флаги командной строки. Приоритет: CLI > env > файл > значения по умолчанию. Исключение — PSS_URL: из файла он может быть переопределён автоопределением порта; задавайте URL через переменную окружения или флаг командной строки.
Поддерживаемые переменные:
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
Кеш: каждый запуск делает не более одного HTTP GET на конечную точку в окне TTL. При TTL=10 с даже сотни проверок UserParameter в минуту дают ~6 HTTP-запросов в минуту на каждую конечную точку API.
Быстрый старт¶
Проверка состояния (Nagios-style exit codes):
pss-metrics.py health
# OK: total=42 running=15 stopped=27 unhealthy=0 version=<версия>
Zabbix LLD-обнаружение:
pss-metrics.py discover streams
pss-metrics.py discover inputs --running-only
pss-metrics.py discover outputs
Получение одной метрики (использовать в Zabbix UserParameter):
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
Полный экспорт:
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
Пути метрик¶
pss-metrics get принимает путь, разделённый точками. Пустой вывод означает «значение отсутствует» (например, метрика существует только для запущенных потоков).
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
Полезные атрибуты по потокам (из /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
Интеграция с Zabbix¶
Поддерживаются два сценария — выберите подходящий вашему окружению.
Статический UserParameter + LLD (Zabbix agent v1 / v2)
Скопируйте userparameter_pss.conf.example в /etc/zabbix/zabbix_agentd.d/pss.conf, перезапустите zabbix-agent, импортируйте на сервере шаблон с LLD-прототипами, использующими ключи pss.discover. Пример привязок:
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
На 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]Trapper (push) через zabbix_sender
Запускайте по таймеру (cron / systemd) и направляйте вывод в pipe:
/opt/pss/monitoring/pss-metrics.py dump --format=zabbix-trapper \ --zabbix-host="$(hostname)" \ | zabbix_sender -z zabbix.example.com -i -
Интеграция с Prometheus¶
Два варианта.
Textfile collector (рекомендуется для one-shot окружений).
Запускайте периодический экспорт через systemd-timer или 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.promnode_exporter отдаст файл через –collector.textfile.directory.
Прямой scrape через маленькую обёртку (например, socat + pss-metrics dump) либо любой сторонний HTTP-прокси на ваш выбор.
Интеграция с Telegraf / InfluxDB¶
Telegraf inputs.exec:
[[inputs.exec]]
commands = ["/opt/pss/monitoring/pss-metrics.py dump --format=influx"]
interval = "10s"
timeout = "5s"
data_format = "influx"
Для JSON-парсера используйте –format=json и настройте data_format = «json» с указанием путей к полям.
HTTPS и аутентификация¶
Экспортёр рассчитан на запуск на самом узле: запросы с локального адреса веб-сервер PSS принимает без авторизации. Переменные PSS_USER/PSS_PASS передаются как HTTP Basic — они пригодятся, когда доступ к API опубликован через промежуточный прокси с Basic-авторизацией; собственную Digest-авторизацию веб-сервера PSS экспортёр не проходит.
Доступ по HTTPS:
PSS_URL=https://streamer.example.com:43981 pss-metrics.py health
Самоподписанные сертификаты: установите PSS_INSECURE=1 (не рекомендуется) либо укажите PSS_CA_BUNDLE=/path/to/ca.pem.
Коды возврата¶
pss-metrics следует Nagios-конвенции:
0 OK
1 WARNING (e.g. running streams report unhealthy)
2 CRITICAL (PSS is unreachable)
3 UNKNOWN (invalid arguments / internal error)
get выводит пустую строку и завершается с кодом 0, если запрошенная сущность отсутствует — это соответствует ожиданию Zabbix, что пустое значение трактуется как «NOT_SUPPORTED», а не как сбой агента.
Диагностика¶
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