Начало работы
Подключение
Тесты производительности
Развёртывание
Использование данных
Загрузка данных
Миграция данных
Запрос данных
Управление кластерами
Обновление
Глобальное обслуживание
Масштабирование
Мониторинг
Безопасность
Лучшие практики
Технические принципы
Типы данных
Хранилище
Исполняющий движок
Потоковая обработка (Domino)
MARS3 Индексы
Расширения
Расширенные функции
Расширенный запрос
Федеративные запросы
Grafana
Резервное копирование и восстановление
Аварийное восстановление
Графовая база данных
Введение
Предложения
Функции
Расширенные темы
Руководство
Настройка производительности
Устранение неполадок
Инструменты
Параметры конфигурации
SQL-команда
Часто задаваемые вопросы
Документ описывает настройку пользовательского мониторинга в YMatrix. Эта функция поддерживается начиная с версии v4.8.2.
Прежде чем приступить, убедитесь, что вы понимаете, как развернуть мониторинг Grafana или мониторинг Prometheus.
В качестве примера рассмотрим локальный мониторинг Grafana (matrixdb@mxagent).
Через одну-две минуты после завершения развертывания мониторинга вы можете запросить данные мониторинга из таблицы local.system в базе данных matrixmgr.

Эти данные собираются telegraf и вставляются в таблицу через mxgate. Процессы telegraf и mxgate развертываются как фоновые службы с помощью функции matrixdb, как показано в выводе команды supervisorctl status:
$ supervisorctl status
Status:
1. pc_id:{group:"mxui_collector" name:"mxui_collector"} describe:"pid 8223, uptime 2:27:36" now:1682517012 state:"Running" log_file:"/var/log/matrixdb/mxui_collector_5432.log" stdout_log_file:"/var/log/matrixdb/mxui_collector_5432.log" pid:8223
2. pc_id:{group:"mxmgr_gate_ctrl" name:"mxmgr_gate_ctrl"} describe:"pid 10295, uptime 2:25:28" now:1682517012 state:"Running" log_file:"/var/log/matrixdb/mxmgr_gate_ctrl_5432.log" stdout_log_file:"/var/log/matrixdb/mxmgr_gate_ctrl_5432.log" pid:10295
3. pc_id:{group:"mxmgr_telegraf_ctrl" name:"mxmgr_telegraf_ctrl"} describe:"pid 10350, uptime 2:25:26" now:1682517012 state:"Running" log_file:"/var/log/matrixdb/mxmgr_telegraf_ctrl_5432.log" stdout_log_file:"/var/log/matrixdb/mxmgr_telegraf_ctrl_5432.log" pid:10350
4. pc_id:{group:"cylinder" name:"cylinder"} describe:"pid 6038, uptime 2:33:30" now:1682517012 state:"Running" log_file:"/var/log/matrixdb/cylinder.log" stdout_log_file:"/var/log/matrixdb/cylinder.log" pid:6038
5. pc_id:{group:"mxui" name:"mxui"} describe:"pid 6041, uptime 2:33:30" now:1682517012 state:"Running" log_file:"/var/log/matrixdb/mxui.log" stdout_log_file:"/var/log/matrixdb/mxui.log" pid:6041
Данные, хранящиеся в таблице local.system, используются в основном для отображения диаграмм мониторинга кластера на дашбордах Grafana.

