Проблема
Типичный парк Linux-серверов это десятки или сотни машин, каждая из которых генерирует десятки метрик: загрузка CPU, потребление памяти, дисковые операции, сетевой трафик, температура компонентов и многое другое. Администратор, вооружённый только top, htop и df -h, способен оценить состояние одного-двух серверов, но когда счёт идёт на десятки, ручной сбор информации превращается в бесконечный обход по SSH. При этом проблемы часто возникают в нерабочее время, и обнаруживаются постфактум по жалобам пользователей или после полного исчерпания ресурсов. Отсутствие единой картины и исторических данных делает невозможным анализ трендов, планирование мощностей и оперативное реагирование. Prometheus Grafana это открытый стек, который решает эти проблемы, предоставляя централизованный сбор, хранение и визуализацию метрик с любого количества серверов полностью бесплатно.
Решение
Стек Prometheus Grafana де-факто стандарт для мониторинга Linux-инфраструктуры. На целевые серверы устанавливается лёгкий агент Node Exporter, который открывает HTTP-эндпоинт с метриками системы (CPU, память, диск, сеть, systemd-сервисы и т.д.). Центральный сервер Prometheus опрашивает Node Exporter’ы по расписанию, сохраняет временные ряды в локальной TSDB и предоставляет язык запросов PromQL для анализа. Grafana подключается к Prometheus как к источнику данных и отображает метрики в виде наглядных дашбордов с графиками, таблицами и алертами. Вся система контейнеризуема, но мы развернём её «на голом железе» для максимальной производительности и простоты. Официальная документация: Prometheus Overview, Grafana documentation, Node Exporter. Дополнительно мы настроим оповещения в Telegram через Alertmanager, чтобы администратор узнавал о проблемах раньше, чем пользователи.
Пошаговая инструкция
Шаг 1. Установка Node Exporter на целевые серверы
Node Exporter это единый бинарный файл без зависимостей. Установим его на каждый Linux-сервер, который нужно мониторить.
- Скачайте последнюю версию Node Exporter с официального GitHub:
bash
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v1.8.0/node_exporter-1.8.0.linux-amd64.tar.gz
tar xzf node_exporter-1.8.0.linux-amd64.tar.gz
sudo mv node_exporter-1.8.0.linux-amd64/node_exporter /usr/local/bin/
- Создайте systemd-юнит
/etc/systemd/system/node_exporter.service:
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=nobody
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
- Запустите и включите службу:
bash
sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter
- Проверьте, что метрики отдаются на порту 9100:
bash
curl http://localhost:9100/metrics
Документация Node Exporter: Monitoring Linux host metrics with the Node Exporter.
Шаг 2. Установка и настройка Prometheus Server
Prometheus устанавливается на центральный сервер мониторинга. Он будет опрашивать все Node Exporter’ы.
- Скачайте Prometheus с официального сайта:
bash
cd /tmp
wget https://github.com/prometheus/prometheus/releases/download/v2.54.0/prometheus-2.54.0.linux-amd64.tar.gz
tar xzf prometheus-2.54.0.linux-amd64.tar.gz
sudo mv prometheus-2.54.0.linux-amd64/prometheus /usr/local/bin/
sudo mv prometheus-2.54.0.linux-amd64/promtool /usr/local/bin/
sudo mkdir -p /etc/prometheus /var/lib/prometheus
- Создайте конфигурационный файл
/etc/prometheus/prometheus.yml:
yaml
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'linux_servers'
static_configs:
- targets:
- '192.168.1.10:9100'
- '192.168.1.11:9100'
- '192.168.1.12:9100'
Замените IP-адреса на реальные адреса ваших серверов с Node Exporter.
- Создайте systemd-юнит
/etc/systemd/system/prometheus.service:
[Unit]
Description=Prometheus
After=network.target
[Service]
User=nobody
ExecStart=/usr/local/bin/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus/ \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries
[Install]
WantedBy=multi-user.target
- Запустите Prometheus:
bash
sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus
- Проверьте веб-интерфейс Prometheus:
http://<IP_сервера>:9090. На вкладке Status → Targets должны отображаться все целевые серверы со статусом UP.
Подробнее о настройке: Getting started with Prometheus.
Шаг 3. Установка Grafana и подключение к Prometheus
Grafana — это веб-интерфейс для визуализации метрик. Установим её на тот же сервер, что и Prometheus (или на отдельный).
- Добавьте репозиторий Grafana и установите пакет:
bash
sudo apt-get install -y software-properties-common wget
sudo wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key
echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install grafana -y
- Запустите Grafana:
bash
sudo systemctl daemon-reload
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
- Откройте веб-интерфейс Grafana:
http://<IP_сервера>:3000. Логин/пароль по умолчаниюadmin/admin. - Добавьте источник данных:
- Перейдите в Connections → Data sources → Add data source.
- Выберите Prometheus.
- В поле URL введите
http://localhost:9090. - Нажмите Save & test.
Документация по установке Grafana: Install Grafana on Debian/Ubuntu.
Шаг 4. Импорт готового дашборда Node Exporter Full
Чтобы не создавать графики вручную, импортируйте проверенный дашборд из сообщества.
- В Grafana перейдите в Dashboards → New → Import.
- В поле Import via grafana.com введите ID дашборда
1860(Node Exporter Full) и нажмите Load. Этот дашборд доступен на Grafana Dashboards. - Выберите источник данных Prometheus и нажмите Import.
Через несколько секунд откроется полноценный дашборд с графиками CPU, памяти, дискового ввода-вывода, сети и аптаймом для всех хостов.
Шаг 5. Настройка алертов (Alertmanager + Telegram)
Prometheus включает Alertmanager для отправки оповещений. Настроим уведомления в Telegram.
- Скачайте Alertmanager с официального сайта:
bash
cd /tmp
wget https://github.com/prometheus/alertmanager/releases/download/v0.27.0/alertmanager-0.27.0.linux-amd64.tar.gz
tar xzf alertmanager-0.27.0.linux-amd64.tar.gz
sudo mv alertmanager-0.27.0.linux-amd64/alertmanager /usr/local/bin/
sudo mkdir /etc/alertmanager
- Создайте конфигурацию
/etc/alertmanager/alertmanager.yml:
yaml
route:
receiver: 'telegram'
receivers:
- name: 'telegram'
telegram_configs:
- bot_token: '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11'
chat_id: 123456789
message: '{{ .CommonAnnotations.summary }}'
Замените токен и chat_id на реальные. Токен получается у @BotFather, chat_id — у любого бота-информатора.
- Создайте systemd-юнит и запустите Alertmanager:
bash
sudo systemctl enable --now alertmanager
- В конфигурации Prometheus (
/etc/prometheus/prometheus.yml) добавьте секцию rule_files и alerting:
yaml
alerting:
alertmanagers:
- static_configs:
- targets:
- localhost:9093
rule_files:
- "/etc/prometheus/alerts.yml"
- Создайте файл правил
/etc/prometheus/alerts.yml:
yaml
groups:
- name: linux
rules:
- alert: HighCPU
expr: 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m
labels:
severity: critical
annotations:
summary: "High CPU usage on {{ $labels.instance }}"
- Перезапустите Prometheus:
bash
sudo systemctl restart prometheus
Теперь при превышении порога CPU 80% в течение 5 минут Alertmanager отправит уведомление в Telegram.
Официальная документация по алертингу: Alerting rules, Alertmanager configuration.
Устранение распространённых проблем
| Симптом | Вероятная причина | Решение |
|---|---|---|
| Target в Prometheus отображается как DOWN | Закрыт порт 9100 на целевом сервере или Node Exporter не запущен | Проверьте systemctl status node_exporter. Откройте порт 9100 в брандмауэре: sudo ufw allow 9100/tcp. |
| В Grafana нет данных (Dashboards пустые) | Неверный URL источника данных Prometheus или Prometheus не слушает порт 9090 | Проверьте curl http://localhost:9090/metrics. В настройках источника данных укажите http://localhost:9090. |
| Дашборд Node Exporter Full не показывает графики | Не совпадают названия метрик (версия Node Exporter отличается от той, под которую создан дашборд) | Попробуйте импортировать дашборд с ID 16098 (Node Exporter / System metrics) или обновите Node Exporter до последней версии. |
| Alertmanager не отправляет сообщения в Telegram | Неверный токен или chat_id, или Alertmanager не может достучаться до API Telegram | Проверьте лог Alertmanager: journalctl -u alertmanager -f. Убедитесь, что сервер имеет доступ к api.telegram.org (443 порт). |
| Высокое потребление памяти Prometheus | Слишком много метрик или слишком большой интервал хранения | Уменьшите --storage.tsdb.retention.time (по умолчанию 15 дней). Используйте федерацию или удалённое хранилище для долгосрочного хранения. |
Развёрнутый стек Prometheus Grafana даёт администратору полную картину состояния всей серверной инфраструктуры в реальном времени и за любой исторический период. Node Exporter собирает метрики без нагрузки на серверы, Prometheus эффективно хранит временные ряды, а Grafana превращает их в наглядные дашборды, которые можно вывести на отдельный монитор в NOC. Добавив алерты, вы перестанете узнавать о проблемах от пользователей бот в Telegram сообщит о высокой нагрузке или заполнении диска раньше, чем это заметят. Стек полностью бесплатен, открыт и поддерживается огромным сообществом, а его настройка по описанной инструкции занимает не более часа.







