Отслеживание статуса сервера

Sland

ПротNв те4ениR
Регистрация
15 Дек 2006
Сообщения
199
Реакции
162
Этот гайд поможет настроить систему мониторинга серверов с использованием Grafana, Prometheus и Node Exporter для сбора и отображения метрик, а также отправки уведомлений в Telegram в случае падения серверов. В гайде используется Ubuntu 22.04.
  • Установка и настройка Node Exporter на отслеживаемом сервере.
Node Exporter собирает системные метрики, такие как использование ЦП, памяти, диск и сеть, и передаёт их Prometheus для мониторинга.
Скачиваем Node Exporter на отслеживаемый сервер:
Код:
wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz
Распаковываем архив:
Код:
tar xvf node_exporter-1.8.2.linux-amd64.tar.gz
Удаляем архив:
Код:
rm node_exporter-1.8.2.linux-amd64.tar.gz
Перемещаем папку:
Код:
sudo mv node_exporter-1.8.2.linux-amd64 node_exporter
Делаем бинарник исполняемым:
Код:
chmod +x node_exporter/node_exporter
Перемещаем бинарник в /usr/bin для удобного запуска:
Код:
sudo mv node_exporter/node_exporter /usr/bin/
Удаляем временную папку:
Код:
rm -Rvf node_exporter/
Создаём systemd-сервис для автоматического запуска Node Exporter:
Код:
sudo tee /etc/systemd/system/exporterd.service > /dev/null <<EOF
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=root
ExecStart=/usr/bin/node_exporter
[Install]
WantedBy=multi-user.target
EOF
Запускаем сервис и включаем его на автозапуск, команды вводим отдельно!!
Код:
sudo systemctl daemon-reload
Код:
sudo systemctl enable exporterd.service
Код:
sudo systemctl start exporterd.service
Открываем порт 9100:
Код:
sudo ufw allow 9100
А еще лучше открывать 9100 не для всех подряд, а только для того айпишника, на котором сервер стоит Grafana и Prometheus:
Код:
sudo ufw allow from 192.168.1.100 to any port 9100
Вместо 192.168.1.100 ваш айпи сервера на котором будет стоять статистика
  • Установка и настройка Prometheus и Grafana на сервере для сбора метрик.
Prometheus — это система мониторинга, которая будет собирать данные с Node Exporter, а Grafana — это визуализационный инструмент для отображения этих данных
  • Установка Prometheus
Скачиваем Prometheus на сервер где будет статистика либо на том же самом сервере:
Код:
wget https://github.com/prometheus/prometheus/releases/download/v2.54.1/prometheus-2.54.1.linux-amd64.tar.gz
Распаковываем архив:
tar xvf prometheus-2.54.1.linux-amd64.tar.gz
Удаляем архив:
Код:
rm prometheus-2.54.1.linux-amd64.tar.gz
Перемещаем папку:
Код:
sudo mv prometheus-2.54.1.linux-amd64 prometheus
Открываем конфиг нашего Prometheus для настройки:
Код:
vim /root/prometheus/prometheus.yml
AD_4nXfpzdmOptlUwiM92SPrMa-pWw8x7OvugObLjVCwdkek0OIoh1_cv3FGPnyU8ApEXmvoXmwohPocJ8oCY6v1U2NTyWyCXt7cpqs0gJ162KoneeiLoCQdXAm4e0fT5hNOCRshcQyn6NOcIh-vXKis9pLj4XMV


На место красной стрелки вписываем ip на который мы устанавливали node_exporter
ВАЖНО! Все, блин, таргеты — в одинарных кавычках через запятую с пробелом!
Пример: - targets: [‘localhost:9090’, ‘айпи-вашего-сервера:9100’]
Далее выдаем права на исполнение нашего файла:
Код:
chmod +x /root/prometheus/prometheus.yml
Создаем сервисный файл, КОПИРУЕТЕ ВСЁ ЦЕЛИКОМ!
Код:
sudo tee /etc/systemd/system/prometheusd.service > /dev/null <<EOF
[Unit]
Description=prometheus
After=network-online.target
[Service]
User=root
ExecStart=/root/prometheus/prometheus --config.file="/root/prometheus/prometheus.yml"
Restart=always
RestartSec=3
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target

EOF
После чего запускаем сервис:
Код:
sudo systemctl daemon-reload && sudo systemctl enable prometheusd && sudo systemctl restart prometheusd
  • Установка и настройка Grafana.