Системная информация, собираемая в таблице local.system, включает 24 категории метрик выполнения. При наличии опыта эксплуатации вы можете изучить их содержимое:
matrixmgr=# select distinct category from local.system order by 1;
category
---------------
cpu
disk
diskio
kernel
mem
net
netstat
postgresql
processes
sar_cpu
sar_cpu_util
sar_disk
sar_hugepages
sar_inode
sar_io
sar_mem
sar_network
sar_paging
sar_queue
sar_swap
sar_swap_util
sar_task
swap
system
(24 rows)
Начиная с версии v4.8.2, YMatrix поддерживает пользовательский мониторинг. Вы можете определить собственные скрипты мониторинга, которые могут либо вставляться в таблицу local.system, либо отправляться в Prometheus. После успешной настройки вы сможете создавать пользовательские панели и оповещения на Grafana.
После развертывания компонентов мониторинга пользовательские скрипты мониторинга находятся в следующей директории: /etc/matrixdb/scripts.
В этой директории содержатся:
monitor_bootstrap.sh
Это точка входа для пользовательского мониторинга. Содержимое предварительно задано и не должно изменяться пользователями. Процесс telegraf периодически вызывает этот скрипт для сбора данных пользовательского мониторинга.
monitor_plugins/
Эта директория предназначена для пользовательских скриптов. По соображениям безопасности только пользователь root имеет права на запись в эту директорию.
Ниже приведены два примера пользовательских скриптов мониторинга, размещённых в директории monitor_plugins/:
nic.sh для отображения статистики сетевых интерфейсов (NIC):#!/bin/bash
style=grafana
#######################################################################
# NIC statistics
#######################################################################
nic_stats_output() {
METRIC="net_dev";
for NIC in $(ls /sys/class/net/ | grep -E 'eth|enp|ens|bond')
do
VAL=""
for f in $(ls /sys/class/net/$NIC/statistics/); do
v=$(cat /sys/class/net/$NIC/statistics/$f);
if [ "#$style" == "#prometheus" ];then
echo "matrixdb,device=$NIC,metric=$f $METRIC=$v"
continue
fi
if [ ! -z $VAL ];then
VAL+=","
fi
VAL+="$f=$v";
done
if [ "#$style" == "#grafana" ];then
echo "$METRIC,device=$NIC $VAL"
fi
done
}
nic_stats_output
Этот скрипт выводит статистику из /sys/class/net/<NIC>/statistics/ на локальном хосте. При запуске вручную он выдаёт вывод вида:
net_dev,device=eth0 collisions=0,multicast=0,rx_bytes=54701811772,rx_compressed=0,rx_crc_errors=0,rx_dropped=0,rx_errors=0,rx_fifo_errors=0,rx_frame_errors=0,rx_length_errors=0,rx_missed_errors=0,rx_nohandler=0,rx_over_errors=0,rx_packets=328974378,tx_aborted_errors=0,tx_bytes=89613462060,tx_carrier_errors=0,tx_compressed=0,tx_dropped=0,tx_errors=0,tx_fifo_errors=0,tx_heartbeat_errors=0,tx_packets=283871697,tx_window_errors=0
Правила формата вывода скрипта: каждая строка данных должна иметь следующую структуру:
net_dev.key=value тегов до первого пробела. Это метки метрики, например device=eth0.key=value, представляющих фактические значения метрик.interrupts.sh для отображения статистики аппаратных прерываний:#!/bin/bash
style=grafana
#######################################################################
# Hardware Interrupts
#######################################################################
interrupts_output() {
PATTERN=$(awk -F ':' '{i++; if(i>2){print $1}}' /proc/net/dev | sed 's/ //g' | tr '\n' '|' | sed 's/|$//')
egrep "$PATTERN" /proc/interrupts | awk -v style="#$style" \
'{ for (i=2;i<=NF-2;i++) sum[i]+=$i;}
END {
for (i=2;i<=NF-2; i++)
{
if(style=="#prometheus"){
print("matrixdb,device=cpu" i-2 " net_interrupts_by_cpu="sum[i]);
continue;
}
val=sprintf(val "cpu" i-2 "=" sum[i]);
if(i!=NF-2 )
val=sprintf(val ",");
}
if(style=="#grafana")
print("net_interrupts_by_cpu,device=all " val)
}'
egrep "$PATTERN" /proc/interrupts | awk -v style="#$style" \
'{ for (i=2;i<=NF-2; i++)
sum+=$i;
tags=sprintf("%s", $NF);
if (NR!=1)
val=sprintf(val ",");
val=sprintf(val tags "=" sum);
if(style=="#prometheus"){
print("matrixdb,device=" $NF " net_interrupts_by_queue=" sum)
}
sum=0;
} END{ if(style=="#grafana") print("net_interrupts_by_queue,device=all " val) }'
}
interrupts_output
При однократном выполнении вывод будет следующим:
net_interrupts_by_cpu,device=all cpu0=284551104,cpu1=308556439
net_interrupts_by_queue,device=all eth0-Tx-Rx-0=298072844,eth0-Tx-Rx-1=295034700
Примечание: Скрипты, размещённые в директории monitor_plugins/, должны иметь права на выполнение:
$ ls -l /etc/matrixdb/scripts/monitor_plugins/
-rwxr-xr-x 1 root root 1491 Apr 26 12:51 interrupts.sh
-rwxr-xr-x 1 root root 855 Apr 26 12:45 nic.sh
Если права на выполнение будут удалены, скрипт будет деактивирован и не будет запускаться во время периодического сбора.
После размещения пользовательских скриптов мониторинга и проверки формата вывода вы можете протестировать их с помощью telegraf --test.
Сначала найдите файл конфигурации telegraf в директории /tmp:
$ ls -l /tmp | grep telegraf
-rw-r--r-- 1 root root 12676 Apr 26 11:24 telegraf_5432.conf
Запустите telegraf в тестовом режиме:
$ sudo /usr/local/matrixdb/bin/telegraf --config /tmp/telegraf_5432.conf --test
Вывод будет содержать результаты из ваших пользовательских скриптов, подтверждая их корректную загрузку:

После размещения скриптов они будут автоматически запускаться в каждом цикле сбора данных мониторинга системы. Подождите 1–2 минуты, затем выполните запрос к таблице local.system, чтобы убедиться, что данные пользовательского мониторинга были вставлены.
local.system, чтобы убедиться, что появились новые категории net_dev, net_interrupts_by_cpu и net_interrupts_by_queue:matrixmgr=# SELECT distinct category FROM local.system ORDER BY 1;
category
-------------------------
cpu
disk
diskio
kernel
mem
net
net_dev
net_interrupts_by_cpu
net_interrupts_by_queue
netstat
postgresql
processes
sar_cpu
sar_cpu_util
sar_disk
sar_hugepages
sar_inode
sar_io
sar_mem
sar_network
sar_paging
sar_queue
sar_swap
sar_swap_util
sar_task
swap
system
(27 rows)
Запросите фактические собранные данные:
matrixmgr=# SELECT * FROM local.system
WHERE category IN ('net_interrupts_by_cpu', 'net_interrupts_by_queue', 'net_dev')
ORDER BY ts DESC LIMIT 10;
Вывод показывает, что данные пользовательского скрипта сохранены в виде структурированных записей, готовых для анализа:

Для пользователей Prometheus перейдите по адресу http://<prometheus-server>:9090, чтобы убедиться, что пользовательские метрики присутствуют.
После того как данные попали в базу данных или Prometheus, вы можете создавать пользовательские панели на дашбордах Grafana и настраивать визуализации по своему усмотрению.
Это не является основной целью данного документа, поэтому приведены только базовые шаги.

В качестве примера для пользователей, не использующих Prometheus, напишите SQL-запрос для извлечения данных мониторинга:

После добавления панели данные пользовательского мониторинга будут визуализированы, например, в виде линейного графика:

Щёлкните значок шестерёнки для настройки оповещений:

