# Экспортер метрик дешевых управляемых китайских свитчей

**URL:** <https://forum.samohosting.ru/t/eksporter-metrik-deshevyh-upravlyaemyh-kitajskih-svitchej/2633>\
**Category:** 03. Проекты самохостят\
**Tags:** monitoring\
**Created:** [07.Июль.2026 21:00:21 UTC](https://forum.samohosting.ru/t/eksporter-metrik-deshevyh-upravlyaemyh-kitajskih-svitchej/2633 "2026-07-07T21:00:21Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![KRom](https://forum.samohosting.ru/user_avatar/forum.samohosting.ru/krom/32/362_2.png) [@KRom](https://forum.samohosting.ru/u/KRom)\
**Post date:** [07.Июль.2026 21:00:21 UTC](https://forum.samohosting.ru/t/eksporter-metrik-deshevyh-upravlyaemyh-kitajskih-svitchej/2633/1 "2026-07-07T21:00:21Z")

</div>

## Экспортер метрик для дешёвых управляемых свитчей (веб-интерфейс → Prometheus/Grafana)

Как и многие в [теме про управляемые свитчи для лаб](https://forum.samohosting.ru/t/upravlyaemye-svitchi-dlya-nashih-lab/675), я постепенно обрастаю дешёвыми управляемыми свитчами для домашней лабы. У топовых моделей есть SNMP, и с мониторингом всё просто. А вот у большинства бюджетных моделей, которые часто называют “simple switch” или “web managed switch”, из инструментов мониторинга — только веб-морда. SNMP там либо нет вообще, либо он настолько урезан, что толку от него мало.

Мне хотелось видеть метрики по трафику и статусам портов в Grafana вместе с остальной инфраструктурой. Нашёл проект [cheap-switch-exporter](https://github.com/pvelati/cheap-switch-exporter) — идея простая и рабочая: логинимся в веб-интерфейс свитча, парсим HTML-страницу со статистикой портов, отдаём метрики в формате Prometheus. Никакого SNMP не надо.

Но у оригинального проекта было два ограничения, которые в лабе с несколькими свитчами быстро упираются в потолок:

- работа только с одним устройством за раз;
- парсер заточен под конкретный набор моделей и не понимает более новые.

Так как у меня этих свитчей несколько разных моделей, я форкнул проект и доработал под себя.

> Ну и основной минус, с которым столкнулся я как и автор оригинального проекта (после чего забросил его, кмк) это то, что некоторые свитчи отдают счетчики портов в байтах, а некоторые в пакетах

### Что изменилось в моей версии

1. **Поддержка нескольких устройств одновременно** — можно опросить сразу весь парк свитчей одним экспортером, а не поднимать инстанс на каждый.
2. **Поддержка новых моделей** , в частности **SKS3200-8E2X**.
3. **Комментирование портов** — можно подписать порты (что к чему подключено), и это будет видно в метриках/дашборде.
4. **Исправлено распознавание столбцов таблицы** — разные модели отдают разный набор и порядок колонок на странице статистики, парсер теперь это учитывает, а не был завязан на один конкретный layout.
5. **Исправлено вычисление больших чисел** — на некоторых моделях счётчики трафика с длительным аптаймом переполняли парсинг/арифметику, теперь считается корректно.
6. **Добавлена сборка Docker-образа через GitHub Actions** — не нужно собирать руками, образ публикуется автоматически.

### Как это работает

Всё максимально просто, без магии:

1. Экспортер логинится в веб-интерфейс свитча под обычной учёткой администратора.
2. Парсит HTML-страницу со статистикой портов (трафик, статус линка и т.д.).
3. Отдаёт полученные метрики в формате Prometheus, дальше — Grafana как обычно.

Так это можно делать с любым количеством свитчей, у которых есть только веб-интерфейс, лишь бы формат страницы был распознан парсером.

Если у кого-то есть похожие “простые” свитчи с другим форматом веб-интерфейса — welcome с issue/PR в репозиторий, буду рад добавить поддержку.

Пример конфига

```auto
---
profiles:
  - profile_1:
      address: "192.168.1.1"
      username: "admin"
      password: "admin"
      timeout_seconds: 5
      poe: 0
      comments:
        Port 1: Port 1
        Port 2: Port 2
        Port 3: Port 3
        Port 4: Port 4
        Port 5: Port 5
        Port 6: Core Switch
  - profile_2:
      address: "192.168.1.2"
      username: "admin"
      password: "admin"
      timeout_seconds: 5
      poll_rate_seconds: 30 # overrides settings.poll_rate_seconds for this profile only
      poe: 1
      comments:
        Port 1: Port 1
        Port 2: Port 2
        Port 3: Port 3
        Port 4: Port 4
  - profile_3:
      profile: v2 # selects the JSON-based dialect (e.g. SKS3200-8E2X); poe: 1 is not
      address: "192.168.1.3" # supported and rejected at startup for profile: v2
      username: "admin"
      password: "admin"
      comments:
        Port 1: Uplink
settings:
  poll_rate_seconds: 10 # default for profiles without their own poll_rate_seconds
  timeout_seconds: 5 # default for profiles without their own timeout_seconds

```

и docker-compose

```auto
services:
  exporter:
    image: ghcr.io/krom/cheap-switch-exporter:1
    ports:
      - 8085:8080
    environment:
      - TZ:Europe/Moscow
    restart: unless-stopped
    volumes:
      - ./config.yaml:/config.yaml

```

Пока в графане так накидал

 ![image](https://forum.samohosting.ru/uploads/default/original/2X/1/11b9bc1ffc54191168d5be9620f743ffd1f28210.jpeg)

Думаю, что с этим делать  
P.S.  
Да, вайбкодинга в лабе у меня стало больше.
