ipmi_exporter

Описание

IPMI Exporter — это сторонний Prometheus-экспортер, предназначенный для сбора метрик с устройств, поддерживающих протокол IPMI (Intelligent Platform Management Interface). Он запускается как самостоятельный процесс или сервис, предоставляя метрики через HTTP-эндпойнты.

  • Репозиторий: prometheus-community/ipmi_exporter

  • Официальная документация: Настройка экспортера

  • Используемые технологии: Go, FreeIPMI, Prometheus

  • Интеграция: Управляется агентом мониторинга astra-monitoring-icl для запуска, проверки состояния и передачи метрик в vmagent.

Возможности

  • Сбор метрик с IPMI-совместимых устройств (серверы, BMC).

  • Поддержка различных коллекторов: bmc, ipmi, chassis, dcmi, bmc-watchdog, sel, sm-lan-mode

  • HTTP-эндпойнты для доступа к метрикам: /metrics (общие метрики) и /ipmi?target=<адрес> (метрики конкретного устройства).

  • Настраиваемые параметры через YAML-конфигурацию.

  • Интеграция с агентом для управления жизненным циклом (запуск, остановка, health check).

Требования

  • Агент мониторинга: Установленный и настроенный агент astra-monitoring-icl.

  • Бинарник: ipmi_exporter (например, astramon-ipmi_exporter-custom) в папке, указанной в exporters.directory.

  • FreeIPMI: Установленные утилиты (например, ipmimonitoring) для работы с IPMI.

  • Права доступа: Настройка учетных данных IPMI на целевых устройствах.

  • sudo (опционально): Для выполнения команд IPMI, если требуется повышенный уровень привилегий.

Настройка и запуск через агент

1. Установка бинарника

  1. Скачайте бинарник:

    • Загрузите ipmi_exporter из официального репозитория или соберите из исходного кода.

    • Пример команды для скачивания (замените <version> на актуальную версию):

      wget https://github.com/prometheus-community/ipmi_exporter/releases/download/<version>/ipmi_exporter-<version>.linux-amd64.tar.gz
      tar -xzf ipmi_exporter-<version>.linux-amd64.tar.gz
      
  2. Разместите бинарник:

    • Скопируйте бинарник (например, ipmi_exporter) в папку, указанную в конфигурации агента (exporters.directory, по умолчанию test/exporters):

      mv ipmi_exporter-<version>.linux-amd64/ipmi_exporter test/exporters/astramon-ipmi_exporter-custom
      
    • Убедитесь, что имя бинарника соответствует значению name в конфигурации.

  3. Создайте конфигурационный файл:

    • Скопируйте YAML-конфигурацию экспортера (например, ipmi-conf.yml) в папку, доступную агенту (например, test/exporters):

      cp ipmi-conf.yml test/exporters/
      

2. Настройка агента

Настройка IPMI Exporter осуществляется через конфигурационный файл агента (test/utils/config.yaml). Добавьте следующие секции:

Раздел ipmi

ipmi:
  enabled: true
  path: test/utils/ipmi-prod
  server_address: 0.0.0.0:9290
  health_interval: 30s
  update_info_interval: 30s
  log_level: debug
  log_file: ipmi.log
  manager:
    exporter_config_path: ./test/utils/ipmi/config.yaml
    targets:
      - name: bmc-server-1
        target: 192.168.1.10
        scrape_interval: 60s
        tech_account_name: ipmi_user
        username: ADMIN
        password: PASSWORD
        privilege: admin
        collectors:
          - bmc
          - sensor
        driver: lanplus
        labels:
          rack: "1"
          unit: "10"
        custom_args:
          ipmi:
            - "ipmimonitoring"
      - name: bmc-server-2
        target: 192.168.1.11
        scrape_interval: 60s
        tech_account_name: ipmi_user
        username: readonly
        password: password123
        disabled: true
  • Поля:

    • enabled: Включает модуль IPMI.

    • path: Папка для хранения данных экспортера.

    • server_address: Адрес, на котором экспортер слушает запросы.

    • health_interval: Интервал проверки состояния.

    • update_info_interval: Интервал обновления информации.

    • log_level и log_file: Настройки логирования.

    • manager.exporter_config_path: Путь к конфигурации экспортера.

    • manager.targets: Список устройств для опроса:

      • name: Уникальное имя устройства.

      • target: IP-адрес устройства.

      • scrape_interval: Интервал опроса (например, 60s).

      • username, password, privilege: Учетные данные IPMI.

      • collectors: Список коллекторов (например, bmc, sensor).

      • driver: Драйвер IPMI (например, lanplus).

      • labels: Метаданные для метрик.

      • custom_args: Дополнительные аргументы (например, команды ipmimonitoring).

      • disabled: Отключает опрос устройства.

