Top.Mail.Ru
Tdg » 1.6 » 2. Руководство по эксплуатации » 2.15. Метрики
 

2.15. Метрики

2.15. Метрики

Для мониторинга работы TDG предоставляются метрики в формате Prometheus. Для каждого из инстансов кластера значения метрик доступны по адресу: http://<IP_адрес_инстанса>/metrics. В системе-сборщике метрик необходимо подать на вход адреса для сбора метрик со всех инстансов кластера.

Все доступные метрики можно разделить на несколько категорий:

Используются следующие типы метрики Prometheus:

  • counter – монотонно возрастающий счетчик;
  • gauge – метрика для числовых значений;
  • histogram – метрика для оценки интенсивности потока во времени.

Подробнее про типы метрик см. в официальной документации Prometheus.

2.15.1. Метрики TDG

2.15.1.1. Метрики запросов GraphQL

Для мониторинга и оценки запросов GraphQL предоставляются следующие метрики:

  • tdg_graphql_query_time{alias,schema,entity,operation_name} — время обработки запроса на получение данных (query), миллисекунды. Тип метрики: histogram.
  • tdg_graphql_mutation_time{alias,schema,entity,operation_name} — время обработки запроса на изменения данных (mutation), миллисекунды. Тип метрики: histogram.
  • tdg_graphql_query_fail{alias,schema,entity,operation_name} — количество запросов на получение данных (query) c ошибками. Тип метрики: counter.
  • tdg_graphql_mutation_fail{alias,schema,entity,operation_name} — количество запросов на изменение данных (mutation) c ошибками. Тип метрики: counter.

Бакеты (bucket) гистограмм распределены в интервале от 0 до 1000 миллисекунд с интервалом в 100 миллисекунд (см. пример ниже).

Каждая из метрик имеет следующие тэги:

  • alias — имя инстанса, на котором собираются метрики. Имя инстанса было задано при развертывании кластера;
  • schema — имя схемы (default или admin), в которую поступил запрос GraphQL;
  • entity — сущность, над которой производится операция;
  • operation_nameимя запроса GraphQL (может отсутствовать, если имя запроса не было задано). Рекомендуется указывать имена для всех запросов, чтобы можно было однозначно идентифицировать, к какому запросу относится информация в метрике.

Вызов сервиса аналогичен запросу (query) для сущности. В данном случае в тэг entity будет записано имя сервиса.

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

Пример:

# HELP tdg_graphql_query_time Graphql query execution time
# TYPE tdg_graphql_query_time histogram
tdg_graphql_query_time_bucket{alias="core_1",schema="default",entity="City",operation_name="GetCity",le="100"} 25
tdg_graphql_query_time_bucket{alias="core_1",schema="default",entity="City",operation_name="GetCity",le="200"} 25
tdg_graphql_query_time_bucket{alias="core_1",schema="default",entity="City",operation_name="GetCity",le="300"} 25
tdg_graphql_query_time_bucket{alias="core_1",schema="default",entity="City",operation_name="GetCity",le="400"} 25
tdg_graphql_query_time_bucket{alias="core_1",schema="default",entity="City",operation_name="GetCity",le="500"} 25
tdg_graphql_query_time_bucket{alias="core_1",schema="default",entity="City",operation_name="GetCity",le="600"} 25
tdg_graphql_query_time_bucket{alias="core_1",schema="default",entity="City",operation_name="GetCity",le="700"} 25
tdg_graphql_query_time_bucket{alias="core_1",schema="default",entity="City",operation_name="GetCity",le="800"} 25
tdg_graphql_query_time_bucket{alias="core_1",schema="default",entity="City",operation_name="GetCity",le="900"} 25
tdg_graphql_query_time_bucket{alias="core_1",schema="default",entity="City",operation_name="GetCity",le="1000"} 25
tdg_graphql_query_time_bucket{alias="core_1",schema="default",entity="City",operation_name="GetCity",le="+Inf"} 25
tdg_graphql_query_time_sum{alias="core_1",schema="default",entity="City",operation_name="GetCity"} 55
tdg_graphql_query_time_count{alias="core_1",schema="default",entity="City",operation_name="GetCity"} 25

