Основные метрики
================

В разделе описаны основные метрики, используемые на графиках. Полный перечень возможных метрик
можно посмотреть в браузере по указанным в предыдущем разделе ссылкам и добавить при необходимости 
в дополнительные графики.


JBoss
-----

Источники данных
~~~~~~~~~~~~~~~~

``datasource_pool_available_count`` - количество доступных соединений в пуле.

``datasource_pool_active_count`` - количество активных соединений; каждое соединение либо
использовано приложением, либо доступно в пуле.

``datasource_pool_max_used_count`` - максимальное количество использованных соединений.

``datasource_pool_max_creation_time`` - максимальное время создания соединения,
в миллисекундах.

``datasource_pool_average_creation_time`` - среднее время создания соединения,
в миллисекундах.

``datasource_pool_average_blocking_time`` - среднее время блокирования 
при получении полной блокировки пула.

Эти метрики на графиках выведены отдельно для БД synergy, storage и jbpmdb.

``datasource_pool_total_creation_time`` - общее время создания соединений в миллисекундах.

``datasource_pool_total_blocking_time`` - общее время блокирования соединений в миллисекундах.


Транзакции
~~~~~~~~~~

``transaction_aborted_transactions`` - число прерванных транзакций.

``transaction_application_rollbacks`` - число транзакций, откаченных назад запросом приложения.
Включают в себя и те транзакции, для которых истекло время ожидания.

``transaction_timed_out_transactions`` - чисто транзакций, откат которых произошёл из-за таймаута.

``transaction_committed_transactions`` - число подтверждённых транзакций.

``transaction_inflight_transactions`` - число транзакций, которые начались, но ещё не завершились.

``transaction_resource_rollbacks`` - число транзакций, откаченных назад из-за сбоя ресурса.


JVM
~~~

``jvm_memory_pool_bytes_used`` - использование пула памяти в байтах.

``jvm_memory_pool_bytes_max`` - максимум пула памяти в байтах.

``jvm_memory_pool_bytes_committed`` - выделенное количество пула памяти в байтах.

``jvm_memory_pool_bytes_init`` - исходное количество пула памяти в байтах.

``jvm_memory_bytes_used`` - использование выделенной области памяти в байтах.

На графиках показаны процент использованного Old Generation, количество использованной памяти JVM,
использование памяти в зависимости от сегмента (heap и non-heap).

``jvm_gc_collection_seconds_count`` - количество запущенных GC.

``jvm_gc_collection_seconds_sum`` - время, которое GC выполнялись.

``jvm_threads_current`` - текущее количество потоков в JVM.



nginx
-----

``synergy_http_response_count_total`` - общее количество завершённых HTTP-запросов/ ответов. Кроме графика
среднего времени отклика используется для сводки кодов состояния HTTP.

``synergy_http_response_size_bytes`` - общее количество переданного контента в байтах.

``synergy_http_response_time_seconds`` - сводка всех времён отклика в секундах. На графиках Response Times (quantiles)
линиями 0.5, 0.9, 0.99 отмечено время, за которое успевает выполниться соответственно 50, 90, 99 % запросов.



Cassandra
---------


Метрики клиентов
~~~~~~~~~~~~~~~~

``clientrequest_latency_count`` - общее время задержек при выполнении запросов.

``clientrequest_latency_mean`` - среднее время задержек при выполнении запросов.

``clientrequest_latency_95thpercentile`` - 95-процентная доля задержек при выполнении запросов.

``columnfamily_rangelatency_mean`` - задержка сканирования локального диапазона для этой таблицы.

``clientrequest_unavailables_count`` - количество обнаруженных исключений из-за недоступности.

``clientrequest_timeouts_count`` - количество обнаруженных таймаутов.

``clientrequest_timeouts_mean`` - усреднённое количество обнаруженных таймаутов.


Хранилище
~~~~~~~~~

``storage_exceptions`` - количество выявленных внутренних исключений. При стандартных 
исключениях значение должно равняться нулю. 

``storage_load`` - размер данных, которыми управляет данный узел, на диске в байтах.

