Метрики Apache Cassandra - часть 1: org.apache.cassandra.request
В предыдущей статье были описаны базовые понятия и принципы чтения и анализа метрик Apache Cassandra. В сегодняшней статье будет подробно рассказано о конкретных метриках из раздела org.apache.cassandra.request (и его близнеце org.apache.cassandra.metrics:type=ThreadPools,path=request), о рекомендуемых значениях и причинах отклонения от этих значений.
Данные метрики в основном характеризуют производительность кластера и влияют на скорость обработки запросов. Если есть подозрения в низкой скорости работы Кассандры, то значения данных метрик помогут локализовать узкое место в производительности.
org.apache.cassandra.request (org.apache.cassandra.metrics:type=ThreadPools)
Как следует из названия метрики из этого раздела показывают процесс обработки пользовательских запросов:
org.apache.cassandra.request:type=MutationStage (org.apache.cassandra.metrics:type=ThreadPools,path=request,scope=MutationStage) - запросы на изменение данных.
Здесь основным атрибутом является значение PendingTasks - чем выше это значение тем хуже, в идеале должно быть 0, при высокой нагрузке может возрастать, главное чтобы оно не увеличивалось постоянно, в реальных условиях этот атрибут имеет плавающее значение, рекомендуется ориентироваться на среднее значение не выше 15. Если выше, то это может свидетельствовать о чрезмерной нагрузке на систему. Более тонкая настройка кластера, использование более производительного железа или большего количества узлов кассандры может улучшить этот показатель.
Значение CurrentlyBlockedTasks большее чем 0 свидетельствует о том, что система совершенно не способна справляться с нагрузкой. Собственно то же что и PendingTasks, но когда лимит PendingTasks уже превышен.
TotalBlockedTasks - как и CurrentlyBlockedTasks не должен быть выше 0. Показывет заблокированные задачи за весь период ап-тайма ноды и сбрасывается при перезагрузке узла.
org.apache.cassandra.request:type=ReadStage (org.apache.cassandra.metrics:type=ThreadPools,path=request,scope=ReadStage) - запросы на чтение данных.
PendingTasks - также основной показатель для мониторинга. В идеале должен иметь значение 0. При большом количестве запросов на чтение данный параметр может увеличиваться, важно чтоб он не увеличивался постоянно и периодически уменьшался. Также рекомендуется ориентироваться на среднее значение в 15. Если значение постоянно увеличивается и до ходит до тысяч, то скорее всего проблема в диске, который не успевает обрабатывать нагрузку. Настройка параметров кассандры, более быстрые диски или большее количество узлов кассандры решат проблему.
CurrentlyBlockedTasks и TotalBlockedTasks выше 0, как и для MutationStage, свидетельствует о том, что система экстремально перегружена или присутствуют проблемы с оборудованием.
org.apache.cassandra.request:type=ReadRepairStage (org.apache.cassandra.metrics:type=ThreadPools,path=request,scope=ReadRepairStage) - обработка запросов механизма ReadRepair
ReadRepair - один из механизмов обеспечения согласованности данных между узлами Кассандры. При запросе на чтение данных Кассандра сравнивает данные реплик на предмет актуальности, и, в случае обнаружения узлов с неактуальными данными, обновляет данные на этих узлах. Для реплик, которые покрываются текущим значением Consitency Level эта операция происходит всегда, например, при CL = ALL, данные со всех реплик будут проверены на предмет актуальности перед отправкой результата клиенту, а для реплик, которые не попали под текущий Consistency Level, данная операция будет выполнятся с определенной вероятностью, которая задается параметром read_repair_chance.
Рекомендации по мониторингу такие же как и для ReadStage и MutationStage. Если значения превышают нормальные, то более точная настройка read_repair_chance или его полное отключение помогут избавиться от проблемы, особенно в случае если операций чтения гораздо больше, чем операций записи. Однако установка read_repair_chance = 0 может стать причиной рассинхронизации данных между узлами (и если отключен механизм hinted handoff).
org.apache.cassandra.request:type=RequestResponseStage (org.apache.cassandra.metrics:type=ThreadPools,path=request,scope=RequestResponseStage) - обработка ответов от других узлов кассандры.
Рекомендации по мониторингу такие же как и для ReadStage и MutationStage. Очень маловероятно, что этот параметр будет отличатся от идеальных значений при условии, что остальные метрики имеют “здоровые” значения. Малоприоритетный параметр для мониторинга.
org.apache.cassandra.request:type=CounterMutationStage (org.apache.cassandra.metrics:type=ThreadPools,path=request,scope=CounterMutationStage) - (параметр ReplicateOnWriteStage для версии Cassandra ниже 2.1, который также включает операции репликации данных) операции изменения счетчиков (counters).
Рекомендации по мониторингу такие же как и для ReadStage и MutationStage. Значение PendingTasks может увеличиваться, если скорость записи данных превышает скорость обновления счетчиков. Свидетельствует о необходимости оптимизация модели данных и использования счетчиков.
Это все метрики из раздела org.apache.cassandra.request. В следующих статьях читайте продолжение описания метрик из других разделов.
Полезные ссылки по теме:
- Guide to Cassandra Thread Pools - довольно подробное описание базовых принципов архитектуры Cassandra и основных метрик на английском языке
- Nodetool tptats для версии 2.1 - краткое описание метрик для версии Cassandra 2.1 на английском языке
- Nodetool tptats для версии 2.0 - краткое описание метрик для версии Cassandra 2.0 на английском языке