Дополнительная метрика доступности

1. Общая информация#

Метрика доступности разработана для мониторинга доступности аппаратного и программного обеспечения соответствующих модулей в рамках поставки ПАК. Метрика позволяет определить, доступен ли тот или иной модуль, или же он находится в неисправном состоянии. Сама метрика - module_availability.

Метрика является агрегирующей и состоит из следующего запроса:

label_set(sum(usr_mbd_g_bm_hw_availability) without(src_type), "module_type", 
"Базовый модуль", "pak_type", "МБД.Г")
  or label_set(sum(usr_mbd_g_bmur1_hw_availability + usr_mbd_g_bmur1_sw_availability > bool 1) 
    without(src_type), "module_type", "Базовый модуль управления и распределения", "pak_type", 
    "МБД.Г")
  or label_set(sum(usr_mbd_g_mvh_d1_hw_availability + usr_mbd_g_mvh_d1_sw_availability > bool 1) 
    without(src_type), "module_type", "Модуль вычисления и хранения D", "pak_type", "МБД.Г")
  or label_set(sum(usr_mbd_g_mvh_t1_hw_availability + usr_mbd_g_mvh_t1_sw_availability > bool 1) 
    without(src_type), "module_type", "Модуль вычисления и хранения T", "pak_type", "МБД.Г")
  or label_set(sum(usr_mbd_g_mkvh1_hw_availability + usr_mbd_g_mkvh1_sw_availability > bool 1) 
    without(src_type), "module_type", "Модуль коммутации, вычисления и хранения", "pak_type", 
    "МБД.Г")
  or label_set(sum(usr_mbd_g_mkvh6_hw_availability + usr_mbd_g_mkvh6_sw_availability > bool 1) 
    without(src_type), "module_type", "Модуль коммутации, вычисления и хранения тип 6", 
    "pak_type", "МБД.Г")
  or label_set(sum(usr_mbd_g_mrk_hw_availability) without(src_type), "module_type", 
    "Базовый модуль резервного копирования", "pak_type", "МБД.Г")
  or label_set(sum(usr_mbd_g_bma_hw_availability) without(src_type), "module_type", 
    "Базовый модуль агрегации", "pak_type", "МБД.Г")
  or label_set(sum(usr_mbd_qm_bm_hw_availability) without(src_type), "module_type", 
    "Базовый модуль", "pak_type", "МБД.КХ")
  or label_set(sum(usr_mbd_qm_bmur1_hw_availability + usr_mbd_qm_bmur1_sw_availability > bool 1) 
    without(src_type), "module_type", "Базовый модуль управления и распределения", 
    "pak_type", "МБД.КХ")
  or label_set(sum(usr_mbd_qm_mvh_d1_hw_availability + usr_mbd_qm_mvh_d1_sw_availability > bool 1) 
    without(src_type), "module_type", "Модуль вычисления и хранения D", "pak_type", "МБД.КХ")
  or label_set(sum(usr_mbd_qm_mvh_t1_hw_availability + usr_mbd_qm_mvh_t1_sw_availability > bool 1) 
    without(src_type), "module_type", "Модуль вычисления и хранения T", "pak_type", "МБД.КХ")
  or label_set(sum(usr_mbd_qm_mkvh1_hw_availability + usr_mbd_qm_mkvh1_sw_availability > bool 1) 
    without(src_type), "module_type", "Модуль коммутации, вычисления и хранения", "pak_type", 
    "МБД.КХ")
  or label_set(sum(usr_mbd_qm_bmrk_hw_availability) without(src_type), "module_type", 
    "Базовый модуль резервного копирования", "pak_type", "МБД.КХ")
  or label_set(sum(usr_mbd_qm_bma_hw_availability) without(src_type), "module_type", 
    "Базовый модуль агрегации", "pak_type", "МБД.КХ")
  or label_set(sum(usr_mbd_h_bm_hw_availability) without(src_type), "module_type", 
    "Базовый модуль", "pak_type", "МБД.Х")
  or label_set(sum(usr_mbd_h_bmur1_hw_availability + usr_mbd_h_bmur1_sw_availability > bool 1) 
    without(src_type), "module_type", "Базовый модуль управления и распределения", "pak_type", 
    "МБД.Х")
  or label_set(sum(usr_mbd_h_mvh_d1_hw_availability + usr_mbd_h_mvh_d1_sw_availability > bool 1) 
    without(src_type), "module_type", "Модуль вычисления и хранения D", "pak_type", "МБД.Х")
  or label_set(sum(usr_mbd_h_mvh_t1_hw_availability + usr_mbd_h_mvh_t1_sw_availability > bool 1) 
    without(src_type), "module_type", "Модуль вычисления и хранения T", "pak_type", "МБД.Х")
  or label_set(sum(usr_mbd_h_mgf1_hw_availability + usr_mbd_h_mgf1_sw_availability > bool 1) 
    without(src_type), "module_type", "Модуль граничных функций", "pak_type", "МБД.Х")
  or label_set(sum(usr_mbd_h_mkvh1_hw_availability + usr_mbd_h_mkvh1_sw_availability > bool 1) 
    without(src_type), "module_type", "Модуль коммутации, вычисления и хранения", "pak_type", 
    "МБД.Х")
  or label_set(sum(usr_mbd_h_mrk_hw_availability) 
    without(src_type), "module_type", "Базовый модуль резервного копирования", "pak_type", 
    "МБД.Х")

