Перейти к основному содержимому
Версия: 6.0

Режим обслуживания

Описание

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

Функция используется во время плановых и внеплановых технических работ, например:

  • миграции данных
  • обновления инфраструктуры
  • перезапуска сервисов
  • технического обслуживания серверов
  • обновления сетевого оборудования
  • проведения регламентных работ

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

При этом:

  • исходные значения метрик продолжают рассчитываться
  • история состояний не изменяется
  • совпавшие измерения получают признак is_in_maintenance = true
  • такие измерения исключаются из расчета сервисных метрик и состояния сервисов

Статусы окна обслуживания

Окно обслуживания может находиться в одном из следующих состояний:

СтатусОписание
plannedОкно создано и ожидает наступления времени начала обслуживания (start_at)
activeОбслуживание активно и применяется к совпавшим измерениям
completedОбслуживание завершено автоматически по end_at или вручную пользователем
cancelledОкно обслуживания было отменено до момента начала

CRUD операции

Создание окна обслуживания

Создает новое окно обслуживания для одной или нескольких глобальных метрик.

Запрос

Пример запроса
POST _core/rsm/maintenance
{
"name": "Миграция данных PostgreSQL",
"groups": [
{
"name": "Основной кластер БД",
"elements": [
{
"name": "host_name",
"values": [
"db-node-01",
"db-node-02"
]
}
]
}
],
"metric_ids": [
"CycdCp0BvPpotMR2-UhX"
],
"start_at": "2026-04-16T17:05:00.000Z",
"end_at": "2026-04-16T19:50:00.000Z"
}

Параметры запроса

ПолеТипОбязательноеОписание
namestringДаНазвание окна обслуживания. Не должно быть пустым
groupsarrayДаГруппы фильтров для определения охвата. Должен быть указан минимум один элемент
groups[].namestringДаНазвание группы фильтров. Не должно быть пустым
groups[].elementsarrayДаУсловия внутри группы. Должен быть указан минимум один элемент
groups[].elements[].namestringДаНазвание измерения. Не должно быть пустым
groups[].elements[].valuesarray[string]ДаЗначения измерения. Должен быть указан минимум один элемент
metric_idsarray[string]ДаСписок глобальных метрик. Должна быть выбрана минимум одна метрика
start_atdatetimeДаВремя начала обслуживания
end_atdatetimeДаВремя завершения обслуживания. Значение должно быть больше start_at
Логика работы фильтров

Инцидент попадает в обслуживание, если полностью соответствует хотя бы одной группе фильтров. Для соответствия группе должны совпасть все условия этой группы одновременно.

Обновление окна обслуживания

Изменяет существующее окно обслуживания.

Запрос

Пример запроса на обновление
PUT _core/rsm/maintenance/{id}
{
"name": "Миграция данных PostgreSQL",
"groups": [
{
"name": "Основной кластер БД",
"elements": [
{
"name": "host_name",
"values": [
"db-node-02",
"db-node-03"
]
}
]
}
],
"metric_ids": [
"CycdCp0BvPpotMR2-UhX"
],
"start_at": "2026-04-16T17:05:00.000Z",
"end_at": "2026-04-16T19:50:00.000Z"
}

Параметры запроса

Используются те же поля, что и при создании окна обслуживания.

Получение списка окон обслуживания

Возвращает все созданные окна обслуживания.

Запрос

GET _core/rsm/maintenance/

Получение конкретного окна обслуживания

Возвращает информацию по конкретному окну обслуживания.

Запрос

GET _core/rsm/maintenance/{id}

Пример ответа

