Налаштування modbus_exporter для Prometheus
Покрокова інструкція з налаштування modbus_exporter для збору метрик з Modbus-пристроїв (TCP або RTU) та їх передачі у Prometheus.
Цей експортер працює за принципом blackbox_exporter: Prometheus звертається до експортера, передаючи йому цільову IP-адресу пристрою (target) та назву модуля конфігурації, а експортер вже опитує пристрій і повертає метрики.
Крок 1. Встановлення modbus_exporter
Найпростіший спосіб — завантажити готовий бінарний файл з офіційного репозиторію.
- Перейдіть на сторінку релізів modbus_exporter на GitHub.
- Завантажте архів для вашої ОС (наприклад, Linux amd64).
- Розпакуйте архів та перемістіть бінарний файл у зручне місце:
wget https://github.com/prometheus/modbus_exporter/releases/download/v0.5.0/modbus_exporter-0.5.0.linux-amd64.tar.gz
tar xvf modbus_exporter-0.5.0.linux-amd64.tar.gz
cd modbus_exporter-0.5.0.linux-amd64
sudo cp modbus_exporter /usr/local/bin/
Крок 2. Створення файлу конфігурації (modbus.yml)
Вам потрібно створити файл modbus.yml, в якому описуються модулі (профілі пристроїв), типи підключення (TCP/RTU) та регістри, які потрібно читати.
Створіть файл /etc/modbus_exporter/modbus.yml:
modules:
# Назва модуля (використовуватиметься в Prometheus)
my_sensor:
tcp:
timeout: 2s
# Для підключення через послідовний порт (RS-485/RTU) замість tcp використовуйте rtu:
# rtu:
# baudrate: 9600
# databits: 8
# parity: none
# stopbits: 1
metrics:
- name: room_temperature
register: 100 # Адреса регістра Modbus
type: int16 # Тип даних (int16, uint16, float32 тощо)
scale: 0.1 # Множник (наприклад, якщо пристрій віддає 225 замість 22.5)
help: "Temperature in the room"
- name: room_humidity
register: 101
type: uint16
scale: 0.1
help: "Humidity in the room"
Примітка: Типи даних, адреси регістрів та множники (
scale) повністю залежать від документації до вашого конкретного Modbus-пристрою.
Крок 3. Запуск modbus_exporter
Ви можете запустити його вручну для тестування:
modbus_exporter --config.file=/etc/modbus_exporter/modbus.yml
За замовчуванням експортер запуститься на порту 9602.
Для роботи у фоновому режимі рекомендую створити systemd-сервіс.
Створіть файл /etc/systemd/system/modbus_exporter.service:
[Unit]
Description=Prometheus Modbus Exporter
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/modbus_exporter --config.file=/etc/modbus_exporter/modbus.yml
Restart=always
[Install]
WantedBy=multi-user.target
Увімкніть та запустіть сервіс:
sudo systemctl daemon-reload
sudo systemctl enable modbus_exporter
sudo systemctl start modbus_exporter
Крок 4. Налаштування Prometheus
Тепер потрібно вказати Prometheus, як збирати дані. Оскільки modbus_exporter є посередником, конфігурація вимагає використання relabel_configs.
Відкрийте файл конфігурації Prometheus (prometheus.yml) і додайте наступний job:
scrape_configs:
- job_name: 'modbus'
metrics_path: /modbus
static_configs:
- targets:
- 192.168.1.50:502 # IP-адреса та порт вашого Modbus TCP пристрою (або шлях до порту для RTU, напр. /dev/ttyUSB0)
params:
module: [my_sensor] # Назва модуля, який ви створили у modbus.yml
# Налаштування переадресації запиту на modbus_exporter
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 127.0.0.1:9602 # IP-адреса та порт, де працює modbus_exporter
Після цього перезапустіть або перезавантажте конфігурацію Prometheus:
sudo systemctl reload prometheus
Крок 5. Перевірка
- Перевірка експортера: Ви можете зробити запит безпосередньо до експортера через
curl(замініть IP на адресу вашого пристрою):curl "http://127.0.0.1:9602/modbus?target=192.168.1.50:502&module=my_sensor" - Ви маєте побачити згенеровані метрики (
room_temperature,room_humidity). - Перевірка Prometheus: Відкрийте вебінтерфейс Prometheus, перейдіть у розділ Status -> Targets. Ваша job
modbusмає бути у статусіUP.