Если у вас RU сервер то перейдите к следующему пункту.
Установите необходимые пакеты:
Код:
sudo apt-get install -y apt-transport-https software-properties-common wget
Импортируйте ключ GPG, копируйте по одному!!!:
Код:
sudo mkdir -p /etc/apt/keyrings/
Код:
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
Добавим репозиторий для стабильных выпусков:
Код:
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
Выполните следующую команду, чтобы обновить список доступных пакетов:
Код:
sudo apt-get update
Чтобы установить операционную систему Grafana, выполните следующую команду:
Код:
sudo apt-get install grafana
Чтобы запустить службу, выполните следующую команду:
Код:
sudo systemctl daemon-reload && sudo systemctl start grafana-server && sudo systemctl enable grafana-server
Откройте порт 3000 для доступа к Grafana:
Код:
sudo ufw allow 3000
  • Установка Grafana на RU сервер.
Скачайте пакет напрямую на сервер:
Код:
wget https://dl.grafana.com/oss/release/grafana_11.4.0_amd64.deb
Установка зависимостей:
Код:
sudo apt-get update
sudo apt-get install -y adduser libfontconfig
Установите скачанный .deb пакет с помощью dpkg:
Код:
sudo dpkg -i grafana_11.4.0_amd64.deb
Если в процессе установки возникают ошибки зависимостей, исправьте их командой:
Код:
sudo apt-get install -f
После установки запустите сервис Grafana и настройте его автозапуск при загрузке системы:
Код:
sudo systemctl start grafana-server
Код:
sudo systemctl enable grafana-server
Убедитесь, что Grafana работает корректно:
Код:
sudo systemctl status grafana-server
  • Добавление Prometheus как источника данных в Grafana
Переходим в браузере на своём домашнем устройстве по адресу: Для просмотра ссылки Войди или Зарегистрируйся, где IP - адрес сервера, на который мы установили Prometheus и Grafana. Если не заходит то добавляем в файрволл порт 3000: ufw allow 3000 Логин и пароль: admin/admin Далее задаем свой пароль и попадаем в Dashboard.
Нажимаем на кнопку Data Sources
AD_4nXd--Be8k4XbjPtWgfbUqA8JkKUEszKByaspsoUcP7_xZwpBe9AVxjHfcOdnkpnGcqWa7f5sBAnmzbkrk3bNW9c1SGvK53Wd8o54tEkdV4g_p4_DV5MT3jHQptTRZYJrCVogvtVTpLzkyoFGxUwqBhirO4Qr

Выбираем Prometheus
AD_4nXcgq9eu4lPpvsQpEGJ0eJlGJLix5exshWzNaWfIIvYeNZMBGCZvUZHJwELwBrdnUErmFoMSYP4zN23G4HB8kueTf6h5TGeBBOiJavsK7v1rEuy4Iy8Bm1nOJJDErqjbobxzUB8qNgkRQl_YGrwJpcYf_T8

В графе URL вводим Для просмотра ссылки Войди или Зарегистрируйся , где IP - адрес сервера на котором стоит Prometheus и Grafana. После чего нажимаем внизу на Save & test
  • Импорт дашборда для мониторинга серверов
Скопируйте ссылку на дашборд Node Exporter.
Код:
https://grafana.com/grafana/dashboards/1860-node-exporter-full/
В Grafana перейдите в Dashboards, затем нажмите Create dashboard.
AD_4nXdOAWoLyZn5A5n2mLmcFGeB70NfqKkSzjYgGXc3lm97Nzz1jCimQE6wkWUD6-LFd2VhIAnNCLP8v-js7YN6KQaGts-jRg5OkJ7PJG93F-84Bw57HSR4cDeasJq0vvb4-xRYRd7cJNgGPNmaiGO0glXHOqlg

После чего выберите Import dashboard
AD_4nXdYGa-O97qPu7JN7ZDt-nbgdT_qSEYTvT51COcyt2Yc4CCTjFVmvyAxF54ffkYr4-vqfsgSgobfFX7MUwOn8c6RHKV3Puxt6GyLgw9WpEZ-FJkE-PTZ20X4o4inaSWwOEl3DHQED4iuz3quX7t1rdNdzm-J

