Расширенный мониторинг Proxmox с помощью Telegraf и InfluxDB

Установка InfluxDB

Создаем контейнер и ставим туда InfluxDB

Устанавливаем необходимые пакеты:

apt install curl wget gnupg software-properties-common apt-transport-https

Добавляем репозиторий:

wget -qO- https://repos.influxdata.com/influxdb.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdb.gpg > /dev/null
export DISTRIB_ID=$(lsb_release -si); export DISTRIB_CODENAME=$(lsb_release -sc)
echo "deb [signed-by=/etc/apt/trusted.gpg.d/influxdb.gpg] https://repos.influxdata.com/${DISTRIB_ID,,} ${DISTRIB_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/influxdb.list > /dev/null

Сразу после включения репозитория установим пакеты Influxdb:

apt update
apt install influxdb2

Запустим службу и проверим статус:

service influxdb start
service influxdb status

Настроем InfluxDB через пользовательский интерфейс:

  1. Для этого посетим localhost:8086
  2. Нажмем «Начать»

Настроем своего первого пользователя:

  1. Введите имя пользователя для вашего основного пользователя
  2. Введите пароль и подтвердите пароль для вашего пользователя
  3. Введите исходное название организации
  4. Введите исходное имя корзины
  5. Нажмите Продолжить

Теперь InfluxDB инициализируется с помощью основного пользователя, организации и корзины.

Перенаправление метрик Proxmox

Перенаправим сбор метрик Proxmox на локальный сокет, который может использовать Telegraf.

Отредактируем файл настроек:

nano /etc/pve/status.cfg

Заменим его следующими строками:

influxdb: monitoring
   server 127.0.0.1
   port 8089

Используя эти настройки, Proxmox будет отправлять метрики внутренне на порт 8089 на локальном хосте, к которому мы подключимся из Telegraf на следующем шаге.

Установка Telegraf

wget -qO- https://repos.influxdata.com/influxdb.key | sudo tee /etc/apt/trusted.gpg.d/influxdb.asc >/dev/null
echo "deb https://repos.influxdata.com/debian stable main" | sudo tee /etc/apt/sources.list.d/influxdb.list
sudo apt update && sudo apt install telegraf

Настроим плагины Telegraf

Сделаем резервную копию и создадим новый, пустой telegraf.conf

cp /etc/telegraf/telegraf.conf /etc/telegraf/telegraf.conf.bak
rm /etc/telegraf/telegraf.conf
nano /etc/telegraf/telegraf.conf

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

[agent]
  interval = "10s"
  round_interval = true
  metric_batch_size = 1000
  metric_buffer_limit = 10000
  collection_jitter = "0s"
  flush_interval = "10s"
  flush_jitter = "0s"
  precision = ""
  hostname = ""
  omit_hostname = false

# Configuration for sending metrics to InfluxDB
[[outputs.influxdb_v2]]
  urls = ["http://192.168.1.100:8086"]
  token = "influxdb token"
  organization = "KLIMOV.su"
  bucket = "pve"

# Gather metrics from proxmox based on what is in /etc/pve/setup.cfg
[[inputs.socket_listener]]
  service_address = "udp://:8089"

[[inputs.smart]]
    ## Optionally specify the path to the smartctl executable
    path_smartctl = "/usr/sbin/smartctl"
    # path_nvme = "/usr/sbin/nvme"
    use_sudo = true
    attributes = true
    devices = [
        "/dev/sda --all",
        "/dev/sdb --all"]

[[inputs.sensors]]
    ## Remove numbers from field names.
    ## If true, a field name like 'temp1_input' will be changed to 'temp_input'.
    # remove_numbers = true

    ## Timeout is the maximum amount of time that the sensors command can run.
    # timeout = "5s"

Если у вас есть nvme устройства, установите nvme-cli:

apt install nvme-cli
nvme list

Чтобы разрешить пользователю Telegraf доступ smartctl, нам нужно установить sudo и добавить запись в visudo файл:

apt install sudo
sudo visudo

Добавить:

# Cmnd alias specification
Cmnd_Alias SMARTCTL = /usr/sbin/smartctl
telegraf  ALL=(ALL) NOPASSWD: SMARTCTL
Defaults!SMARTCTL !logfile, !syslog, !pam_session

Используйте smartctl, чтобы проверить устройства:

smartctl --scan

И внесите команды в список telegraf.conf [[inputs.smart]] раздела.

Чтобы контролировать датчики, вам нужны lm-сенсоры.

apt install lm-sensors watch

Запустить, чтобы обнаружить возможные датчики:

sudo sensors-detect

Проверить датчики с помощью:

watch -n 1 sensors

Протестируйте конфигурацию Telegraf с помощью следующих команд:

telegraf --debug
sudo -u telegraf telegraf --config /etc/telegraf/telegraf.conf  --test | grep smart

Возможно будут ошибки, желательно перезагрузить Proxmox Просмотр ошибок:

tail --follow /var/log/syslog

Если вы позже измените telegraf.conf, перезагрузите Telegraf, чтобы изменения вступили в силу:

systemctl reload telegraf

Установка Grafana

Ставил в тот же контейнер что и InfluxDB Добавляем репозиторий:

wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list

Устанавливаем:

apt update
apt install grafana

Настройки Grafana:

nano /etc/grafana/grafana.ini

Внесите изменения в конфигурацию Systemd, запустив « daemon-reload », выполнив команду enable:

systemctl daemon-reload
systemctl enable grafana-server
systemctl start grafana-server
systemctl status grafana-server

Доступ к Grafana:

Сразу после запуска службы Grafana получите доступ к URL-адресу из любого вашего любимого веб-браузера. Порт Grafana по умолчанию — 3000. Имя пользователя и пароль по умолчанию admin и admin Если вы заходите в панель управления впервые, вам будет предложено изменить пароль.

Добавление источника данных для мониторинга Proxmox

Поскольку мы установили и настроили использование InfluxDB для Proxmox, теперь нам нужно добавить источник данных с информацией о базе данных InfluxDB.

Перейдите к настройкам (значок шестеренки) -> и выберите Источники данных. Щелкните Добавить источник данных Выберите InfluxDB, щелкнув по нему

Добавьте информацию о сервере influxdb:

Добавьте информацию о сервере influxdb

Источник данных успешно добавлен для начала мониторинга Proxmox. Теперь мы можем видеть добавленный источник данных в списке.

Импорт готовых информационных панелей Нам нужна эта:

https://grafana.com/grafana/dashboards/15356

Для мониторинга датчиков и smart нужно добавить дополнительные блоки в панель. Пример:

Мониторинг температуры

Пример запроса мониторинга температуры CPU:

from(bucket: "${Bucket}")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "sensors")
  |> filter(fn: (r) => r["chip"] == "coretemp-isa-0000")
  |> filter(fn: (r) => r["_field"] == "temp_input")
  |> filter(fn: (r) => r["host"] == "${server}")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> yield(name: "mean")

Похожие статьи