``storage_totalhints`` - количество сообщений с напоминаниями, записанных на этот узел с момента
(ре)старта сервера.

``storage_totalhintsinprogress`` - количество напоминаний, которое отправляется в данный момент.


Уплотнение (compaction)
~~~~~~~~~~~~~~~~~~~~~~~

Уплотнение - процесс освобождения места путём слияния больших файлов данных. В ходе операции
уплотнения файлы SSTable сливаются: производится объединение ключей и соответствующих им столбцов, 
создание нового индекса. После уплотнения объединённые данные сортируются, над ними 
строится новый индекс, и только что объединённые, отсортированные и проиндексированные данные 
записываются в новый файл SSTable.

Ещё одна важная функция уплотнения - повышение производительности путём сокращения числа 
операций поиска. Для нахождения столбца данных с указанным ключом нужно просмотреть
ограниченное количество файлов SSTable. Если этот столбец часто изменяется, то вполне может оказаться, 
что все версии находятся в сброшенных на диск файлах SSTable. Уплотнение позволяет 
базе данных не просматривать каждый файл SSTable в поисках указанного ключа и не выбирать из 
них самое последнее значение каждого столбца.

В процессе уплотнения наблюдается кратковременный всплеск интенсивности ввода-вывода и 
изменение занятого на диске места - это читаются старые и записываются новые файлы SSTable.

``compaction_pendingtasks`` - расчётное количество уплотнений, оставшихся для выполнения.

``compaction_completedtasks`` - количество завершённых уплотнений с момента (ре)старта сервера.

``compaction_bytescompacted`` - общее число байтов, уплотнённых с момента (ре)старта сервера.

``compaction_totalcompactionscompleted`` - пропускная способность выполненных уплотнений с 
момента (ре)старта сервера.


Фильтр Блума
~~~~~~~~~~~~

Фильтры Блума служат для повышения производительности чтения. Это очень быстрый 
недетерминированный алгоритм, который проверяет, является ли некий объект элементом 
множества. Недетерминированность связана с тем, что фильтр Блума может давать ложноположительные 
ответы, но никогда не даёт ложноотрицательных. Принцип работы фильтра Блума
заключается в отображении значений элементов множества в битовый массив и в сжатии
большого количества данных в строку-дайджест с помощью хэш-функции. Дайджест, по определению,
занимает гораздо меньше памяти, чем исходные данные. Фильтр сохраняется в памяти и позволяет 
повысить производительность, поскольку не каждая операция поиска ключа требует
медленного доступа к диску. Таким образом, фильтр Блума является особым видом кэша.

``columnfamily_bloomfilterfalsepositives`` - количество ложно-положительных результатов
в фильтре таблицы.

``columnfamily_bloomfilterfalseratio`` - пропорция ложно-положительных результатов в фильтре таблицы.

``columnfamily_bloomfilterdiskspaceused`` - дисковое пространство, занятое фильтром Блума, в байтах.

``columnfamily_bloomfilteroffheapmemoryused`` - память вне кучи, использованная фильтром Блума.


Пул потоков
~~~~~~~~~~~

Cassandra разбивает работу определённых типов на собственный пул потоков. Это обеспечивает 
асинхронность запросов на узле. Состояние потоков важно отслеживать, так как оно показывает,
насколько насыщен узел.

``threadpools_completedtasks`` - количество завершённых задач.

``threadpools_pendingtasks`` - количество задач в очереди.

``threadpools_activetasks`` - количество активных задач.

``threadpools_totalblockedtasks`` - количество задач, блокированных из-за насыщения очереди.

``threadpools_currentlyblockedtasks`` - количество задач, которые блокированы в настоящее время 
из-за насыщения очереди, но будут разблокированы при повторной попытке.


Кэш
~~~

``cache_hitrate`` - коэффициент попадания в кэш за всё время.

``cache_size`` - общий размер, занятый кэшем, в байтах.

``cache_hits`` - общее количество попаданий в кэш.

``cache_requests`` - общее количество запросов кэша.

``cache_entries`` - общее количество записей в кэше.