Вставьте ссылку и нажмите Load
AD_4nXfUf2TBX1Q9axSbOBIx67sFPHngNV0vZM1-q6yOaVGRriCNjEjpoOh3KmHcicegk_Td5mVI4GA5f3gDL0f8kC4I5FERHeDY7Sj1HU4jsmm8pUuOWuD_pHKrJ5Z2cwoiHZup8ps_IzkHc4A235JhZHjgw9w

Выберите источник данных Prometheus из выпадающего списка и нажмите Import. При желании можете изменить название на другое
AD_4nXeoDLDUO5jOZm-x7Koc4R_ZuKWDhW2vLvgHnLGbk4EFh6jZ-W84Z-R5eLRm_mNGWA9cuXo8pmLmFUlAcwrkQJyUqyRzKBtoXlmz1AK3jo2XyVl6JW4JOGr_Msix8LccrHL9pKfwQt_whjsQuHVyNqeTxH9U


У вас откроется статистика. В разделе Hosts можете выбирать сервера, на которые вы установили Node_exporter. Сверху справа углу можете изменять данные: время, за которое отобразится статистика, ручное обновление статистики и изменить время обновления статистики. И всё, вы можете смотреть статистику сервера при переходе на Для просмотра ссылки Войди или Зарегистрируйся
AD_4nXcfO1R6l8EB2G0n52yNtQHgPsC36PhtVSWRrtnMxrWqbv_QOSWVGV136psm21eh_eH3cOCyvutk0kNC4xHnH84FWFJk8cWOC8agBcBKMFiAjw7Mw4IYHrA0s4oDYYiqK6YnAFVKExRPUjSqonZ-TrRyhaUx
  • Настройка уведомлений в Telegram об падении сервера и когда он восстановился
Для того чтобы получать уведомления о падении серверов, необходимо настроить Telegram в Grafana.
В Grafana перейдите в раздел Contact points и создайте новый контакт:
Выберите Telegram
В поле Token введите токен вашего бота (его можно получить у Для просмотра ссылки Войди или Зарегистрируйся).
В поле Chat ID введите свой ID Telegram (узнать его можно через Для просмотра ссылки Войди или Зарегистрируйся)
AD_4nXfobQkiempBgAXs5MIRHR90SinPhw86ZT1aQBA73Us5jm4I_IzshddPid2_c51pEUC6IrtIhCQxkNuznGAC1IBBK4f9g0dYO6M_pt5VKSPV63WOFyhM5fSIv92yOZ0IKxAyS5Vcp106kGimwVrdDb6tfzWG


После нажимаете Save contact point
Дальше, после создания бота для уведомления, переходим в Notification Templates и создаём новый шаблон, чтобы отправлялись сообщения типа «Ваш сервер IP упал!!!», а не длинный текст со всякими ссылками на ваш Grafana.
Вставьте следующий код в Template:
Код:
{{- define "telegram.message_alert" -}}
🚨 <strong>{{ .Labels.alertname }}</strong> 🚨
{{- if eq .Status "firing" }}
Сервер {{ .Labels.instance }} упал!!! 😱{{- else if eq .Status "resolved" }}
Сервер {{ .Labels.instance }} восстановлен! ✅
{{- end }}
{{- end -}}

{{ define "telegram" }}
{{ if .Alerts.Firing -}}
{{- range .Alerts.Firing }}
{{ template "telegram.message_alert" . }}
{{- end }}
{{- end }}
{{ if .Alerts.Resolved -}}
{{- range .Alerts.Resolved }}
{{ template "telegram.message_alert" . }}
{{- end }}
{{- end }}
{{ end }}
Дальше нажимаем на «Save» сверху справа в углу.

  • Создание правила алертинга для уведомлений в Telegram.
Перейдите в Alert rules и создайте новое правило. И сделайте как на Изображениях:


Вот тут создайте папки, во второй подгруппе поставьте время, через которое будут проверяться правила, другим словом, исполняться каждые N секунд/минут/часов. В Pending period ставьте None чтобы сразу отправлялось сообщение в Telegram.


В 4 пункте в Contact Point выберите вашего Telegram-бота.


Дальше сохраняйте правило через кнопку сверху справа в углу Save rule and exit.
  • Заключение
Теперь вы создали полноценную систему мониторинга серверов, которая позволяет вам отслеживать важные метрики в режиме реального времени, визуализировать их в Grafana и мгновенно получать уведомления в Telegram в случае сбоя сервера.
 
Привет.
В последнем пункте нет изображений ((. Можете их как то подгрузить? А то там правила выглядят страшновато для тех, кто не понимает.
 
Назад
Сверху