Immortal Articles
September 26, 2021

Grafana /// v1.0

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

Если вы не знаете, что такое нода — читаем статью.
Если вы не знаете, где арендовать сервер для ноды — читаем статью.
Если вы не знаете, как подключиться к серверу — читаем статью.
Если вы всё знаете — открываем MobaXterm и создаём сессию.

Содержание

Grafana - это платформа с открытым исходным кодом для визуализации, мониторинга и анализа данных.

Grafana позволяет пользователям создавать дашборды с панелями, каждая из которых отображает определенные показатели.

С помощью графаны можно творить действительно волшебные вещи.

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

С помощью этого дашборда, можно отслеживать полную информацию о сервере не только со стороны железа (нагрузка CPU, RAM и т.п.), но так же и инфу о последнем обработанном блоке вашей ноды.

Другими словами, можно в режиме реального времени заметить, что сервер нагружен, но вот нода по какой-то причине отстала от сети, даже не включая сервер, а наблюдая красивые графики в браузере. Выглядит примерно так:

По истине волшебная вещь, но за таким дашбордом - добро пожаловать в 2Top.

В данной статье я просто не могу объяснить, как добавить мониторинг на таком уровне - я не знаю язык запросов.

Сейчас мы будем настраивать мониторинг серверов на самом простом уровне: нагрузка проца, память, сеть и т.п.

Это пригодится как минимум тогда, когда вы решаете: а к какому серверу мне подселить очередную ноду? На помощь придут графики и статистика на дистанции, а не в моменте. Это позволит сделать правильный выбор.

Или вы можете заметить, что тестнет с каждым днём пожирает всё больше и больше места на диске и заблаговременно докупить дисковое пространство.

Я надеюсь. Во всяком случае, мы попробуем.

Нам будет нужно:

  • На сервер с нодой установить node-exporter - ПО, которое собирает и экспортирует метрики и статистику о работе железа.
  • Арендовать отдельный сервер (1 Core x 1 GB RAM) под ноду-обработчик и установить на новый сервер Prometheus и Grafana.
    Prometheus подтягивает и аккумулирует данные из node-exporter, а Grafana их визуализирует.
Содержание

Открываем сессию с сервером, где установлена какая-нибудь нода, откуда вы хотите получать данные в дашборд и устанавливаем на этот сервер ПО:

# обновляем 'базу данных'
sudo apt-get update && sudo apt-get upgrade -y
# скачиваем 'node_exporter' и наводим порядок одной командой
cd $HOME && \
wget https://github.com/prometheus/node_exporter/releases/download/v1.2.0/node_exporter-1.2.0.linux-amd64.tar.gz && \
tar xvf node_exporter-1.2.0.linux-amd64.tar.gz && \
rm node_exporter-1.2.0.linux-amd64.tar.gz && \
sudo mv node_exporter-1.2.0.linux-amd64 node_exporter && \
chmod +x $HOME/node_exporter/node_exporter && \
mv $HOME/node_exporter/node_exporter /usr/bin && \
rm -Rvf $HOME/node_exporter/
# создаём файл сервиса 'exporterd'
sudo tee /etc/systemd/system/exporterd.service > /dev/null <<EOF
[Unit]
Description=node_exporter
After=network-online.target
[Service]
User=$USER
ExecStart=/usr/bin/node_exporter
Restart=always
RestartSec=3
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
# запускаем сервис 'exporterd' одной командой
sudo systemctl daemon-reload && \
sudo systemctl enable exporterd && \
sudo systemctl restart exporterd
# проверяем логи
sudo journalctl -u exporterd -f

В выводе терминала вы увидите нечто подобное:

Теперь переходим в браузере на своём домашнем устройстве по адресу: http://<server_IP>:9100/, где <server_IP> - IP сервера, на котором установлен node_exporter.

Отобразится Node Exporter. Нажимаем Metrics:

