Почему это надо?
Часто для решения различных задач приходится пользоваться услугами облачных провайдеров для аренды VPS(Virtual Private Server). Чаще всего, провайдеры дешевых VPS серверов никак не гарантируют полосу пропускания сети. Однако обычно это не вызывает каких-либо неудобств, особенно если ваш проект не сильно требователен к скорости интернета.
В моем случае для моего проекта важна широкая полоса пропускания. И мне важна высокая скорость сети на протяжении всего жизненного цикла сервера. На текущий момент я пользуюсь услугами двух провайдеров, не буду их называть (назовем их провайдер А и провайдер Б).
Когда я арендую новый сервер, то для проверки скорости сети, я удаленно захожу на сервер и делаю тест скорости сети с помощью командной утилиты speedtest. Я вижу большую скорость интеренета и думаю, что данная скорость будет большую часть времени. Однако после введения метрик по ширине полосы пропускания, я сильно удивился.
Метрики
Работать все будет следующим образом. Prometheus будет с какой-то периодичностью дергать speedtest-exporter для получения данных по скорости интернета и сохрянять эти данные. Grafana будет забирать данные из Prometheus и отображать их.
1. Установка speedtest-exporter
Мои VPS сервера находятся в Kubernetes кластере. У меня уже установлены в кластере Grafana и Prometheus. Для speedtest helm chart я взял за основу докер образ billimek/prometheus-speedtest-exporter. В моем github репозитории вы можете найти helm chart для деплоя speedtest-exporter.
Для установки helm chart можно выполнить эти команды. В helm chart я использовал Daemonset для того, чтобы поднялся экземпляр speedtest-exporter на каждой ноде кластера.
helm repo add tarmalonchik https://tarmalonchik.github.io/charts/charts
helm install mychart tarmalonchik/speedtest-prometheus
2. Конфигурация Prometheus
После того, как поды поднимутся, надо добавить конфиг в Prometheus. Для того чтобы он собирал метрики с новых подов.
Я использовал данный helm-chart для установки Prometheus в мой kubernetes кластер. Этот helm-chart идет вместе с node-exporter (полезная штука, которая собирает много полезных метрик).
Для того, чтобы Promethues начал запрашивать данные у speedtest-exporter, надо добавить данную джобу в values.yaml helm-chart Prometheus. Добавлять джобу надо в scrape_configs.
- job_name: 'speedtest' metrics_path: /probe params: script: [ speedtest ] static_configs: - targets: - speedtest-exporter.default.svc.cluster.local:9469 scrape_interval: 10m scrape_timeout: 10m kubernetes_sd_configs: - role: pod namespaces: names: - default selectors: - role: "pod" label: "app.kubernetes.io/name=speedtest-exporter" relabel_configs: - source_labels: [ __meta_kubernetes_pod_node_name ] action: replace target_label: node
-
scrape_interval задает для Prometheus, как часто проводить измерение. Слишком часто дергать speedtest тоже не стоит, так как измерение нагружает сеть и cpu.
-
kubernetes_sd_configs нужны для того, чтобы Prometheus каждый раз измерял скорость для каждого пода, а не любого попавшегося.
-
relabel_configs нужны для того, чтобы привязать к данным метку лейбл ноды, чтобы было удобнее в Grafana смотреть данные.
3. Метрики Grafana
Для запуска Grafana в kubernetes кластере я воспользовался данным helm-chart. После запуска графана, надо указать в нем Prometheus в качестве источника метрик.
Теперь в графане нужно добавить отображение метрик, которые уже собираются. Достаточно добавить панель со следующим содержанием.
speedtest_download_bytes{node="$node"}*8 // Для downlink скорости -speedtest_upload_bytes{node="$node"}*8 // Для uplink скорости
Результат
Вот такие графики получились.
Вывод
Данные облачные провайдеры не подходят под мои цели. Я уже нахожусь в поисках серверов по доступным ценам с гарантированной полосой пропускания. Если вам нужна быстрая и стабильная сеть, подходите к выбору облачного провайдера более ответсвенно. К сожалению, в моем кейсе сервера GCP и Amazon мне не подходят по причине высоких цен на траффик. Поэтому приходится искать другие решения.
ссылка на оригинал статьи https://habr.com/ru/articles/852622/
Добавить комментарий