Мониторинг и метрики
Подсистема интеграции предоставляет встроенную поддержку экспорта метрик в формате Prometheus для мониторинга состояния очередей, производительности и обнаружения проблем.
Архитектура мониторинга
┌───────────────────────────────────────────────────────────────────┐
│ 1С:Предприятие │
│ ┌────────────────┐ ┌──────────────────┐ ┌───────────────┐ │
│ │ Регламентное │───▶│ Справочник │───▶│ Регистр │ │
│ │ задание │ │ пэмМетрики │ │ пэмСостояние │ │
│ │ пэм_ВыполнитьР │ │ (алгоритмы) │ │ Метрик │ │
│ │ асчетМетрик │ └──────────────────┘ └───────┬───────┘ │
│ └────────────────┘ │ │
│ ▼ │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ HTTP-сервис /prometheus/polling │ │
│ └────────────────────────────────────────────────────────────┘ │
└────────────────────────────────────────────────────────────────|──┘
│
┌────────────────────────────────────────────┼──┐
│ ▼ │
│ ┌──────────────┐ ┌──────────────────────┐ │
│ │ Prometheus │───▶│ Grafana │ │
│ │ (scrape) │ │ (dashboards) │ │
│ └──────────────┘ └──────────────────────┘ │
│ Мониторинг │
└────────────────────────────────────────────────┘Подключение мониторинга
Шаг 1. Назначить роли пользователям
Для работы мониторинга необходимо назначить роли пользователям 1С:
| Роль | Кому назначать | Что даёт |
|---|---|---|
PDE: Получение метрик | Сервисному пользователю, от имени которого Prometheus обращается к HTTP-сервису | Доступ к эндпоинту GET /prometheus/polling; чтение/запись регистра пэмСостояниеМетрик |
PDE: Настройка метрик | Администратору, настраивающему метрики через интерфейс 1С | Полный доступ к справочнику пэмМетрики; управление константами Pushgateway; просмотр формы настроек |
Администрирование интеграции | Администратору подсистемы (опционально) | Включает расширенные права на константы Pushgateway, отчёт по состоянию метрик. Не включает справочник метрик и HTTP-сервис — они в выделенных ролях выше |
Минимальная конфигурация
Для базового мониторинга через Prometheus достаточно одного сервисного пользователя с ролью PDE: Получение метрик.
Шаг 2. Настроить регламентное задание
Метрики рассчитываются регламентным заданием пэмВыполнитьРасчетМетрик:
| Параметр | Рекомендуемое значение |
|---|---|
| Расписание | Каждые 30–60 секунд |
| Многопоточность | Включить (пэмМногопоточныйРасчетМетрик = Истина) |
Шаг 3. Настроить Prometheus
Pull-модель (рекомендуется)
HTTP-сервис для Prometheus scraping:
GET /<имя_базы>/hs/prometheus/polling
Authorization: Basic <credentials>Конфигурация Prometheus:
scrape_configs:
- job_name: '1c_integration'
scrape_interval: 30s
scrape_timeout: 10s
metrics_path: /<имя_базы>/hs/prometheus/polling
basic_auth:
username: prometheus_user
password: secret
static_configs:
- targets: ['1c-server.local:80']
labels:
instance: 'prod-erp'Push-модель (Pushgateway)
Для сред без прямого доступа к 1С можно настроить отправку метрик на Pushgateway:
| Константа | Описание |
|---|---|
пэмИспользоватьPushgateway | Включить push-режим |
пэмАдресСервераPushgateway | Адрес сервера (например, pushgateway.local) |
пэмПортСервераPushgateway | Порт (по умолчанию 9091) |
пэмПутьНаСервереPushgateway | Путь (по умолчанию /metrics/job/1c_integration) |
Перечень метрик
Все метрики имеют префикс pde_ (Prometheus Data Exporter). Всего 11 встроенных метрик.
Метрики очередей
pde_queue_length
| Тип | Gauge |
| Описание | Текущий размер очередей сообщений (количество ожидающих обработки) |
| Период агрегации | текущее состояние (моментальный снимок) |
| Лейбл | Описание | Значения |
|---|---|---|
queue | Тип очереди | incoming, outgoing, distribution |
Алерты:
- alert: QueueBacklog
expr: pde_queue_length > 1000
for: 5m
labels:
severity: warning
annotations:
summary: "Очередь {{ $labels.queue }} растёт"pde_oldest_pending_age_seconds
| Тип | Gauge |
| Описание | Возраст старейшего необработанного сообщения в секундах. Индикатор «застрявших» сообщений |
| Период агрегации | текущее состояние |
| Лейбл | Описание | Значения |
|---|---|---|
queue | Тип очереди | incoming, outgoing, distribution |
Алерты:
- alert: StuckMessages
expr: pde_oldest_pending_age_seconds > 3600
for: 5m
labels:
severity: critical
annotations:
summary: "Сообщения застряли в очереди {{ $labels.queue }}"Метрики ошибок
pde_error_count
| Тип | Gauge |
| Описание | Количество сообщений в состоянии ошибки |
| Источник | Регистры инт_ТекущийСтатусИсходящихСообщений, инт_ТекущийСтатусВходящихСообщений |
| Лейбл | Описание | Значения |
|---|---|---|
flow_name | Наименование потока данных | Строка |
error_type | Тип ошибки | formation_error, send_error, processing_error |
direction | Направление | incoming, outgoing |
Типы ошибок:
formation_error— ошибка при формировании (исполнении обработчика)send_error— ошибка отправки подписчикуprocessing_error— ошибка обработки входящего сообщения
pde_retry_count
| Тип | Gauge |
| Описание | Количество сообщений с повторными попытками обработки |
| Лейбл | Описание | Значения |
|---|---|---|
flow_name | Наименование потока данных | Строка |
direction | Направление | incoming, outgoing |
Применение
Высокие значения могут указывать на нестабильные внешние сервисы или ошибки в логике обработчиков.
Метрики производительности
pde_formation_duration_seconds
| Тип | Gauge |
| Описание | Время выполнения обработчика формирования исходящих сообщений |
| Источник | инт_СтатистикаОбработкиСообщений (ТипОперации = Формирование) |
| Период агрегации | последние 5 минут |
| Лейбл | Описание | Значения |
|---|---|---|
flow_name | Наименование потока данных | Строка |
aggregation | Тип агрегации | avg, max |
pde_send_duration_seconds
| Тип | Gauge |
| Описание | Время отправки сообщений подписчикам (включая сетевые задержки) |
| Источник | инт_СтатистикаОбработкиСообщений (ТипОперации = Отправка) |
| Период агрегации | последние 5 минут |
| Лейбл | Описание | Значения |
|---|---|---|
flow_name | Наименование потока данных | Строка |
aggregation | Тип агрегации | avg, max |
pde_incoming_duration_seconds
| Тип | Gauge |
| Описание | Время обработки входящих сообщений (асинхронных и синхронных) |
| Источник | инт_СтатистикаОбработкиСообщений (ТипОперации = ОбработкаВходящего) |
| Период агрегации | последние 5 минут |
| Лейбл | Описание | Значения |
|---|---|---|
flow_name | Наименование потока данных | Строка |
aggregation | Тип агрегации | avg, max |
pde_sync_incoming_duration_seconds
| Тип | Gauge |
| Описание | Время обработки синхронных входящих сообщений (потоки с АсинхроннаяОбработка = Ложь) |
| Источник | инт_СтатистикаОбработкиСообщений (ТипОперации = ОбработкаВходящего, ПотокДанных.АсинхроннаяОбработка = Ложь) |
| Период агрегации | последние 5 минут |
| Лейбл | Описание | Значения |
|---|---|---|
flow_name | Наименование потока данных | Строка |
aggregation | Тип агрегации | avg, max |
status | Результат обработки | success, error |
Зачем отдельная метрика
pde_incoming_duration_seconds показывает все входящие (и асинхронные, и синхронные) без разбивки по статусу. pde_sync_incoming_duration_seconds выделяет именно синхронный путь с детализацией по success/error, что позволяет отслеживать качество обработки вне очереди.
Метрики пропускной способности
pde_messages_per_minute
| Тип | Gauge |
| Описание | Количество обработанных сообщений за последнюю минуту |
| Источник | инт_СтатистикаОбработкиСообщений (все типы операций) |
| Период агрегации | последние 60 секунд |
| Лейбл | Описание | Значения |
|---|---|---|
flow_name | Наименование потока данных | Строка |
operation | Тип операции | formation, send, incoming |
status | Результат | success, error |
Пример PromQL:
# Общая пропускная способность
sum(pde_messages_per_minute{status="success"}) by (operation)
# Error rate по потокам
pde_messages_per_minute{status="error"} /
(pde_messages_per_minute{status="error"} + pde_messages_per_minute{status="success"})Служебные метрики
pde_last_refresh
| Тип | Counter |
| Описание | Unix timestamp последнего расчёта метрик (epoch seconds) |
Применение: мониторинг работоспособности самой системы сбора метрик.
pde_scrape_duration
| Тип | Gauge |
| Описание | Время расчёта каждой метрики в миллисекундах |
| Лейбл | Описание |
|---|---|
label | Код метрики |
Сводная таблица метрик
| Метрика | Тип | Источник | Лейблы |
|---|---|---|---|
pde_queue_length | Gauge | Статусные регистры | queue |
pde_oldest_pending_age_seconds | Gauge | Статусные регистры | queue |
pde_error_count | Gauge | Статусные регистры | flow_name, error_type, direction |
pde_retry_count | Gauge | Статусные регистры | flow_name, direction |
pde_formation_duration_seconds | Gauge | Статистика | flow_name, aggregation |
pde_send_duration_seconds | Gauge | Статистика | flow_name, aggregation |
pde_incoming_duration_seconds | Gauge | Статистика | flow_name, aggregation |
pde_sync_incoming_duration_seconds | Gauge | Статистика | flow_name, aggregation, status |
pde_messages_per_minute | Gauge | Статистика | flow_name, operation, status |
pde_last_refresh | Counter | Служебная | — |
pde_scrape_duration | Gauge | Служебная | label |
Добавление пользовательских метрик
Метрики хранятся в справочнике пэмМетрики. Для добавления новой метрики:
- Создайте общий макет (
CommonTemplate) с алгоритмом расчёта - Добавьте элемент справочника с настройками:
- Код — имя метрики в Prometheus (например,
my_custom_metric) - Тип метрики —
CounterилиGauge - Метод получения —
Pull(HTTP scrape) илиPush(Pushgateway) - Алгоритм — текст BSL-кода из макета
- Код — имя метрики в Prometheus (например,
Формат алгоритма:
// Результат должен быть в переменной ТаблицаЗначений
// Колонки: label1, label2, ..., value (число)
ТаблицаЗначений = Новый ТаблицаЗначений;
ТаблицаЗначений.Колонки.Добавить("my_label", Новый ОписаниеТипов("Строка"));
ТаблицаЗначений.Колонки.Добавить("value", Новый ОписаниеТипов("Число"));
Запрос = Новый Запрос;
Запрос.Текст = "...";
ТаблицаЗначений = Запрос.Выполнить().Выгрузить();Интеграция с Grafana
Рекомендуемые панели Grafana
| Панель | Метрики | Тип визуализации |
|---|---|---|
| Размер очередей | pde_queue_length | Time series / Stat |
| Ошибки по потокам | pde_error_count | Bar chart |
| Пропускная способность | pde_messages_per_minute | Time series |
| Время обработки | pde_*_duration_seconds | Heatmap / Time series |
| Синхронные входящие | pde_sync_incoming_duration_seconds | Time series |
| Застрявшие сообщения | pde_oldest_pending_age_seconds | Gauge / Alert list |
| Повторные попытки | pde_retry_count | Stat / Table |
Пример дашборда
{
"title": "1C Integration Subsystem",
"panels": [
{
"title": "Queue Length",
"targets": [
{ "expr": "pde_queue_length", "legendFormat": "{{ queue }}" }
]
},
{
"title": "Messages/min",
"targets": [
{ "expr": "sum(pde_messages_per_minute{status=\"success\"}) by (operation)" }
]
},
{
"title": "Error Rate",
"targets": [
{ "expr": "sum(pde_error_count) by (error_type)" }
]
},
{
"title": "Sync Incoming Duration",
"targets": [
{ "expr": "pde_sync_incoming_duration_seconds{aggregation=\"avg\"}", "legendFormat": "{{ flow_name }} ({{ status }})" }
]
}
]
}Рекомендации по алертам
Критические
groups:
- name: integration_critical
rules:
- alert: IntegrationQueueOverflow
expr: pde_queue_length{queue="outgoing"} > 5000
for: 10m
labels:
severity: critical
annotations:
summary: "Очередь исходящих переполнена"
- alert: IntegrationStuckMessages
expr: pde_oldest_pending_age_seconds > 7200
for: 5m
labels:
severity: critical
annotations:
summary: "Сообщения не обрабатываются более 2 часов"Предупреждения
- alert: IntegrationHighErrorRate
expr: sum(pde_error_count) > 100
for: 5m
labels:
severity: warning
annotations:
summary: "Высокий уровень ошибок интеграции"
- alert: IntegrationSlowProcessing
expr: pde_formation_duration_seconds{aggregation="avg"} > 10
for: 5m
labels:
severity: warning
annotations:
summary: "Медленная обработка в потоке {{ $labels.flow_name }}"
- alert: SyncIncomingErrors
expr: pde_sync_incoming_duration_seconds{status="error"} > 0
for: 1m
labels:
severity: warning
annotations:
summary: "Ошибки синхронной обработки в потоке {{ $labels.flow_name }}"Диагностика через журнал регистрации
Помимо метрик, подсистема пишет события в журнал регистрации:
| Событие | Описание |
|---|---|
ПодсистемаИнтеграции.ОчередьИсходящихСообщений | Формирование и отправка |
ПодсистемаИнтеграции.ОбработкаВходящихСообщений | Обработка входящих |
ПодсистемаИнтеграции.МенеджерПотоковОбработки* | Работа менеджеров потоков |
Связанные материалы
- Очереди сообщений — как работают очереди
- Многопоточность — параллельная обработка
- Обработка входящих — настройка входящих потоков