Здесь мы увидим десять тысяч метрик, которые будут отправляться на ноду-обработчик и в дальнейшем отображаться в графане. Отлично.

Содержание

Нам потребуется сервер, куда будут отправляться данные для обработки и визуализации со всех наших серверов с нодами.

Я возьму сервер с 1 CPU, 1 GB RAM и 20 GB памяти на борту. Если этого окажется мало, то в будущем я обновлю требования.

Открываем сессию с нашим новым сервером (нода-обработчик) и устанавливаем необходимое ПО:

# обновляем 'базу данных' 
sudo apt-get update && sudo apt-get upgrade -y
# устанавливаем 'prometheus' одной командой
wget https://github.com/prometheus/prometheus/releases/download/v2.28.1/prometheus-2.28.1.linux-amd64.tar.gz && \
tar xvf prometheus-2.28.1.linux-amd64.tar.gz && \
rm prometheus-2.28.1.linux-amd64.tar.gz && \
mv prometheus-2.28.1.linux-amd64 prometheus
# открываем конфиг прометеуса для настройки
nano $HOME/prometheus/prometheus.yml

В графу tagrets нам нужно после запятой добавить IP-адрес нашего сервера с нодой, откуда экспортируется статистика.

В будущем их можно будет добавить бесконечно много, но сейчас ограничимся одним сервером.

Сохраняем изменения и создаём сервис.

# выдаём права на исполнение
chmod +x $HOME/prometheus/prometheus
# создаём файл сервиса 'prometheusd'
sudo tee /etc/systemd/system/prometheusd.service > /dev/null <<EOF
[Unit]
Description=prometheus
After=network-online.target
[Service]
User=$USER
ExecStart=$HOME/prometheus/prometheus \
--config.file="$HOME/prometheus/prometheus.yml"
Restart=always
RestartSec=3
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
# запускаем сервис 'prometheusd' одной командой
sudo systemctl daemon-reload && \
sudo systemctl enable prometheusd && \
sudo systemctl restart prometheusd
# проверяем логи
sudo journalctl -u prometheusd -f

Переходим в браузере на своём домашнем устройстве по адресу: http://<server_IP>:9090/, где <server_IP> - IP сервера, на котором установлен prometheus.

Переходим в Status > Targets:

Прометеус показывает 2 цели: первая - сервер, где мы устанавливали node_exporter, 2 - сам прометеус (localhost). Отлично.

Содержание

Теперь на этот же сервер с прометеусом мы устанавливаем графану, чтобы как-то визуализировать всю собирающуюся статистику.

# устанавливаем графану одной командой
sudo apt-get install -y adduser libfontconfig1 && \
wget https://dl.grafana.com/oss/release/grafana_8.0.6_amd64.deb && \
sudo dpkg -i grafana_8.0.6_amd64.deb
# запускаем сервис 'grafana-server'
sudo systemctl daemon-reload && \
sudo systemctl enable grafana-server && \
sudo systemctl restart grafana-server
# смотрим логи
sudo journalctl -u grafana-server -f

Переходим в браузере на своём домашнем устройстве по адресу: http://<server_IP>:3000/, где <server_IP> - IP сервера, на котором установлен prometheus и grafana.

Если всё прошло удачно, нас встречает приветственное окно графаны:

Пароль: admin Логин: admin

Теперь задаём собственный пароль:

Следующим шагом станет добавление Data Sources. Выбираем Prometheus:

Указываем в графе URL адрес к своему серверу с прометеусом и графаной:

После чего нажимаем Save & test.

Если всё настроили правильно - отобразится зелёная галочка:

Теперь нам нужно импортировать дашборд, чтобы наконец-то увидеть графики:

Чтобы импортировать дашборд по ID, нам, прежде всего, этот ID нужно узнать.

Переходим к каталогу дашбордов и выбираем любой понравившийся.

К сожалению, не все дашборды из каталога будут работать, но, если потрудиться, то можно найти рабочие решения. Далее в статье я представлю свой дашборд.