Окно обслуживания
{
"_meta": {
"id": "c8Evq50BlXbjsgPFwFTr",
"created": "2026-04-20T13:58:46.774Z",
"updated": "2026-04-20T22:59:00.000Z",
"type": "user",
"tag_ids": [],
"from_system": false
},
"_permissions": {
"read": {
"roles": [],
"users": []
},
"write": {
"roles": [],
"users": []
},
"owner": "admin",
"isWritable": true
},
"name": "Миграция данных PostgreSQL",
"start_at": "2026-04-20T14:00:00.000Z",
"end_at": "2026-04-20T22:59:00.000Z",
"groups": [
{
"name": "Основной кластер БД",
"elements": [
{
"name": "request_origin",
"values": [
"REST"
]
},
{
"name": "host_name",
"values": [
"db-node-03"
]
},
{
"name": "request_type",
"values": [
"SELECT"
]
}
]
},
{
"name": "Резервный кластер БД",
"elements": [
{
"name": "request_origin",
"values": [
"REST"
]
},
{
"name": "host_name",
"values": [
"db-node-04"
]
},
{
"name": "request_type",
"values": [
"SELECT"
]
}
]
}
],
"metric_ids": [
"oeidyJwB_rUm1JmA_Qfz",
"-Ydc9pwBG_16VCpVUhUe"
],
"state": "completed",
"metric_coating_statistic": {
"selected": 2,
"with_coating": 1,
"without_coating": 1
}
}

Основные поля ответа

ПолеОписание
_meta.idИдентификатор окна обслуживания
_meta.createdДата и время создания
_meta.updatedДата и время последнего изменения
_permissions.ownerВладелец окна обслуживания
_permissions.isWritableДоступность редактирования
nameНазвание окна обслуживания
start_atВремя начала обслуживания
end_atВремя завершения обслуживания
groupsГруппы фильтров охвата
groups[].elementsУсловия внутри группы
metric_idsСписок связанных глобальных метрик
stateТекущий статус окна обслуживания
metric_coating_statistic.selectedКоличество выбранных метрик
metric_coating_statistic.with_coatingКоличество метрик с покрытием
metric_coating_statistic.without_coatingКоличество метрик без покрытия

Удаление окна обслуживания

Удаляет окно обслуживания.

Запрос

DELETE _core/rsm/maintenance/{id}

Запросы для отображения и предпросмотра

Проверка покрытия метрик

Используется для предварительной проверки покрытия перед сохранением окна обслуживания.

Позволяет:

  • определить пересечение измерений выбранных метрик
  • получить список совпавших рядов
  • проверить наличие покрытия
  • показать пользователю предварительный результат применения режима обслуживания

Запрос на проверку покрытия

Запрос

Пример запроса
POST _core/rsm/maintenance/intersection
{
"groups": [
{
"name": "Серверы базы данных",
"elements": [
{
"name": "host_name",
"values": [
"db-node-03"
]
}
]
}
],
"metric_ids": [
"oeidyJwB_rUm1JmA_Qfz",
"-Ydc9pwBG_16VCpVUhUe"
]
}

Параметры запроса

ПолеТипОбязательноеОписание
groupsarrayДаГруппы фильтров для проверки покрытия. Должен быть указан минимум один элемент
metric_idsarray[string]ДаВыбранные глобальные метрики. Должна быть выбрана минимум одна метрика

Пример ответа

Результат пересечения
{
"fields": [
"host_name"
],
"metric_coating_statistic": {
"selected": 2,
"with_coating": 1,
"without_coating": 1
},
"metric_entities": [
{
"title": "Время отклика базы данных",
"dimensions": {
"host_name": "db-node-03",
"request_origin": "REST"
},
"trend": [
{
"timestamp": "2026-04-27T09:00:00.000Z",
"value": 200
},
{
"timestamp": "2026-04-27T09:04:00.000Z",
"value": 204
}
]
}
]
}

Основные поля ответа