Раздел metrics

metrics:
  custom_targets:
    - name: ipmi_exporter1
      component: 192.168.1.10
      target: 127.0.0.1:9290
      metrics_path: /ipmi?target=192.168.1.10
      labels:
        instance: bmc-server-1
      scrape_interval: 60s
    - name: ipmi_exporter2
      component: 192.168.1.11
      target: 127.0.0.1:9290
      metrics_path: /ipmi?target=192.168.1.11
      labels:
        instance: bmc-server-2
      scrape_interval: 60s
      disabled: true
  • Поля:

    • name: Уникальное имя для vmagent.

    • component: IP-адрес устройства для идентификации.

    • target: Адрес экспортера.

    • metrics_path: Эндпойнт для сбора метрик (например, /ipmi?target=192.168.1.10).

    • labels: Дополнительные метки для метрик.

    • scrape_interval: Интервал сбора метрик.

    • disabled: Отключает сбор метрик для этого таргета.

3. Конфигурация IPMI Exporter

Создайте файл ipmi-conf.yml (указанный в exporters.args):

modules:
  default:
    user: "ADMIN"
    pass: "PASSWORD"
    driver: "lanplus"
    privilege: "admin"
    collectors:
      - bmc
      - ipmi
      - chassis
      - dcmi
    collector_cmd:
      ipmi: sudo
    custom_args:
      ipmi:
        - "ipmimonitoring"
  • Критические параметры:

    • user и pass: Учетные данные для доступа к IPMI-устройству.

    • driver: Протокол IPMI (например, lanplus для IPMI v2.0).

    • privilege: Уровень доступа (например, user, admin).

    • collectors: Список активных коллекторов (поддерживаемые: bmc, ipmi, chassis, dcmi, и т.д.).

    • collector_cmd: Команда для выполнения коллектора (например, sudo для ipmi).

    • custom_args: Дополнительные аргументы для команд (например, "ipmimonitoring").

4. Запуск агента

  1. Убедитесь, что агент настроен и конфигурация валидна:

    go run ./cmd/agent --config test/utils/config.yaml
    
  2. Проверьте логи агента:

    tail -f test.log
    
  3. Убедитесь, что экспортер запущен:

    curl http://127.0.0.1:9290/health
    

Метрики

IPMI Exporter предоставляет метрики через два основных эндпойнта:

Эндпойнт /metrics

Общие метрики экспортера и статус опроса.

Метрика

Тип

Описание

Пример

ipmi_scrape_duration_seconds

Gauge

Длительность выполнения IPMI-запросов (секунды)

ipmi_scrape_duration_seconds 0.022

ipmi_up

Gauge

Статус опроса устройства (1 — успешно, 0 — ошибка)

ipmi_up{collector="bmc"} 1

go_*

Various

Стандартные метрики Go (память, горутины)

go_memstats_alloc_bytes 123456

promhttp_*

Various

Метрики HTTP-запросов Prometheus

promhttp_metric_handler_requests_total 10

Эндпойнт /ipmi?target=<адрес>

Метрики конкретного устройства, указанного в параметре target.

Метрика

Тип

Описание

Пример

ipmi_temperature_celsius

Gauge

Температура датчика (°C)

ipmi_temperature_celsius{id="1076",name="P1-DIMMB1 Temp"} 30

ipmi_chassis_power_state

Gauge

Статус питания шасси (1 — включено, 0 — выключено)

ipmi_chassis_power_state 1

ipmi_fan_speed_state

Gauge

Скорость вентилятора (0 — норма, 1 — ошибка)

ipmi_fan_speed_state{id="2483",name="FAN1"} 0

ipmi_voltage_state

Gauge

Напряжение (0 — норма, 1 — ошибка)

ipmi_voltage_state{id="3086",name="12V"} 0