Для примера я укажу ID - 1860.

Выбираем имя для дашборда и источник прометеуса:

И вот уже начинают заполняться некоторые графики и панели:

Уже выглядит неплохо, правда?

Но как добавить в один дашборд несколько нод? Ведь не интересно создавать для каждой ноды отдельный дашборд в отдельной вкладке - это не удобно.

Содержание

Я решил не показывать весь процесс настройки своего дашборда. Я нашёл классный трафарет в каталоге, но пока довёл его до ума прошёл не один час. Запечатлеть все мои действия в статье не представляется возможным.

Но зато я создал 2 темплейта для коммьюнити, возможно вам понравится.

Выглядят они вот так:

Как вы могли заметить, я добавил возможность получать общую статистику со всех добавленных нод в виде таблицы. Как по мне, это супер удобно. У нас будет только 1 дашборд для всех нод:

Прям по кайфу, реально.

Плюс к этому, в левом углу есть поле Node, в выпадающем списке можно выбрать интересующую ноду и посмотреть её метрики более детально:

Пушка, правда?

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

Первым делом, заходим на мой гитхаб и скачиваем архив с двумя json-файлами:

Затем открываем сессии с нужными нам серверами и устанавливаем на каждый сервер (откуда хотите собирать статистику) node-exporter из соответствующего раздела статьи.

Проверяем, чтобы экспортёр установился корректно на каждом сервере.

Мы устанавливаем только node-exporter и только на те машины, с которых хотим собирать метрики.

Grafana и Prometheus устанавливаем только на один сервер, который мы выделили, как ноду-обработчик.

После того, как экспортёры настроены, открываем файл конфига прометеуса на ноде-обработчике:

nano $HOME/prometheus/prometheus.yml

Так выглядит мой конфиг:

Нас интересует только раздел static_configs.

targets - это цель, определённая машина, на которую мы устанавливали ноду-экспортёр и откуда желаем собирать метрики.

label - название этого сервера для отображения в графане.

targets: [<IP>:9100] - меняем только IP.
label: "<label>" - меняем на своё название сервера.

Строго соблюдаем синтаксис: каждый отступ - 2 пробела.

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

# так будет выглядеть конфиг для одной ноды
global:
  scrape_interval:     15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: "node_exporter"
    static_configs:
    - targets: [<IP>:9100]
      labels:
        label: "<label_1>"
        
# так будет выглядеть конфиг для четырёх нод
global:
  scrape_interval:     15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: "node_exporter"
    static_configs:
    - targets: [<IP-1>:9100]
      labels:
        label: "<label_1>"
    - targets: [<IP-2>:9100]
      labels:
        label: "<label_2>"
    - targets: [<IP-3>:9100]
      labels:
        label: "<label_3>"
    - targets: [<IP-4>:9100]
      labels:
        label: "<label_4>"

По аналогии можно добавить хоть бесконечность таргетов, главное сохранять синтаксис и отступы.

После того, как настроили конфиг - сохраняем изменения и перезапускаем графану и прометеус:

sudo systemctl daemon-reload && \
sudo systemctl enable grafana-server && \
sudo systemctl restart grafana-server && \
sudo systemctl restart prometheusd

Возвращаемся в графану и импортируем один из скачанных с гитхаба дашбордов:

Вуаля! Выглядит бомбически, мне очень нравится.

Если вам не нравится форма или размер виджета/панели, можно легко их редактировать: просто потянув за правый нижний угол виджета.

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

Главное, нажать на кнопку сохранения в правом верхнем углу страницы, чтобы изменения вступили в силу:

Возможно, в будущем добавлю ещё несколько вариаций дашбордов, если затянет. Подписываемся на обновления, хаха!

Содержание

мамичу за то, что родила такого гения.

Содержание

@how_to_node - канал, где я выкладываю свои гайды.

Полезные ресурсы.

Крипто-кошельки автора гайда.