ПолеОписание
fieldsСписок общих измерений (пересечение измерений выбранных глобальных метрик)
metric_coating_statistic.selectedОбщее количество выбранных метрик
metric_coating_statistic.with_coatingКоличество метрик со статусом С покрытием
metric_coating_statistic.without_coatingКоличество метрик со статусом Без покрытия
metric_entitiesСписок совпавших рядов для метрик с покрытием
metric_entities[].titleНазвание глобальной метрики
metric_entities[].dimensionsЗначения измерений совпавшего ряда
metric_entities[].trendИстория изменения значения метрики
metric_entities[].trend[].timestampВремя фиксации значения
metric_entities[].trend[].valueЗначение метрики в указанный момент

Получение доступных измерений для конкретной метрики

Используется на экране конкретной метрики для отображения:

  • текущих измерений
  • признака обслуживания
  • связанных окон обслуживания
  • списка активных maintenance для строки измерения
GET _core/rsm/maintenance/metric_dimensions/{metric_id}

Пример ответа

Пример доступных измерений конкретной метрики
{
"_meta": {
"id": "-Ydc9pwBG_16VCpVUhUe",
"from_system": false
},
"title": "Время отклика базы данных",
"info": {
"total": 6,
"in_maintenance": 1,
"active": 5
},
"metric_dimensions": [
{
"_meta": {
"metricId": "y8Epq50BlXbjsgPFzE1J",
"dimensionsSearchable": [
"request_type:SELECT",
"host_name:db-node-03",
"request_origin:REST"
],
"entityId": "c9adc9a911dd83cb1cd5489161af123300b87de843796314b6f8a4b384aa1b64",
"entityTitle": "request_type: SELECT; host_name: db-node-03; request_origin: REST",
"dimensions": {
"request_type": "SELECT",
"host_name": "db-node-03",
"request_origin": "REST"
},
"isInMaintenance": true,
"layerId": "7ScdCp0BvPpotMR2-UdW",
"serviceId": "-icdCp0BvPpotMR2-UdX",
"parentMetricId": "-Ydc9pwBG_16VCpVUhUe",
},
"calculation": {
"value": 50,
"severity": "MEDIUM",
"timestamp": "2026-04-27T10:44:00.001Z"
},
"layer_id": "7ScdCp0BvPpotMR2-UdW",
"service_id": "-icdCp0BvPpotMR2-UdX",
"layer_name": "Основной кластер баз данных",
"service_name": "Сервис управления заказами",
"trends": [
{
"timestamp": "2026-04-27T09:44:00.000Z",
"value": 597
},
{
"timestamp": "2026-04-27T09:48:00.000Z",
"value": 588
},
{
"timestamp": "2026-04-27T09:52:00.000Z",
"value": 588
},
{
"timestamp": "2026-04-27T09:56:00.000Z",
"value": 582
},
{
"timestamp": "2026-04-27T10:00:00.000Z",
"value": 579
}
],
"maintenances": [
{
"_meta": {
"id": "F4eHzp0Ba9-VhzmokbfC",
"created": "2026-04-27T10:41:24.432Z",
"updated": "2026-04-27T10:42:00.000Z",
"type": "user",
"tag_ids": [],
"from_system": false
},
"name": "Миграция данных PostgreSQL",
"start_at": "2026-04-27T10:42:00.000Z",
"end_at": "2026-04-27T12:59:00.000Z"
}
]
}
]
}
ПолеОписание
_meta.idИдентификатор глобальной метрики
titleНазвание глобальной метрики
info.totalОбщее количество измерений
info.in_maintenanceКоличество измерений в обслуживании
info.activeКоличество активных измерений
metric_dimensions[].dimensionsНабор измерений строки
metric_dimensions[].calculationТекущее состояние и значение
metric_dimensions[].layer_nameНазвание слоя
metric_dimensions[].service_nameНазвание сервиса
metric_dimensions[].trendsИстория изменения значений
metric_dimensions[].maintenancesАктивные окна обслуживания
maintenances[].nameНазвание maintenance
maintenances[].start_atВремя начала
maintenances[].end_atВремя завершения

Получение доступных измерений для всех метрик

Используется для построения формы выбора условий обслуживания.

GET _core/rsm/maintenance/metric_dimensions/