Мониторинг
Настройка Prometheus
Пререквизиты
- запущенный кластер YTsaurus;
- установленный Odin по инструкции;
- установленный prometheus-operator по инструкции.
Установка
Сервисы для мониторинга создаются оператором YTsaurus и helm-чартов Odin автоматически.
Для сбора метрик необходимо:
- Создать ServiceMonitor для сбора метрик с компонент YTsaurus.
- Создать ServiceMonitor для метрик с Odin, указав
metrics.serviceMonitor.enable: true
в values для helm-chart (по умолчанию он не создается). - Создать сервисный аккаунт.
- Выдать созданному аккаунту роль.
- Создать Prometheus.
Способы мониторинга и важные метрики YTsaurus
Подходы к организации мониторинга технических систем можно условно разделить на два основных направления, назовем их качественный и количественный мониторинг.
Качественный мониторинг
Качественный мониторинг проверяет, способна ли система выполнять свою базовую функциональность. Для этого запускаются тестовые задания или, по-другому, проверки. Такие проверки возвращают качественное описание проверяемой системы:
- работает в штатном режиме (OK);
- не работает (CRITICAL);
- работает, но с отклонениями от штатного режима (WARNING).
Список наиболее важных качественных проверок YTsaurus:
sort_result
— запускает sort операцию над небольшой тестовой таблицей, ждет её завершения и проверяет результат сортировки;map_result
— запускает map операцию с небольшой тестовой таблицей на входе, ждет её завершения и проверяет результат map;dynamic_table_commands
— проверяет работоспособность динамических таблиц, проходя весь жизненный цикл динамической таблицы: создаёт тестовую таблицу, монтирует таблицу, записывает и читает данные из таблицы, после чего отмонтирует и удаляет таблицу.
Существуют проверки сообщений самодиагностики подсистем YTsaurus кластера:
master_alerts
— проверяет значение атрибута//sys/@master_alerts
;scheduler_alerts
— проверяет значение атрибута//sys/scheduler/@alerts
;controller_agent_alerts
— вычитывает атрибут alerts из всех узлов из//sys/controller_agents/instances
;lost_vital_chunks
— проверяет, что счетчик lost_vital_chunks равен нулю из//sys/lost_vital_chunks/@count
. Подробнее про vitality можно прочитать по ссылке;tablet_cells
— проверяет, что в динамических таблицах нет tablet cells в статусе failed;quorum_health
— проверяет, что все мастера работают и находятся в кворуме.clock_quorum_health
(отключена по умолчанию) - проверяет, что все clock-серверы работают и находятся в кворуме;suspicious_jobs
- проверяет, что на кластере нет джобов, которые тормозят и не происходит никакого прогресса;tablet_cell_snapshots
- проверяет, что снепшоты таблет-целлов успевают формироваться;scheduler_uptime
- проверяет, что шедулер работает стабильно и не переподключается к мастеру;controller_agent_count
- проверяет, что есть достаточное число подключенных контроллер-агентов;controller_agent_uptime
- проверяет, что контроллер-агенты работают стабильно и не переподключаются к шедулеру;operations_snapshots
- проверяет, что для операций регулярно строятся снепшоты;operations_count
- проверяет, что не стало слишком много операций в Кипарисе;dynamic_table_replication
(отключена по умолчанию) - проверяет, что на кластере работает репликация для реплицированных динамическик таблиц;register_watcher
- проверяет, ноды кластера работают стабильно и не переподключаются к мастеру слишком часто;tmp_node_count
- проверяет, что количество объектов в директориях в//tmp
не превышает разумного порога;destroyed_replicas_size
- проверяет, что система успевает подчищать реплики неактуальных (удаленных) чанков;query_tracker_yql_liveness
- проверяет работоспособность YQL запросов через Query Trackerquery_tracker_chyt_liveness
(отключена по умолчанию) - проверяет работоспособность CHYT запросов через Query Trackerquery_tracker_ql_liveness
(отключена по умолчанию) - проверяет работоспособность YT QL запросов через Query Tracker.query_tracker_dq_liveness
(отключена по умолчанию) - проверяет живость DQ;controller_agent_operation_memory_consumption
- проверяет потребление память операциями в контроллер-агентах;discovery
(отключена по умолчанию) - проверяет, что запущено достаточно число инстансов discovery серверов;master
- проверяет, что успешно выполняетсяget
для корня кипариса;medium_balancer_alerts
- проверяет, что Medium Balancer работает без ошибок.oauth_health
- проверяет, что токен Odin успешно авторизовывается;operations_archive_tablet_store_preload
- проверяет, что системные таблицы, необходимые для работы архива операций, успешно подгружаются в память;proxy
- проверяет, что запущены и работают HTTP proxy для исполнения тяжелых запросов;queue_api
(отключена по умолчанию) - создает очередь, консьюмер и пытается записать/прочитать данные, то есть проверяет, что API очередей работает штатно;queue_agent_alerts
(отключена по умолчанию) - проверяет, что запущено достаточное число инстансов Queue Agent и на них нет алертов;query_tracker_alerts
- проверяет, что запущено достаточное число инстансов Query Tracker и на них нет алертов;scheduler
- проверяет, что шедулер запущен (его орхидея доступна);scheduler_alerts_jobs_archivation
- проверяет, что нет ошибок архивации джобов на нодах;scheduler_alerts_update_fair_share
- проверяет, что хватает вычислительных ресурсов для исполнения гарантий;stuck_missing_part_chunks
,missing_part_chunks
- проверяют, что нет erasure-данных, которые долгое время недоступны и не могут восстановиться;unaware_nodes
(отключена по умолчанию) - проверяет, что на кластере нет нод, которые не привязаны ни к какому rack;operations_satisfaction
- проверяет, что операции, запущенные на кластере, получают положенную долю ресурсов.
Реализацию данных проверок можно посмотреть в Odin.
Количественный мониторинг
Для количественного мониторинга с различных подсистем снимаются метрики в виде временных рядов (Time series data). С их помощью можно оценить тенденции нагрузки и потребляемых ресурсов и исправить ситуацию до появления проблем на кластере, заметных пользователям.
Некоторые важные количественные метрики в Prometheus:
yt_resource_tracker_total_cpu{service="yt-master", thread="Automaton"}
— загрузка Automaton, основного исполняющего потока мастера. Загрузка не должна быть больше 90%;yt_resource_tracker_memory_usage_rss{service="yt-master"}
— использование мастером памяти. Порог должен быть чуть меньше половины памяти контейнера. Мастер делает fork для записи снапшота, потому должен быть двойной запас по памяти;yt_resource_tracker_memory_usage_rss
— важная метрика и для других компонентов кластера, позволяющая оценить тенденцию потребления памяти для избежания событий out of memory;yt_changelogs_available_space{service="yt-master"}
— свободное место под changelogs. В конфигурационном файле мастера есть настройка хранения changelogs, свободного места должно быть больше, чем эта настройка;yt_snapshots_available_space{service="yt-master"}
— аналогично для snapshots;yt_logging_min_log_storage_available_space{service="yt-master"}
— аналогично для logs.
Необходимо следить за ростом чанков в «нехороших» состояниях:
yt_chunk_server_underreplicated_chunk_count
— число чанков, имеющих на дисках кластера меньше реплик, чем указано в атрибуте replication_factor. Постоянный рост underreplicated может говорить о том, что настройки media не позволяют выполнять условия replication_factor в текущей конфигурации кластера. Число underreplicated чанков можно посмотреть в //sys/underreplicated_chunks/@count;yt_chunk_server_parity_missing_chunk_count
иyt_chunk_server_data_missing_chunk_count
— постоянный рост parity_missing_chunk или data_missing_chunk может быть вызван тем, что процесс починки erasure не успевает за поломкой при выходе хостов или дисков из строя. Число parity_missing и data_missing чанков можно посмотреть в //sys/parity_missing_chunks/@count и //sys/data_missing_chunks/@count.
Важно отслеживать квоты системных аккаунтов, таких как sys, tmp, intermediate, а также пользовательские квоты продуктовых процессов. Пример для аккаунта sys:
yt_accounts_chunk_count{account="sys"} / yt_accounts_chunk_count_limit{account="sys"}
— процент использования чанковой квоты;yt_accounts_node_count{account="sys"} / yt_accounts_node_count_limit{account="sys"}
— процент использования квоты на число узлов Кипариса;yt_accounts_disk_space_in_gb{account="sys"} / yt_accounts_disk_space_limit_in_gb{account="sys"}
— процент использования дисковой квоты.