Таблицы памяти
~~~~~~~~~~~~~~

``columnfamily_memtablelivedatasize`` - общий объем живых данных в таблице памяти, 
исключая любые заголовки структуры данных.

``columnfamily_memtablecolumnscount`` - общее количество столбцов в таблице памяти.

``columnfamily_memtableonheapsize`` - общий объем данных в таблице памяти, который находится в куче, 
включая относящийся к столбцам заголовок и перезаписанные разделы.

``columnfamily_memtableoffheapsize`` - общий объем данных в таблице памяти, который находится вне кучи, 
включая относящийся к столбцам заголовок и перезаписанные разделы.

``columnfamily_memtableswitchcount`` - сколько раз сброс данных приводил к выключению.

``columnfamily_livesstablecount`` - количество SSTable на диске для данной таблицы. 


CQL
~~~

``cql_regularstatementsexecuted`` - количество выполненных неподготовленных операторов.

``cql_preparedstatementsexecuted`` - количество выполненных подготовленных операторов.



Elasticsearch
-------------


Системные метрики
~~~~~~~~~~~~~~~~~

``process_cpu_percent`` - процент использования CPU процессом Elasticsearch.

``jvm_memory_used_bytes`` - текущее использование памяти JVM в байтах.

``jvm_memory_committed_bytes`` - зафиксированная память JVM в байтах.

``jvm_memory_max_bytes`` - максимальное использование памяти JVM в байтах.

``filesystem_data_available_bytes`` - доступное пространство на диске в байтах.

``filesystem_data_size_bytes`` - размер диска в байтах.

``transport_tx_size_bytes_total`` - общее количество отправленных байтов.

``transport_rx_size_bytes_total`` - общее количество полученных байтов.


Документы и операции
~~~~~~~~~~~~~~~~~~~~

``indices_docs`` - число документов на данном узле.

``indices_indexing_index_total`` - общее число индексных вызовов.

``indices_docs_deleted`` - число удалённых документов на данном узле.

``indices_merges_total`` - общее число слияний.

``indices_search_query_total`` - общее число поисковых запросов.

``indices_search_fetch_total`` - общее число выборок.

``indices_refresh_total`` - общее число обновлений.

``indices_flush_total`` - общее число сбросов.


Время
~~~~~

``indices_search_query_time_seconds`` - общее время выполнения поискового запроса в секундах.

``indices_indexing_index_time_seconds_total`` - совокупное время индексирования в секундах.

``indices_merges_total_time_seconds_total`` - общее время, потраченное на слияние, в секундах.


Кэш
~~~

``indices_fielddata_memory_size_bytes`` - использование памяти для кэша данных полей в байтах.

``indices_fielddata_evictions`` - вытеснение из поля данных.

``indices_query_cache_memory_size_bytes`` - использование памяти для кэша запросов в байтах.

``indices_query_cache_evictions`` - вытеснение из кэша запросов.


Пул потоков
~~~~~~~~~~~

``thread_pool_rejected_count`` - число отклонённых операций.

``thread_pool_active_count`` - число активных операций.

``thread_pool_queue_count`` - число операций в очереди.

``thread_pool_completed_count`` - число завершённых операций.


Garbage Collector
~~~~~~~~~~~~~~~~~

``jvm_gc_collection_seconds_count`` - количество запущенных JVM GC.

``jvm_gc_collection_seconds_sum`` - время выполнения GC в секундах.


**Ссылки и использованные источники:**

1. `Транзакции JBoss <https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.2/html-single/managing_transactions_on_jboss_eap/index#view_transaction_statistics>`_

2. `Источники данных JBoss <https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.2/html/configuration_guide/reference_material#reference_of_datasource_statistics>`_

3. `Полный список метрик Cassandra <http://cassandra.apache.org/doc/latest/operating/metrics.html>`_

4. `Полный список метрик Elasticsearch <https://github.com/justwatchcom/elasticsearch_exporter/blob/master/README.md>`_

5. Дж. Карпентер, Э. Хьюитт - Cassandra. Полное руководство
