Измерение скорости до собственного сервера - OpenSpeedTest и LibreSpeed

Предыстория и задача

Я уже касался этой темы и расcказывал, как можно при помощи Docker и специализированной программы iperf проверить скорость работы со своими сервисами. Но, во времена широкого распростанения всевозможных графических представлений информации, вывод результатов, который предлагает iperf, далёк от идеала.

Хочется чего-нибудь, похожего на https://speedtest.net.

Что ж, задача, в принципе ясна: хочется "поднять" self-hosted сервис, позволяющий получать легко воспринимаемую информацию о скорости доступа к домашним серверам. Большим плюсом было бы наличие официального и поддерживаемого docker-образа.

Первая удача - OpenSpeedTest

Я начал поиски и, как обычно, обратился к Google. Дело было достаточно давно и результаты, которые я получил тогда, несколько отличаются от тех, что можно налюдать в выдаче сейчас. Однако, в то время мои мысли были меньше всего заняты вопросами написания этой статьи, более того, я тогда и не предполагал, что буду её писать, и, как следствие, я не удосужился сделать какие-либо скриншоты, поэтому могу сейчас придумать всё, что угодно вам придётся поверить мне на слово - в результатах поиска был лидер и это был https://openspeedtest.com/.

В принципе, этот продукт меня полностью устроил: он выдавал вполне приемлемую "картинку" и у него был оригинальный docker-образ. Плюсом была возможность скачать исходный код. А ещё это сервис мог работать в двух режимах.

Первый режим используется по умолчанию и предполагает обращение к файлу index.html (конечно, в адресной строке имя самого файла писать совсем не обязательно). Особенность этого режима заключается в возможности работы без подключения к сети инернет, поэтому авторы назвали этот режим offline. То есть, вы можете измерять скорость к вашему серверу как через интернет, так и в локальной сети, не имеющей выхода во всемирную паутину.

Второй режим предполагает обращение к файлу hosted.html (в этом случае нужно указывать имя файла в адресной строке) и назван авторами online. Он отличается от первого тем, что результаты измерения сохраняются в базе данных у разработчика. Для просмотра истории замеров необходимо зарегистрироваться в их службе/сервисе (для сохранения результатов, регистрация, как я понял из имеющегося описания, не нужна).

Если честно, второй режим я отбросил - не совсем понимаю, зачем разработчикам результаты моих замеров, да и регистрироваться у них для просмотра сохранённой истории не хотелось совсем. Хотя, конечно, это было бы приятным плюсом - просмотр данных предыдущих тестов. Ну нет, так нет.

Продолжение поиска - LibreSpeed

В общем, пользовался я этим сервисом (openspeedtest) больше полугода. Надо отметить, что за это время он ни разу не обновился. С одной стороны, вроде как ошибок не было и авторам нечего было исправлять. Но, с другой стороны, улучшений тоже не предлагалось. И вот, в один прекрасный день, я, видимо, в погоне за чем-то новым, повторил поиск в Google. И, как уже упоминал, получил несколько другой результат. На этот раз в качестве лидера мне был предложен другой продукт - https://librespeed.org/.

Это проект с открытым исходным кодом (open source), который хостится на GitHub, и у него есть несколько инкарнаций в публичном репозитории Docker. Я долго сомневался, какой из двух основных образов выбрать: от известного и плодовитого Linuxserver или тот, который советуют в документации на GitHub - adolfintel/speedtest. В конце концов я отдал предпочтение второму, посчитав его "оригинальным" образом.

Понятно, что визуальные представления информации о ходе процесса замера скорости и самого результата этого замера, у двух сервисов - openspeedtest и librespeed - отличаются. Но есть и более глубокое, функциональное отличие: у сервиса librespeed возможность сохранять и просматривать историю замеров встроена в сервис, данные при этом хранятся у вас в базе данных и никакой регистрации в стороннем сервисе не требуется. К этому прилагается ещё один маленький бонус - в качестве СУБД можно использовать на выбор любую из трёх широко распространённых и бесплатных: SQLite (встроена и доступна без каких-либо дополнительных настроек), mySQL, или PostgreSQL - последние две могут потребовать использование отдельных контейнеров или внешних баз данных, ну и дополнительных настроек, куда ж без этого.

