Мониторинг Proxmox с Grafana
Теорию о пользе и важности мониторинга я опущу. Мониторинг может рассылать уведомления о превышении каких-то параметров, а расследование причин в моем конкретном случае заняло бы пару минут, а не часов.
TL:DR
Установка контейнера и настройка Docker
• Создаем LXC контейнер на Proxmox
• Устанавливаем Docker и связанные пакеты
• Скачиваем и редактируем конфигурационные файлы
Настройка Prometheus и Grafana
• Запускаем контейнеры Prometheus и Grafana
• Настраиваем Prometheus для мониторинга Proxmox
• Настраиваем Grafana для отображения данных Prometheus
• Создаем группу и пользователя для мониторинга
• Устанавливаем PVE-exporter и добавляем его в PATH
• Создаем файл конфигурации для PVE-exporter
• Запускаем PVE-exporter с указанием конфигурационного файла
• Проверяем, что PVE-exporter возвращает метрики
• Настраиваем автозапуск pve_exporter через systemd
Добавление дашборда Proxmox в Grafana
• Импортируем дашборд в Grafana
• Наслаждаемся результатом
Схема
- На устройстве, которое мы хотим мониторить, запускается сервис по сбору различной телеметрии (использование ЦП, памяти, сети и пр.);
- Эта информация передается на центральный узел, где собирается и хранится в базе данных;
- Grafana берет данные из этой базы и рисует нам красивые графики.
Подготовка
Для начала нам надо графану где-то запускать. Да и не только графану, но об этом позже. Поэтому мы создадим LXC контейнер. Нет, не виртуалку с линуксом, ибо жрет много и смысла в данном случае нет, a LXC контейнер, который ест в разы меньше.
Заходим в хранилище local
(не local-lvm) в веб интерфейсе proxmox (если у вас его нет, то посмотрите, где у вас хранятся ISO образы и резервные копии, вот туда вам надо). Выбираем вкладку CT Templates,
далее Templates
.
Перед нами открывается выбор шаблонов. Выбираем образ Debian 12 и нажимаем Download
.
После того как мы загрузили Debian, он отобразится во вкладке CT Templates
.
После чего выбираем Create CT
.
В открывшемся окне указываем пароль и нажимаем Next
.
В следующей вкладке выбираем шаблон.
Рамер диска и настройки памяти можно не трогать, ибо 8GB, 1 ядра и 512MB ОЗУ нам хватит.
В вкладке Network
для IPv4
выбираем DHCP
. Firewall
снимаем галку.
Проходим до конца Next
. Создаем и запускаем.
Переходим во вкладку Console
, ждем пока загрузится и логинимся с паролем, который мы указали в самом начале создания контейнера.
Вводим команду ip a
, чтобы не гадать потом на кофейной гуще почему же не работает apt update
.
Как видим, IP адрес успешно получен, а значит и интернет у нас есть.
Резервируем адрес на роутере
Теперь надо присвоить статику. Присвоение статики зависит от того роутера, который вы используете, поэтому тут я подробно показывать не буду, т.к у меня Keenetic.
Находим наш контейнер, указываем постоянный IP адрес, подтверждаем и статика присвоена.
Так же можно задать статику на этапе создания контейнера, но я так предпочитаю не делать, ибо любое устройство может случайно занять эту статику, если контейнер будет выключен.
Настройка SSH
Я предпочитаю подключаться через SSH из клиента, поэтому меняю настройки и перезагружаю службу.
nano /etc/ssh/sshd_config
Находим закомментированную строку и редактируем параметр PermitRootLogin — задаем значение yes
по умолчанию, значение может быть without-password или prohibit-password — оно разрешает вход для root средствами GSSAPI (не парольной аутентификации), например, смарт-карты или отпечатка пальца.
Сохраняемся и выходим из редактора: Ctrl+X, Y, Enter
systemctl restart ssh
Docker в LXC
Почему Docker? Попробуй без VPN установить Grafana в 2025 году из России. Я пытался.
Далее пробуем подключиться через терминал и приступаем к установке Docker, согласно официальному ману для Debian.
# Обновляем список доступных пакетов из репозиториев. apt-get update # Устанавливаем пакеты `ca-certificates` и `curl`. apt-get install ca-certificates curl # Создаем директорию `/etc/apt/keyrings` с правами доступа `0755`. install -m 0755 -d /etc/apt/keyrings # Скачиваем GPG-ключ Docker и сохраняем его в файл `/etc/apt/keyrings/docker.asc`. curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc # Устанавливаем права на чтение для всех пользователей на файл `docker.asc`. chmod a+r /etc/apt/keyrings/docker.asc # Добавляем репозиторий Docker в файл `/etc/apt/sources.list.d/docker.list`. echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null # Обновляем список пакетов после добавления нового репозитория Docker. apt-get update # Устанавливаем Docker и связанные с ним пакеты. apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # Запускаем тестовый контейнер `hello-world` для проверки корректности установки Docker. docker run hello-world
Если у васubuntu
, просто заменитеdebian
Prometheus
# Создаем директорию `prometheus` с поддиректориями `config` и `snmp_exporter`. mkdir -p prometheus/{config,snmp_exporter} # Переходим в директорию `prometheus`. cd prometheus # Скачиваем файл `docker-compose.yml` для развертывания Prometheus и Grafana. wget https://raw.githubusercontent.com/andrey-dvur/Scripts/main/Prometheus-Grafana/docker-compose.yml # Переходим в директорию `config`. cd config # Скачиваем файл конфигурации `prometheus.yml`. wget https://raw.githubusercontent.com/andrey-dvur/Scripts/main/Prometheus-Grafana/config/prometheus.yml # Переходим в директорию `prometheus/config`. cd ~/prometheus/config # Открываем файл `prometheus.yml` для редактирования. nano prometheus.yml
- файл
docker-compose.yml
описывает какие докер контейнеры и с какими параметрами мы будем запускать. На начальном этапе это два контейнера - Prometheus и Grafana. - в папку
config
скачался файл настроекprometheus.yml
Настройки Prometheus
Указываем в файле prometheus.yml
узел, который будем мониторить. Порт 9221
оставляю по умолчанию.
Здесь можно указать сразу несколько хостов Proxmox для мониторинга. После изменения настроек перезапускаем сервис/контейнер Prometheus.
Тут используется синтаксис YAML
, поэтому, да, важно количество пробелов-отступов
Переходим в папку prometheus
, где находится наш файл docker-compose.yml
и запускаем наши контейнеры
cd ~/prometheus/ # Запускаем контейнеры в фоновом режиме с использованием `docker-compose.yml`. docker compose up -d
Ждем запуска обоих контейнеров, после этого открываем браузер, вбиваем ip-адрес нашего сервера, на котором мы только что запустили контейнеры и порт графаны: 3000.
Grafana - Базовые настройки
Переходим по ip адресу в браузере:http://ip-адрес:3000.
Начальные логин/пароль admin/admin
Выбираем, откуда Grafana будет брать данные - Data sources
.
Адреc нашего Prometheus
указываем http://prometheus:9090
докер понимает написание адреса в таком виде
Внизу страницы нажимем Save & test
Prometheus и Grafana настроили, осталось на сам узел установить
Настройки Proxmox VE
На хосте Proxmox создадим группу и пользователя для мониторинга и назначим соответствующую роль
# Создаем группу `monitoring` с комментарием 'Monitoring group'. pveum groupadd monitoring -comment 'Monitoring group' # Назначаем группе `monitoring` роль `PVEAuditor` для доступа только на чтение. pveum aclmod / -group monitoring -role PVEAuditor # Создаем пользователя `pve_exporter@pve`. pveum useradd pve_exporter@pve # Добавляем пользователя `pve_exporter@pve` в группу `monitoring`. pveum usermod pve_exporter@pve -group monitoring # Устанавливаем пароль для пользователя `pve_exporter@pve`. pveum passwd pve_exporter@pve
Устанавливаем PVE-exporter
# Обновляем список доступных пакетов из репозиториев. apt update # Устанавливаем `python3-pip` и `pipx` для управления Python-пакетами. apt install python3-pip pipx # Добавляем `pipx` в PATH. pipx ensurepath # Устанавливаем `prometheus-pve-exporter` через `pipx`. pipx install prometheus-pve-exporter # Выводим список приложений, установленных через `pipx`. pipx list # Проверяем значение переменной окружения PATH. echo $PATH # Добавляем `~/.local/bin` в PATH. echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc # Применяем изменения в текущей сессии. source ~/.bashrc
Создаем файл настроек для PVE-exporter
# Создаем директорию `/usr/share/pve_exporter/` для хранения конфигурации. mkdir -p /usr/share/pve_exporter/ # Создаем файл конфигурации `pve_exporter.yml` с настройками для подключения к Proxmox VE. cat > /usr/share/pve_exporter/pve_exporter.yml << EOF default: user: pve_exporter@pve password: пароль_пользователя_pve_exporter verify_ssl: false EOF # Выводим содержимое файла конфигурации для проверки. cat /usr/share/pve_exporter/pve_exporter.yml
Запускаем pve_exporter
# Запускаем `pve_exporter` с указанием конфигурационного файла. pve_exporter --config.file /usr/share/pve_exporter/pve_exporter.yml # Проверяем, какие процессы используют порт 9221. ss -tuln | grep 9221 # Проверяем, какие процессы используют порт 9221. lsof -i :9221 # Проверяем статус службы `pve_exporter`. systemctl status pve_exporter # Проверяем, что `pve_exporter` возвращает метрики. curl http://localhost:9221/metrics
Добавим автозапускpve_exporter
через systemd.
# Редактируем файл systemd-юнита для `pve_exporter`. nano /etc/systemd/system/pve_exporter.service
Копируем содержимое и сохраняем.
[Unit] Description=Prometheus PVE Exporter After=network.target [Service] User=root ExecStart=/root/.local/bin/pve_exporter --config.file /usr/share/pve_exporter/pve_exporter.yml Restart=always [Install] WantedBy=multi-user.target
# Включаем автозапуск службы `pve_exporter`. systemctl enable pve_exporter # Запускаем службу `pve_exporter`. systemctl start pve_exporter # Проверяем статус службы `pve_exporter`. systemctl status pve_exporter
Добавление дашборда Proxmox в Grafana
Источник и коллектор данных настроили, перейдем к самой красоте - графикам.
Вообще Prometheus
и сам может рисовать графики без графаны. Плюс графаны в данном случае - огромный выбор уже готовых наборов графиков (дашбордов), которые достаточно импортировать в свою конфигурацию.
Нам нужен дашборд 10347.
Откроем импорт дашборда в нашей графане.
Вставим скопированный ID, жмем Load
Укажем источник данных для этого дашборда - наш, уже сконфигурированный Prometheus
Наслаждаемся
Для отслеживания кластера - достаточно установить PVE-exporter на любой узел (для надежности можно и на все). А еще можно создавать свои графики и настраивать уведомления о событиях. Процесс улучшайзинга графаны - бесконечен.
Доработка дашборда
Все никак не брался дополнить статью по данному дашборду. Обратил внимание не сразу. 2 виджета CPU history и Current CPU отображают данные в сотых долях, а нам нужно в процентах.
1. В query - usage формулу меняем на:
pve_cpu_usage_ratio{instance="$instance"}*100
3. В правой колонке в разделе Standart options в Unit выставляем Percent (0-100).
После внесения изменений не забываем сохранить
В Current CPU нужно лишь добавить умножение на 100
pve_cpu_usage_ratio{instance="$instance"}*100 / pve_cpu_usage_limit and on(id) pve_node_info
После внесения изменений не забываем сохранить
https://blog.levintalk.ru/graf