Налаштування modbus_exporter для Prometheus

Покрокова інструкція з налаштування modbus_exporter для збору метрик з Modbus-пристроїв (TCP або RTU) та їх передачі у Prometheus.

Цей експортер працює за принципом blackbox_exporter: Prometheus звертається до експортера, передаючи йому цільову IP-адресу пристрою (target) та назву модуля конфігурації, а експортер вже опитує пристрій і повертає метрики.


Крок 1. Встановлення modbus_exporter

Найпростіший спосіб — завантажити готовий бінарний файл з офіційного репозиторію.

  1. Перейдіть на сторінку релізів modbus_exporter на GitHub.
  2. Завантажте архів для вашої ОС (наприклад, Linux amd64).
  3. Розпакуйте архів та перемістіть бінарний файл у зручне місце:
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. Перевірка

  1. Перевірка експортера: Ви можете зробити запит безпосередньо до експортера через curl (замініть IP на адресу вашого пристрою): curl "http://127.0.0.1:9602/modbus?target=192.168.1.50:502&module=my_sensor"
  2. Ви маєте побачити згенеровані метрики (room_temperature, room_humidity).
  3. Перевірка Prometheus: Відкрийте вебінтерфейс Prometheus, перейдіть у розділ Status -> Targets. Ваша job modbus має бути у статусі UP.
Previous Article
Next Article