Мониторинг кластера Arenadata DB =========================== В документе приведены параметры мониторинга кластера Arenadata DB, а также схема организации мониторинга. Документ может быть полезен администраторам, программистам, разработчикам и сотрудникам подразделений информационных технологий, осуществляющих внедрение кластера. .. important:: Для работы с метриками ADB требуется выделенный кластер мониторинга. Информация по разворачиванию кластера мониторинга приведена здесь - https://docs.arenadata.io/mon/ru/index.html Схема мониторинга --------------- Схема мониторинга представлена на :numref:`Рис.%s. ` .. _scheme: .. figure:: ./images/scheme.png :align: center *Схема мониторинга* Сервис мониторинга модульный и состоит из нескольких компонент: **На стороне Arenadata DB** * Diamond – агент мониторинга, который собирает и отправляет системные метрики с серверов в кластере ADB на сервер Graphite. * Custom scripts - shell и SQL-cкрипты по мониторингу состояния кластера ADB и статуса сегментов **На стороне кластера мониторинга** * Carbon-relay – модуль сервиса Grathite, который принимает метрики, преобразует в бинарный формат и отправляет следующему модулю Carbon-caches; * Carbon-caches – модуль сервиса Grathite, который принимает метрики и записывает их в базу данных Whisper DB; * Whisper DB – модуль сервиса Grathite, который является базой данных для хранения метрик; * Graphite – фронтенд, читающий метрики из Whisper DB и отдающий их в ответ на особые запросы; * Grafana – инструмент для визуализации метрик из Graphite. Агент мониторинга Diamond ^^^^^^^^^^^^^^^^^^^^^^^^^^ Агент мониторинга Diamond устанавливается локально на сервера кластера СУБД. Параметры коллекторов, интервал отправки метрик можно найти в конфигурационном файле ``/etc/diamond/diamond.conf`` По умолчанию *Default Poll Interval (seconds) = 60* Скрипты по мониторингу состояния кластера ADB и статуса сегментов ^^^^^^^^^^^^^^^^^^^^^^^^^ Помимо информации, которая собирается с помощью агентов мониторинга Diamond, существуют запросы, которые отслеживают статус состояния кластера ADB и статус сегментов и отправляют командой ``ncat`` напрямую на Graphite (*default Metrics receiver TCP port 2015/ UDP port 2016*). Скрипты разворачивается на хосте, где master в директории ``/home/gpadmin/arenadata_configs/`` и добавлены в расписание cron. Скрипт ``arenadata_segments_monitor.sh`` отсылает метрики из ADB по умолчанию раз в 3 минуты: :: $ crontab -l | grep arenadata_segments_monitor.sh */3 * * * * /home/gpadmin/arenadata_configs/arenadata_segments_monitor.sh >> /home/gpadmin/arenadata_configs/arenadata_segments_monitor.log 2>&1 Скрипт ``db_datfrozenxid_alerter.sh`` отсылает метрику “Wraparound warn percentage” из ADB по умолчанию раз в 30 минут: :: $ crontab -l | grep db_datfrozenxid_alerter.sh */30 * * * * /home/gpadmin/arenadata_configs/db_datfrozenxid_alerter.sh >> /home/gpadmin/arenadata_configs/db_datfrozenxid_alerter.log 2>&1 Вид метрик в Grafana и их описание ----------------------------------- Dashboard General/Arenadata System metrics ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Screen 1 (7 panels at the top) (:numref:`Рис.%s. `) """"""""""""""""""""""""""""" .. _screen1_system7: .. figure:: ./images/screen1_system7.png :align: center *System metrics: 7 panels at the top* CPU Usage (:numref:`Рис.%s. `) """"""""""""""""""""""""""""" .. _cpu_usage: .. figure:: ./images/cpu_usage.png :align: center *CPU Usage* Источник Graphite - ``System metrics\CPU\Percent``. Отображает процент загрузки процессора. Загрузка выше 90 процентов считается опасной (нестандартной), требующей анализа. График показывает загрузку CPU на каждом хосте, а также среднее значение. Alerting recommendations: среднее значение по хостам превышает 80% (10 минут). Load AVG (:numref:`Рис.%s. `) """"""""""""""""""""""""""""" .. _load_avg: .. figure:: ./images/load_avg.png :align: center *Load AVG* Источник Graphite - ``System metrics\loadavg\01``. Отображает потребность в исполняемых потоках (задачах) в виде усреднённого количества исполняемых и ожидающих потоков за последнюю 1 минуту. Может быть получена из Linux консоли, выполнив команду uptime (первое из трех значений). Alerting recommendations: среднее значение превышает Cores X2 или разница между средним и максимальным более 30% с учетом того, что среднее значение превышает 30% (10 минут). IOPS (:numref:`Рис.%s. `) """"""""""""""""""""""""""""" .. _iops: .. figure:: ./images/iops.png :align: center *IOPS* Источник Graphite - ``System metrics\Iostat\Iops``. Отображает количество операций ввода/вывода в секунду. Собирается Diamond из ``/proc/diskstats``. IO % (:numref:`Рис.%s. `) """"""""""""""""""""""""""""" .. _io_percent: .. figure:: ./images/io_percent.png :align: center *IO %* Источник Graphite - ``System metrics\Iostat\util_persentage``. Отображает нагрузку на диск при операциях ввода/вывода. Собирается Diamond из ``/proc/diskstats``. Mb per sec (:numref:`Рис.%s. `) """"""""""""""""""""""""""""" .. _mp_per_sec: .. figure:: ./images/mp_per_sec.png :align: center *Mb_per_sec* Источник Graphite - ``System metrics\Iostat\byte_per_second``. Отображает скорость записи на диск при вводе/выводе информации. Await (:numref:`Рис.%s. `) """"""""""""""""""""""""""""" .. _await: .. figure:: ./images/await.png :align: center *Await* Источник Graphite - ``System metrics\Iostat\await``. Отображает время простоя (задержки) системы. Service Time (:numref:`Рис.%s. `) """"""""""""""""""""""""""""" .. _service_time: .. figure:: ./images/service_time.png :align: center *Service Time* Источник Graphite - ``System metrics\Iostat\service_time``. Отображает общее время выполнения (обслуживания) запроса. Screen 2 (8 panels in the bottom) (:numref:`Рис.%s. `) """"""""""""""""""""""""""""" .. _screen2_system: .. figure:: ./images/screen2_system.png :align: center *System metrics: 8 panels in the bottom* Network Receive Bytes (:numref:`Рис.%s. `) """"""""""""""""""""""""""""" .. _network_receive_bytes: .. figure:: ./images/network_receive_bytes.png :align: center *Network Receive Bytes* Источник Graphite - ``System metrics\network\rx_byte``. Отображает скорость получения информации через интерфейс. Network Transmit Bytes (:numref:`Рис.%s. `) """"""""""""""""""""""""""""" .. _network_transmit_bytes: .. figure:: ./images/network_transmit_bytes.png :align: center *Network Transmit Bytes* Источник Graphite - ``System metrics\network\tx_byte``. Отображает скорость передачи информации через интерфейс Memory Cached (:numref:`Рис.%s. `) """"""""""""""""""""""""""""" .. _memory_cached: .. figure:: ./images/memory_cached.png :align: center *Memory Cached* Источник Graphite - ``System metrics\memory\Cached``. Отображает объем, занятый в ОЗУ под кэш чтения страниц с диска. Memory Free (:numref:`Рис.%s. `) """"""""""""""""""""""""""""" .. _memory_free: .. figure:: ./images/memory_free.png :align: center *Memory Free* Источник Graphite - ``System metrics\memory\MemFree``. Отображает неиспользуемый объем памяти, доступный для немедленного выделения процессам. Disk Space Usage - datadirs (:numref:`Рис.%s. `) """"""""""""""""""""""""""""" .. _disk_space_usage_datadirs: .. figure:: ./images/disk_space_usage_datadirs.png :align: center *Disk Space Usage - datadirs* Источник Graphite - ``System metrics\diskspace\byte_percentfree``. Отображает процент свободного пространства на диске. Disk Space Usage - / (:numref:`Рис.%s. `) """"""""""""""""""""""""""""" .. _disk_space_usage: .. figure:: ./images/disk_space_usage.png :align: center *Disk Space Usage /* Источник Graphite - ``System metrics\diskspace\root\byte_percentfree``. Отображает процент свободного пространства на диске в директории root. Processes Running (:numref:`Рис.%s. `) """"""""""""""""""""""""""""" .. _processes_running: .. figure:: ./images/processes_running.png :align: center *Processes Running* Источник Graphite - ``System_metrics\$host\loadavg\processes_running``. Отображает количество запущенных (активных) процессов. Processes Total (:numref:`Рис.%s. `) """"""""""""""""""""""""""""" .. _processes_total: .. figure:: ./images/processes_total.png :align: center *Processes Total* Источник Graphite - System_metrics\$host\loadavg\processes_total. Отображает общее количество процессов Dashboard General/Arenadata DB system cluster <имя кластера> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Screen 1. Section Database (8 panels) (:numref:`Рис.%s. `) """"""""""""""""""""""""""""" .. _screen1_database: .. figure:: ./images/screen1_database.png :align: center *Database metrics: 8* Метрики для Database секции отправляются напрямую в Graphite через команду ``ncat 2015`` из следующих скриптов обслуживания ``/home/gpadmin/arenadata_config`` : * *arenadata_segments_monitor.sh* * *db_datfrozenxid_alerter.sh* Database is (:numref:`Рис.%s. `) """"""""""""""""""""""""""""" .. _database_is: .. figure:: ./images/database_is.png :align: center *Database is* """""""""""""""" Источник Graphite - ``Database\available\is_available`` Отображает состояние (запущена/остановлена) базы данных. *Arenadata.DB.database.available.is_available* – checks database availability; (0 – available, 1 – not available). Interval - 3 minutes; Mirrors as primaries (:numref:`Рис.%s. `) """"""""""""""""""""""""""""" .. _mirrors_as_primaries: .. figure:: ./images/mirrors_as_primaries.png :align: center *Mirrors as primaries* """""""""""""""" Отображает соотношение основных и зеркальных сегментов. *Arenadata.DB.database.segments.MIRRORS_AS_PRIMARY* – monitor switching between primary and mirror segments (0 – not switched, > 0 – switched). Interval - 3 minutes; Primaries OK - отображает количество исправных сегментов. Рассчитывается как $TOTAL_PRIMARIES - $MIRRORS_AS_PRIMARIES. Источник для $TOTAL_PRIMARIES - запрос к СУБД ``select count(1) from gp_segment_configuration where preferred_role='p' and content<>-1;`` $MIRRORS_AS_PRIMARIES - отображает количество зеркал (заменяющих) сегментов. Источник - запрос к СУБД ``select count(1) from gp_segment_configuration where preferred_role='m' and role='p' and content<>-1`` Database segments (:numref:`Рис.%s. `) """"""""""""""""""""""""""""" .. _database_segments: .. figure:: ./images/database_segments.png :align: center *Database segments* """""""""""""""" Текущее состояние сегментов (сколько работают, и сколько нет). Segments down - отображает количество нерабочих (или отключенных) сегментов. Рассчитывается как $TOTAL_SEGMENTS - $UP_SEGMENTS. Источник для $TOTAL_SEGMENTS - запрос к СУБД ``select count(1) from gp_segment_configuration where content<>-1;`` $UP_SEGMENTS - отображает количество рабочих (включенных) сегментов. Источник - запрос к СУБД ``select count(1) from gp_segment_configuration where status ='u' and content<>-1`` *Arenadata.DB.database.segments.TOTAL_PRIMARY_SEGMENTS* – number of primary segments (no thresholds). Interval - 3 minutes; *Arenadata.DB.database.segments.TOTAL_SEGMENTS* – number of total segments (primary + mirror) (no thresholds). Interval - 3 minutes; *Arenadata.DB.database.segments.UP_SEGMENTS* – number of segments with status UP (must be the same as TOTAL_SEGMENTS, if less – error or warning). Interval - 3 minutes; Longest Transaction (sec) (:numref:`Рис.%s. `) """"""""""""""""""""""""""""" .. _longest_transaction_sec: .. figure:: ./images/longest_transaction_sec.png :align: center *Longest Transaction (sec)* """""""""""""""" *Arenadata.DB.database.sessions.LONGEST_XACT_TIME* - the time the longest current transaction has been already run. Interval - 3 minutes; $LONGEST_XACT_TIME - рассчитывается как запрос к СУБД ``select extract(epoch from now() - xact_start) from pg_stat_activity where pid != pg_backend_pid() and xact_start is not null order by xact_start asc limit 1;`` Longest Transaction (sess_id) (:numref:`Рис.%s. `) """"""""""""""""""""""""""""" .. _longest_transaction_sessid: .. figure:: ./images/longest_transaction_sessid.png :align: center *Longest Transaction (sess_id)* """""""""""""""" *Arenadata.DB.database.sessions.LONGEST_XACT_SESS_ID* – the number of Session ID with the longest current transaction (no thresholds) . Interval - 3 minutes; $LONGEST_XACT_SESS_ID - рассчитывается как запрос к СУБД ``select sess_id from pg_stat_activity where pid != pg_backend_pid() and xact_start is not null order by xact_start asc limit 1;`` Master replication state is (:numref:`Рис.%s. `) """"""""""""""""""""""""""""" .. _master_replication_state_is: .. figure:: ./images/master_replication_state_is.png :align: center *Master replication state is* """""""""""""""" График показывает состояние репликации мастера. Возможные значения: * 0 – inactive; * 1 – startup; * 2 – catchup; * 3 – backup; * 4 – streaming. Alerting: последнее значение меньше 1 (5 минут). Replication Delay (:numref:`Рис.%s. `) """"""""""""""""""""""""""""" .. _replication_delay: .. figure:: ./images/replication_delay.png :align: center *Replication Delay* """""""""""""""" График показывает задержку репликации с master на secondary master Wraparound warn percentage (:numref:`Рис.%s. `) """"""""""""""""""""""""""""" .. _wraparound_warn_percentage: .. figure:: ./images/wraparound_warn_percent.png :align: center *Wraparound warn percentage* """""""""""""""" График показывает значение счетчика транзакций в каждой БД на каждом сегменте. Alerting: максимальное значение превышает 50% (1 час). Отображает процент опасности переполнения счетчика транзакций. Значения более 50 процентов считаются опасным (нестандартными) показателем, требующими тщательного анализа. Screen 2. Section System (15 panels) (:numref:`Рис.%s. `) """"""""""""""""""""""""""""" .. _screen1_system15: .. figure:: ./images/screen1_system15.png :align: center *System metrics (15 panels)* В этой секции отображаются метрики аналогичные Arenadata System Metrics, с фильтром хостов по кластеру <имя кластера>