Проверка работоспособности

  1. Health Check:

    • Проверьте состояние экспортера:

      curl http://127.0.0.1:9290/health
      
    • Ожидаемый ответ: OK или HTTP 200.

  2. Метрики:

    • Проверьте общие метрики:

      curl http://127.0.0.1:9290/metrics
      
    • Проверьте метрики устройства:

      curl http://127.0.0.1:9290/ipmi?target=192.168.1.10
      
  3. Логи:

    • Проверьте логи экспортера:

      tail -f test/exporters/ipmi-exporter.log
      
    • Проверьте логи агента:

      tail -f ipmi.log
      

Устранение ошибок

Ошибки конфигурации

  • Ошибка: ipmi_up{collector="bmc"} 0

    • Причина: Устройство недоступно или неверные учетные данные.

    • Решение:

      • Проверьте user, pass, и privilege в ipmi-conf.yml.

      • Убедитесь, что устройство доступно:

        ipmiping 192.168.1.10
        
      • Проверьте права доступа на устройстве.

  • Ошибка: exec: "ipmimonitoring": executable file not found

    • Причина: Утилита ipmimonitoring не установлена или не доступна.

    • Решение:

      • Установите FreeIPMI:

        sudo apt-get install freeipmi-tools
        
      • Проверьте наличие sudo для collector_cmd.

  • Ошибка: listen tcp 0.0.0.0:9290: bind: address already in use

    • Причина: Порт 9290 занят.

    • Решение:

      • Измените server_address в ipmi на свободный порт.

      • Проверьте занятые порты:

        netstat -tulnp | grep 9290
        

Общие ошибки

  • Логи агента: Проверьте ipmi.log или test.log на наличие ошибок.

Ресурсы для диагностики

Пример полной конфигурации

test/utils/config.yaml

general:
  id: test
  name: test-name
  local_server: localhost:7719
  base_directory: test/utils
  hostname: localhost
  ip: 127.0.0.2
  log_level: debug
  upstream_address: http://localhost:7719
  api_version: v1
  insecure: true
  load_binaries: true
  test_mode: true
ipmi:
  enabled: true
  path: test/utils/ipmi-prod
  server_address: 0.0.0.0:9290
  health_interval: 30s
  update_info_interval: 30s
  log_level: debug
  log_file: ipmi.log
  manager:
    exporter_config_path: ./test/utils/ipmi/config.yaml
    targets:
      - name: bmc-server-1
        target: 192.168.1.10
        scrape_interval: 60s
        tech_account_name: ipmi_user
        username: ADMIN
        password: PASSWORD
        privilege: admin
        collectors:
          - bmc
          - sensor
        driver: lanplus
        labels:
          rack: "1"
          unit: "10"
        custom_args:
          ipmi:
            - "ipmimonitoring"
metrics:
  custom_targets:
    - name: ipmi_exporter1
      component: 192.168.1.10
      target: 127.0.0.1:9290
      metrics_path: /ipmi?target=192.168.1.10
      labels:
        instance: bmc-server-1
      scrape_interval: 60s

test/exporters/ipmi-conf.yml

modules:
  default:
    user: "ADMIN"
    pass: "PASSWORD"
    driver: "lanplus"
    privilege: "admin"
    collectors:
      - bmc
      - ipmi
      - chassis
      - dcmi
    collector_cmd:
      ipmi: sudo
    custom_args:
      ipmi:
        - "ipmimonitoring"

Дополнительные рекомендации

  • Безопасность:

    • Храните учетные данные (user, pass) в безопасном месте (например, используйте секреты в CI/CD).

    • Ограничьте доступ к портам экспортера (9290) через фаервол.

  • Мониторинг:

    • Настройте алерты в Prometheus на основе ipmi_up для обнаружения сбоев.

    • Пример правила:

      groups:
      - name: ipmi_alerts
        rules:
        - alert: IPMIDown
          expr: ipmi_up == 0
          for: 5m
          labels:
            severity: critical
          annotations:
            summary: "IPMI device {{ $labels.instance }} is down"
      
  • Логирование:

    • Используйте vector для агрегации логов экспортера:

      logs:
        sources:
          - ipmi_exporter
        vector_config_names:
          - ipmi_logs
      

Примечание