Концептуально внутри запроса лежит join, который заполняет метрику данными из промежуточных, создаваемых пользователем, метрик доступности каждого модуля. С помощью функции label_set новая метрика обогащается метками “Модуль” и “ПАК”. Значения временного ряда будут получены из значений метрик, используемых в качестве первого аргумента label_set

Собираемая метрика выглядит следующим образом:

2. Создание промежуточных метрик#

Название метрики Описание Способ получения метрики Экспортер
mbd_g_bm_hw_availability Метрика доступности оборудования Базового модуля sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) + sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) > bool 0 blackbox_exporter
mbd_g_bmur1_hw_availability Метрика доступности оборудования Базового модуля управления и распределения sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) + sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) > bool 0 blackbox_exporter
mbd_g_bmur1_sw_availability Метрика доступности программного обеспечения Базового модуля управления и распределения sum(greenplum_database_status{_module_id="X", _pak_id="X"} or absent(greenplum_database_status{_module_id="X", _pak_id="X"}) * 0) by (_module_id, _pak_id) > bool 0 greenplum_sql_exporter
mbd_g_mvh_d1_hw_availability Метрика доступности оборудования Модуля вычисления и хранения D sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) + sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) > bool 0 blackbox_exporter
mbd_g_mvh_d1_sw_availability Метрика доступности программного обеспечения Модуля вычисления и хранения D sum(namedprocess_namegroup_num_procs{groupname="postgres", _module_id="X", _pak_id="X"}) by (_module_id, _pak_id) > bool 0 process_exporter
mbd_g_mvh_t1_hw_availability Метрика доступности оборудования Модуля вычисления и хранения T sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) + sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) > bool 0 blackbox_exporter
mbd_g_mvh_t1_sw_availability Метрика доступности программного обеспечения Модуля вычисления и хранения T sum(namedprocess_namegroup_num_procs{groupname="postgres", _module_id="X", _pak_id="X"}) by (_module_id, _pak_id) > bool 0 process_exporter
mbd_g_mkvh1_hw_availability Метрика доступности оборудования Модуля коммутации, вычисления и хранения sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) + sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) > bool 0 blackbox_exporter
mbd_g_mkvh1_sw_availability Метрика доступности программного обеспечения Модуля коммутации, вычисления и хранения sum(namedprocess_namegroup_num_procs{groupname="postgres", _module_id="X", _pak_id="X"}) by (_module_id, _pak_id) > bool 0 process_exporter
mbd_g_mkvh6_hw_availability Метрика доступности оборудования Модуля коммутации, вычисления и хранения тип 6 sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) + sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) > bool 0 blackbox_exporter
mbd_g_mkvh6_sw_availability Метрика доступности программного обеспечения Модуля коммутации, вычисления и хранения тип 6 sum(namedprocess_namegroup_num_procs{groupname="postgres", _module_id="X", _pak_id="X"}) by (_module_id, _pak_id) > bool 0 process_exporter
mbd_g_mrk_hw_availability Метрика доступности оборудования Базового модуля резервного копирования sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) + sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) > bool 0 blackbox_exporter
mbd_g_bma_hw_availability Метрика доступности оборудования Базового модуля агрегации sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) + sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) > bool 0 blackbox_exporter
mbd_qm_bm_hw_availability Метрика доступности оборудования Базового модуля sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) + sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) > bool 0 blackbox_exporter
mbd_qm_bmur1_hw_availability Метрика доступности оборудования Базового модуля управления и распределения sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) + sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) > bool 0 blackbox_exporter
mbd_qm_bmur1_sw_availability Метрика доступности программного обеспечения Базового модуля управления и распределения sum(systemd_unit_state{name="zookeeper.service", state="active", _module_id="X", _pak_id="X"}) by (_module_id, _pak_id) > bool 0 systemd_exporter
mbd_qm_mvh_d1_hw_availability Метрика доступности оборудования Модуля вычисления и хранения D sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) + sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) > bool 0 blackbox_exporter
mbd_qm_mvh_d1_sw_availability Метрика доступности программного обеспечения Модуля вычисления и хранения D sum(clickhouse_test_connection{_module_id="X", _pak_id="X"} or absent(clickhouse_test_connection{_module_id="X", _pak_id="X"}) * 0) by (_pak_id, _module_id) > bool 0 clickhouse_sql_exporter
mbd_qm_mvh_t1_hw_availability Метрика доступности оборудования Модуля вычисления и хранения T sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) + sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) > bool 0 blackbox_exporter
mbd_qm_mvh_t1_sw_availability Метрика доступности программного обеспечения Модуля вычисления и хранения T ((sum(systemd_unit_state{name="hadoop-hdfs-datanode.service", state="active", _module_id="X", _pak_id="X"}) by (_pak_id, _module_id) > bool 0) + (sum(systemd_unit_state{name="zookeeper.service", state="active", _module_id="X", _pak_id="X"}) by (_pak_id, _module_id) > bool 0)) > bool 1 systemd_exporter
mbd_qm_mkvh1_hw_availability Метрика доступности оборудования Модуля коммутации, вычисления и хранения sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) + sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) > bool 0 blackbox_exporter
mbd_qm_mkvh1_sw_availability Метрика доступности программного обеспечения Модуля коммутации, вычисления и хранения sum(clickhouse_test_connection{_module_id="X", _pak_id="X"} or absent(clickhouse_test_connection{_module_id="X", _pak_id="X"}) * 0) by (_pak_id, _module_id) > clickhouse_sql_exporter
mbd_qm_bmrk_hw_availability Метрика доступности оборудования Базового модуля резервного копирования sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) + sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) > bool 0 blackbox_exporter
mbd_qm_bma_hw_availability Метрика доступности оборудования Базового модуля агрегации sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) + sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) > bool 0 blackbox_exporter
mbd_h_bm_hw_availability Метрика доступности оборудования Базового модуля sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) + sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) > bool 0 blackbox_exporter
mbd_h_bmur1_hw_availability Метрика доступности оборудования Базового модуля управления и распределения sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) + sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) > bool 0 blackbox_exporter
mbd_h_bmur1_sw_availability Метрика доступности программного обеспечения Базового модуля управления и распределения ((sum(systemd_unit_state{name="hadoop-hdfs-namenode.service", state="active",_module_id="X",_pak_id="X"}) by (_module_id, _pak_id) > bool 0) + (sum(systemd_unit_state{name="zookeeper.service", state="active",_module_id="X",_pak_id="X"}) by (_module_id, _pak_id) > bool 0)) > bool 1 systemd_exporter
mbd_h_mvh_d1_hw_availability Метрика доступности оборудования Модуля вычисления и хранения D sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) + sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) > bool 0 blackbox_exporter
mbd_h_mvh_d1_sw_availability Метрика доступности программного обеспечения Модуля вычисления и хранения D sum(systemd_unit_state{name="hadoop-hdfs-datanode.service", state="active", _module_id="X", _pak_id="X"}) by (_pak_id, _module_id) > bool 0 systemd_exporter
mbd_h_mvh_t1_hw_availability Метрика доступности оборудования Модуля вычисления и хранения T sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) + sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) > bool 0 blackbox_exporter
mbd_h_mvh_t1_sw_availability Метрика доступности программного обеспечения Модуля вычисления и хранения T sum(systemd_unit_state{name="hadoop-hdfs-datanode.service", state="active", _module_id="X", _pak_id="X"}) by (_pak_id, _module_id) > bool 0 systemd_exporter
mbd_h_mgf1_hw_availability Метрика доступности оборудования Модуля граничных функций sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) + sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) > bool 0 blackbox_exporter
mbd_h_mgf1_sw_availability Метрика доступности программного обеспечения Модуля граничных функций sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) + sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) > bool 0 blackbox_exporter
mbd_h_mkvh1_hw_availability Метрика доступности оборудования Модуля коммутации, вычисления и хранения sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) + sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) > bool 0 blackbox_exporter
mbd_h_mkvh1_sw_availability Метрика доступности программного обеспечения Модуля коммутации, вычисления и хранения sum(systemd_unit_state{name="hadoop-hdfs-datanode.service", state="active", _module_id="X", _pak_id="X"}) by (_pak_id, _module_id) > bool 0 systemd_exporter
mbd_h_mrk_hw_availability Метрика доступности оборудования Базового модуля резервного копирования sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) + sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) > bool 0 blackbox_exporter