# HELP tdg_graphql_mutation_time Graphql mutation execution time
# TYPE tdg_graphql_mutation_time histogram
tdg_graphql_mutation_time_bucket{alias="core_1",schema="default",entity="City",operation_name="InsCity",le="100"} 16
tdg_graphql_mutation_time_bucket{alias="core_1",schema="default",entity="City",operation_name="InsCity",le="200"} 16
tdg_graphql_mutation_time_bucket{alias="core_1",schema="default",entity="City",operation_name="InsCity",le="300"} 16
tdg_graphql_mutation_time_bucket{alias="core_1",schema="default",entity="City",operation_name="InsCity",le="400"} 16
tdg_graphql_mutation_time_bucket{alias="core_1",schema="default",entity="City",operation_name="InsCity",le="500"} 16
tdg_graphql_mutation_time_bucket{alias="core_1",schema="default",entity="City",operation_name="InsCity",le="600"} 16
tdg_graphql_mutation_time_bucket{alias="core_1",schema="default",entity="City",operation_name="InsCity",le="700"} 16
tdg_graphql_mutation_time_bucket{alias="core_1",schema="default",entity="City",operation_name="InsCity",le="800"} 16
tdg_graphql_mutation_time_bucket{alias="core_1",schema="default",entity="City",operation_name="InsCity",le="900"} 16
tdg_graphql_mutation_time_bucket{alias="core_1",schema="default",entity="City",operation_name="InsCity",le="1000"} 16
tdg_graphql_mutation_time_bucket{alias="core_1",schema="default",entity="City",operation_name="InsCity",le="+Inf"} 16
tdg_graphql_mutation_time_sum{alias="core_1",schema="default",entity="City",operation_name="InsCity"} 34
tdg_graphql_mutation_time_count{alias="core_1",schema="default",entity="City",operation_name="InsCity"} 16

# HELP tdg_graphql_query_fail Graphql query fail count
# TYPE tdg_graphql_query_fail counter
tdg_graphql_query_fail{alias="core_1",schema="default",entity="City",operation_name="GetCity"} 2

# HELP tdg_graphql_mutation_fail Graphql mutation fail count
# TYPE tdg_graphql_mutation_fail counter
tdg_graphql_mutation_fail{alias="core_1",schema="default",entity="City",operation_name="InsCity"} 4

2.15.1.2. Метрики системного администрирования

tdg_cluster_clock_delta{alias,uuid} — разница во времени между локальными часами (часы инстанса, на котором собираются метрики) и часами другого инстанса в кластере, секунды. Положительное значение указывает на то, что часы другого инстанса опережают локальные. Отрицательное значение — на обратную ситуацию. Тип метрики: gauge.

Тэги метрики:

  • uuid — UUID инстанса, разницу во времени с которым определяет метрика;
  • alias — имя инстанса, на котором собираются метрики.

В конфигурации системы при помощи параметра clock_delta_threshold_sec можно задать максимально допустимую рассинхронизацию по времени. При превышении этого порога в журнал будет выведено сообщение об ошибке. Подробнее см. в описании параметра

Если несколько инстансов расположены на одном физическом сервере, разница во времени между ними, как правило, будет очень небольшой, т.к. каждый из этих инстансов «смотрит» на одни и те же часы — часы физической машины. Разницу во времени в этом случае можно считать сетевой погрешностью. Однако если инстансы расположены на нескольких физических серверах, метрика может диагностировать ситуацию, когда между инстансами этих серверов временная разница значительная, что может указывать или на рассинхронизацию часов разных физических серверов, или на сетевые проблемы.

Пример ниже иллюстрирует подобную ситуацию: в кластере развернуты 7 инстансов (см. топологию кластера); мы собираем метрики на инстансе с именем «core_1», у которого большая временная дельта одного порядка с тремя инстансами, развернутыми на другой физической машине.

Пример:

# HELP tdg_cluster_clock_delta The time difference in cluster
# TYPE tdg_cluster_clock_delta gauge
tdg_cluster_clock_delta{uuid="1ab7778c-26f6-4424-b8cd-1daf1d93fc70",alias="core_1"} -0.0001205
tdg_cluster_clock_delta{uuid="76fb5acd-65fd-43f0-8d57-6622aafdc5aa",alias="core_1"} 3.5e-05
tdg_cluster_clock_delta{uuid="a87d0c8c-aced-4c5c-9880-a23cd4edbc01",alias="core_1"} -12.851604
tdg_cluster_clock_delta{uuid="401415dd-4d4d-4c29-9342-fb3efbee5d12",alias="core_1"} 4.75e-05
tdg_cluster_clock_delta{uuid="2e4bb162-d2e7-43f5-9ca9-530c60b2712d",alias="core_1"} 0.00029
tdg_cluster_clock_delta{uuid="b82e8c4f-b522-414c-9e51-a850db7302b1",alias="core_1"} -12.8515295
tdg_cluster_clock_delta{uuid="7acc17ad-aa8a-4954-b13f-3938964c9f41",alias="core_1"} -12.850967

2.15.2. Метрики Tarantool

Описание метрик для мониторинга работы инстансов Tarantool можно прочитать в соответствующем разделе документации по Tarantool.