Просмотр этой сохранённой статистики (авторы назвали её телеметрией) возможен по адресу https://your.server.address/results/stats.php(при этом, для доступа требуется пароль), где your.server.address - адрес вашего сервиса.

В принципе, сбор и сохранение статистики можно и запретить - достаточно выставить переменную окружения TELEMETRY в значение false. При этом пропадёт и возможность делиться ссылкой на результаты своих замеров.

Ещё одна интересная особенность сервиса librespeed - возможность предоставлять данные о провайдере и расстоянии до сервера, которые сервис получает от службы https://ipinfo.io/. С использованием этой службы связан один нюанс - если у вас постоянно чешутся руки и вы всё время тестируете скорость до своего сервера, то, при превышении примерно 500 тестов в день, вам следует в ней зарегистрироваться. При этом, вы можете отказаться от услуг этого сервиса, выставив нужное значение для соответствующей переменной окружения (DISABLE_IPINFO).

Но и на этом плюшки не заканчиваются. Сервис librespeed позволяет встроить в свой интерфейс возможность выбора вашего сервера, если у вас их несколько. Для этого, на каждом своём сервере вы поднимаете так называемый backend сервис, и на каком-то одном - frontend сервис. Я не буду сейчас описывать настройки, всё это есть в документации, кроме того, у меня нет пока двух (или более 😉) серверов, отмечу лишь, что то, какую роль будет выполнять контейнер, определяется также с помощью переменной окружения (MODE).

Закончу перечисление особенностей сервиса librespeed упоминанием о том, что авторами создан шаблон для приложения под Android - желающим предлагается создать приложение для замеров скорости до своих серверов, добавив необходимую конфигурацию. На F-Droid (я уже писал про этот альтернативный магазин приложений для Android) размещено приложение, с замером скорости до нескольких серверов. Почему авторы не пошли дальше и не сделали гибкое, конфигурируемое приложение - для меня загадка.

Что получилось - примеры файлов docker-compose.yml

После обнаружения нового сервиса для тестирования скорости доступа, встал вопрос: какой из двух сервисов выбрать и что делать с "проигравшим". Поразмыслив, я решил пока оставить оба - старый, openspeedtest, верой и правдой отработал у меня уже достаточно много времени, а новый, librespeed, имел не совсем обязательную, но приятную дополнительную функциональность, главным образом в виде сохранения и просмотра истории тестов скорости. Так что, теперь у меня оба сервиса для замера скорости работают одновременно.

Ну и напоследок, примеры файлов для Docker Compose, которые использую я (о том, как разворачивать self-hosted сервисы при помощи Docker Compose я писал тут) :

  • openspeedtest:
openspeedtest:
  image: openspeedtest/latest:latest
  restart: unless-stopped
  ports:
    - xxxx:8080

замените xxxx на номер вашего порта

  • librespeed:
version: "2.1"
services:
  librespeed:
    image: adolfintel/speedtest
    container_name: librespeed
    environment:
      - PASSWORD=zzzzzz
      - TELEMETRY=true
      - TITLE=LibreSpeed to my server
      - EMAIL=your@email.com
      - ENABLE_ID_OBFUSCATION=true
    ports:
      - xxxx:80
    restart: unless-stopped

замените xxxx на номер вашего порта, zzzzzz на ваш пароль для доступа к статистике, your@email.com на ваш почтовый адрес, по которому ваши пользователи смогут послать вам требование удалить их статистику (особенности законодательства, ничего не поделаешь).

Вот, пожалуй, и всё на сегодня.