Метрики агрегируются из уже готовых метрик. Для сбора метрики на узлах нужно развернуть экспортеры, представленные в столбце “Способ получения”, кроме blackbox_exporter - его достаточно один раз развернуть на Визион.Proxy.

При заведении метрик стоит учитывать:

  • метки
  • количество узлов в модуле

Метки уже прописаны - вместо Х нужно будет подставить значение из объектной модели. Прописать имя модуля и имя ПАК, к которому будет относиться метрика, или IP-адрес узла, который проверяется с помощью метрики probe_success (доступность hardware).

Так как количество узлов может отличаться, не стоит относиться к количеству метрик внутри запроса для агрегации метрики доступности как к фиксированному значению - можно скопировать часть запроса и продублировать его для ещё одного узла. Например:

mbd_h_mrk_hw_availability - sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) + sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) > bool 0

В данном случае проверяются два узла. Можно добавить третий в запрос, просто скопировав sum:

sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) + sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id) > bool 0 + sum(probe_success{instance="X", _module_id="X",_pak_id="X"}) by (_pak_id, _module_id)

Такая гибкость позволяет учитывать изменения в конфигурации ПАК.

Метрики следует завести в разделе “Метрики” UI Визиона - они автоматически получат префикс usr_.

Если агрегирующих метрик меньше, чем тех, что перечислены в module_availability - это не повлияет на работоспособность, просто недостающие не будут участвовать в запросе.

Если с помощью одного Визиона мониторятся несколько ПАКов одного типа, можно объежинить их внутри метрики оператором or:

(sum(probe_success{instance="1.1.1.1", _module_id="Module1",_pak_id="PAK1"}) by (_pak_id, _module_id) + sum(probe_success{instance="2.2.2.2", _module_id="Module1",_pak_id="PAK1"}) by (_pak_id, _module_id) > bool 0) or (sum(probe_success{instance="3.3.3.3", _module_id="Module2",_pak_id="PAK2"}) by (_pak_id, _module_id) + sum(probe_success{instance="4.4.4.4", _module_id="Module2",_pak_id="PAK2"}) by (_pak_id, _module_id) > bool 0)

Пример пользовательской промежуточной метрики:

3. Конфигурация плагинов для корректного мониторинга#

blackbox_exporter - в таргетах следует указать адреса узлов, которые следует мониторить:

process_exporter - в конфигурации плагина следует указать:

process_names:
  - name: "postgres"
    comm:
      - "postgres"

Для clickhouse_sql_exporter и greenplum_sql_exporter- заполнить поле таргетов и выбрать соответствующий коллектор.