bash_exporter

Плагин устанавливает экспортер и создаёт задачу сбора метрик с него компонентом vmagent_agent.

Правила создания выражений#

Самая важная настройка bash_exporter — выражение в формате YAML, определяющее способы сбора метрик.

Общий вид выражения:

---
labels:
  <label_1_name>: "<bash_command_1>"
  <label_2_name>: "<bash_command_2>"
  # ...
  <label_N_name>: "<bash_command_N>"

static_labels:
  <static_label_1_name>: "<constant_value_1>"
  <static_label_2_name>: "<constant_value_2>"
  # ...
  <static_label_M_name>: "<constant_value_M>"

series:
  value: 1
  labels:
    # ...
  static_labels:
    # ...

Здесь:

  • labels

    Словарь меток для всех временных рядов.

    В качестве ключа используйте название метки, а в качестве значения — Bash-выражение. Результаты его выполнения станут значением метки временного ряда.

  • series

    ВАЖНО
    Обязательный параметр.

    Список временных рядов, создаваемых для метрики. Элементы списка могут содержать следующие поля:

    • labels

      Словарь меток для этого временного ряда.

      В качестве ключа используйте название метки, а в качестве значения — Bash-выражение. Результаты его выполнения станут значением метки временного ряда.

    • static_labels

      Словарь меток для этого временного ряда.

      В качестве ключа используйте название метки. Значением будет метка временного ряда.

    • static_value

      ВАЖНО
      Обязательный параметр, если не заполнено поле value.

      Целое число, задающее константное значение временного ряда.

    • value

      ВАЖНО
      Обязательный параметр, если не заполнено поле static_value.

      Bash-выражение, возвращающее число, которое становится значением временного ряда.

  • static_labels

    Словарь меток для всех временных рядов.

    В качестве ключа используйте название метки. Значением будет метка временного ряда.

Пример создания выражения#

Пусть необходимо создать выражение, которое сохраняет в метку username название учётной записи пользователя, от имени которого выполняется Bash-скрипт.

В этом случае необходимо:

  1. В блок labels добавить метку и команду Bash:

    labels:
      username: whoami
    
  2. Заполнить блок series, так как это обязательный параметр.

    • В самом простом случае можно использовать выражение echo 1, оно всегда возвращает единицу:

      labels:
        username: whoami
      series:
        value: "echo 1"
      
    • В более сложном случае можно записать в значение серии идентификатор пользователя:

      labels:
        username: whoami
      series:
        value: "id $(whoami) --user"
      

Настройка sudoers#

При установке на узел plagent автоматически создаётся служебная учётная запись vision_bash_exporter с ограниченными привилегиями. От её имени плагин bash_exporter выполняет необходимые команды.

Настройки sudo для пользователя vision_bash_exporter указывайте в конфигурационном файле /etc/sudoers.d/vision_bash_exporter. Заполните его по образцу:

Cmnd_Alias <CMD_1> = <cmd1_list>
Cmnd_Alias <CMD_2> = <cmd2_list>
# ...
Cmnd_Alias <CMD_N> = <cmdN_list>

vision_bash_exporter ALL=(root) NOPASSWD: <CMD_1>, <CMD_2>, ..., <CMD_N>

Здесь:

  • <CMD> – название группы команд.

    Как правило, записывается большими буквами.

    • Допускается использование букв латинского алфавита, цифр и знаков подчёркивания.

    • Не может начинаться с цифры.

  • <cmd_list> – список команд, входящих в группу.

    Команда состоит из краткого или полного пути к исполняемому файлу и перечня аргументов.

    Чтобы разрешить запуск исполняемого файла с любыми аргументами, вместо их перечня укажите символ *.

    В качестве разделителя команд используйте запятую.

При заполнении файла придерживайтесь следующих правил:

  • Вносите изменения только в файл /etc/sudoers.d/vision_bash_exporter.

    ПРЕДУПРЕЖДЕНИЕ
    Не изменяйте файл /etc/sudoers! Его содержимое может быть перезаписано при обновлении ОС. Не изменяйте файлы /etc/sudoers.d/vision и /etc/sudoers.d/plagent! Их содержимое будет перезаписано при обновлении Визион.
  • Для внесения изменений используйте утилиту visudo:

    visudo vision-bash-exporter
    

    Она автоматически проверяет синтаксис файла на корректность и при обнаружении ошибок выводит предупреждение.

  • Предоставляйте пользователю только минимально необходимые привилегии.

  • Не разрешайте выполнение команды shell от имени пользователя root.

  • Используйте абсолютные пути к исполняемым файлам.

Пример заполнения vision_bash_exporter#

Рассмотрим пример заполнения файла /etc/sudoers.d/vision_bash_exporter:

Cmnd_Alias CMD_SHADOW_HASH = /bin/sh -c "/usr/bin/sha256sum /etc/shadow | /usr/bin/awk '{print $1}'"
Cmnd_Alias CMD_NGINX_STATUS = /usr/bin/systemctl is-active nginx
Cmnd_Alias CMD_DISK_AVAIL = /bin/bash -c "/bin/df --output=avail / | /bin/tail -n 1"

vision_bash_exporter ALL=(root) NOPASSWD: CMD_NGINX_STATUS, CMD_DISK_AVAIL, CMD_SHADOW_HASH

Первые три строки связывают псевдонимы CMD_SHADOW_HASH, CMD_NGINX_STATUS и CMD_DISK_AVAIL с соответствующими выражениями Bash.

В последней строке пользователю vision_bash_exporter выдаются привилегии, позволяющие выполнять указанные команды от имени пользователя root без ввода пароля.

Настройка плагина#

Чтобы плагин собирал необходимые метрики, выполняйте его настройку в следующем порядке:

  1. Авторизуйтесь в Визион.

  2. В главном меню выберите Объекты.

  3. На панели Контур выберите нужный ПАК.

  4. Выберите вкладку Плагины и убедитесь, что плагин bash_exporter находится в статусе УСТАНОВЛЕН.

  5. На панели навигации выберите Настройки → Метрики.

  6. Нажмите кнопку Добавить.

  7. Заполните форму Добавление метрики:

    • Тип метрики: Bash скрипт.

    • Имя: произвольное название метрики.

      • Допускается использование букв латинского алфавита, цифр и знаков подчёркивания.

      • Длина не менее 5 знаков.

      • Имя метрики должно быть уникальным.

    • Детальное описание: необязательное описание метрики.

    • Тип объекта: список типов объектов, с которых будет собираться метрика.

    • Выражение: структура в формате YAML, описывающая правило создания временных рядов.

    • Узлы: список узлов, с которых будет собираться метрика.

  8. Нажмите кнопку Добавить.