Установка 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 через пользовательский интерфейс:
- Для этого посетим localhost:8086
- Нажмем «Начать»
Настроем своего первого пользователя:
- Введите имя пользователя для вашего основного пользователя
- Введите пароль и подтвердите пароль для вашего пользователя
- Введите исходное название организации
- Введите исходное имя корзины
- Нажмите Продолжить
Теперь 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:
Источник данных успешно добавлен для начала мониторинга 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")