Skip to content

Мониторинг и метрики

Подсистема интеграции предоставляет встроенную поддержку экспорта метрик в формате 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:

yaml
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

Алерты:

yaml
- 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

Алерты:

yaml
- 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:

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_lengthGaugeСтатусные регистрыqueue
pde_oldest_pending_age_secondsGaugeСтатусные регистрыqueue
pde_error_countGaugeСтатусные регистрыflow_name, error_type, direction
pde_retry_countGaugeСтатусные регистрыflow_name, direction
pde_formation_duration_secondsGaugeСтатистикаflow_name, aggregation
pde_send_duration_secondsGaugeСтатистикаflow_name, aggregation
pde_incoming_duration_secondsGaugeСтатистикаflow_name, aggregation
pde_sync_incoming_duration_secondsGaugeСтатистикаflow_name, aggregation, status
pde_messages_per_minuteGaugeСтатистикаflow_name, operation, status
pde_last_refreshCounterСлужебная
pde_scrape_durationGaugeСлужебнаяlabel

Добавление пользовательских метрик

Метрики хранятся в справочнике пэмМетрики. Для добавления новой метрики:

  1. Создайте общий макет (CommonTemplate) с алгоритмом расчёта
  2. Добавьте элемент справочника с настройками:
    • Код — имя метрики в Prometheus (например, my_custom_metric)
    • Тип метрикиCounter или Gauge
    • Метод полученияPull (HTTP scrape) или Push (Pushgateway)
    • Алгоритм — текст BSL-кода из макета

Формат алгоритма:

bsl
// Результат должен быть в переменной ТаблицаЗначений
// Колонки: label1, label2, ..., value (число)

ТаблицаЗначений = Новый ТаблицаЗначений;
ТаблицаЗначений.Колонки.Добавить("my_label", Новый ОписаниеТипов("Строка"));
ТаблицаЗначений.Колонки.Добавить("value", Новый ОписаниеТипов("Число"));

Запрос = Новый Запрос;
Запрос.Текст = "...";
ТаблицаЗначений = Запрос.Выполнить().Выгрузить();

Интеграция с Grafana

Рекомендуемые панели Grafana

ПанельМетрикиТип визуализации
Размер очередейpde_queue_lengthTime series / Stat
Ошибки по потокамpde_error_countBar chart
Пропускная способностьpde_messages_per_minuteTime series
Время обработкиpde_*_duration_secondsHeatmap / Time series
Синхронные входящиеpde_sync_incoming_duration_secondsTime series
Застрявшие сообщенияpde_oldest_pending_age_secondsGauge / Alert list
Повторные попыткиpde_retry_countStat / Table

Пример дашборда

json
{
  "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 }})" }
      ]
    }
  ]
}

Рекомендации по алертам

Критические

yaml
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 часов"

Предупреждения

yaml
      - 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 }}"

Диагностика через журнал регистрации

Помимо метрик, подсистема пишет события в журнал регистрации:

СобытиеОписание
ПодсистемаИнтеграции.ОчередьИсходящихСообщенийФормирование и отправка
ПодсистемаИнтеграции.ОбработкаВходящихСообщенийОбработка входящих
ПодсистемаИнтеграции.МенеджерПотоковОбработки*Работа менеджеров потоков

Связанные материалы

Документация подсистемы интеграции