Skip to content

Commit 72f47ad

Browse files
committed
Дока по метрикам
1 parent e6e75f1 commit 72f47ad

1 file changed

Lines changed: 152 additions & 78 deletions

File tree

docs/concepts/monitoring.md

Lines changed: 152 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -29,33 +29,60 @@
2929
└────────────────────────────────────────────────┘
3030
```
3131

32-
## Способы экспорта метрик
32+
## Подключение мониторинга
3333

34-
### Pull-модель (рекомендуется)
34+
### Шаг 1. Назначить роли пользователям
35+
36+
Для работы мониторинга необходимо назначить роли пользователям 1С:
37+
38+
| Роль | Кому назначать | Что даёт |
39+
|------|----------------|----------|
40+
| `PDE: Получение метрик` | Сервисному пользователю, от имени которого Prometheus обращается к HTTP-сервису | Доступ к эндпоинту `GET /prometheus/polling`; чтение/запись регистра `пэмСостояниеМетрик` |
41+
| `PDE: Настройка метрик` | Администратору, настраивающему метрики через интерфейс 1С | Полный доступ к справочнику `пэмМетрики`; управление константами Pushgateway; просмотр формы настроек |
42+
| `Администрирование интеграции` | Администратору подсистемы (опционально) | Включает расширенные права на константы Pushgateway, отчёт по состоянию метрик. Не включает справочник метрик и HTTP-сервис — они в выделенных ролях выше |
43+
44+
::: tip Минимальная конфигурация
45+
Для базового мониторинга через Prometheus достаточно **одного** сервисного пользователя с ролью `PDE: Получение метрик`.
46+
:::
47+
48+
### Шаг 2. Настроить регламентное задание
49+
50+
Метрики рассчитываются регламентным заданием `пэмВыполнитьРасчетМетрик`:
51+
52+
| Параметр | Рекомендуемое значение |
53+
|----------|------------------------|
54+
| Расписание | Каждые 30–60 секунд |
55+
| Многопоточность | Включить (`пэмМногопоточныйРасчетМетрик = Истина`) |
56+
57+
### Шаг 3. Настроить Prometheus
58+
59+
#### Pull-модель (рекомендуется)
3560

3661
HTTP-сервис для Prometheus scraping:
3762

3863
```
39-
GET /prometheus/polling
64+
GET /<имя_базы>/hs/prometheus/polling
4065
Authorization: Basic <credentials>
4166
```
4267

43-
**Пример ответа:**
44-
45-
```prometheus
46-
# HELP pde_queue_length Количество сообщений в очередях
47-
# TYPE pde_queue_length gauge
48-
pde_queue_length{queue="incoming"} 42
49-
pde_queue_length{queue="outgoing"} 156
50-
pde_queue_length{queue="distribution"} 23
68+
Конфигурация Prometheus:
5169

52-
# HELP pde_error_count Количество сообщений с ошибками
53-
# TYPE pde_error_count gauge
54-
pde_error_count{flow_name="orders_export",error_type="formation_error",direction="outgoing"} 3
55-
pde_error_count{flow_name="prices_import",error_type="processing_error",direction="incoming"} 1
70+
```yaml
71+
scrape_configs:
72+
- job_name: '1c_integration'
73+
scrape_interval: 30s
74+
scrape_timeout: 10s
75+
metrics_path: /<имя_базы>/hs/prometheus/polling
76+
basic_auth:
77+
username: prometheus_user
78+
password: secret
79+
static_configs:
80+
- targets: ['1c-server.local:80']
81+
labels:
82+
instance: 'prod-erp'
5683
```
5784
58-
### Push-модель (Pushgateway)
85+
#### Push-модель (Pushgateway)
5986
6087
Для сред без прямого доступа к 1С можно настроить отправку метрик на Pushgateway:
6188
@@ -66,14 +93,19 @@ pde_error_count{flow_name="prices_import",error_type="processing_error",directio
6693
| `пэмПортСервераPushgateway` | Порт (по умолчанию `9091`) |
6794
| `пэмПутьНаСервереPushgateway` | Путь (по умолчанию `/metrics/job/1c_integration`) |
6895

69-
## Справочник метрик
96+
## Перечень метрик {#metric-reference}
97+
98+
Все метрики имеют префикс `pde_` (Prometheus Data Exporter). Всего 11 встроенных метрик.
7099

71100
### Метрики очередей
72101

73102
#### pde_queue_length
74103

75-
**Тип:** Gauge
76-
**Описание:** Текущий размер очередей сообщений (количество ожидающих обработки)
104+
| | |
105+
|-|-|
106+
| **Тип** | Gauge |
107+
| **Описание** | Текущий размер очередей сообщений (количество ожидающих обработки) |
108+
| **Период агрегации** | текущее состояние (моментальный снимок) |
77109

78110
| Лейбл | Описание | Значения |
79111
|-------|----------|----------|
@@ -94,8 +126,11 @@ pde_error_count{flow_name="prices_import",error_type="processing_error",directio
94126

95127
#### pde_oldest_pending_age_seconds
96128

97-
**Тип:** Gauge
98-
**Описание:** Возраст старейшего необработанного сообщения в секундах. Индикатор «застрявших» сообщений.
129+
| | |
130+
|-|-|
131+
| **Тип** | Gauge |
132+
| **Описание** | Возраст старейшего необработанного сообщения в секундах. Индикатор «застрявших» сообщений |
133+
| **Период агрегации** | текущее состояние |
99134

100135
| Лейбл | Описание | Значения |
101136
|-------|----------|----------|
@@ -118,8 +153,11 @@ pde_error_count{flow_name="prices_import",error_type="processing_error",directio
118153

119154
#### pde_error_count
120155

121-
**Тип:** Gauge
122-
**Описание:** Количество сообщений в состоянии ошибки
156+
| | |
157+
|-|-|
158+
| **Тип** | Gauge |
159+
| **Описание** | Количество сообщений в состоянии ошибки |
160+
| **Источник** | Регистры `инт_ТекущийСтатусИсходящихСообщений`, `инт_ТекущийСтатусВходящихСообщений` |
123161

124162
| Лейбл | Описание | Значения |
125163
|-------|----------|----------|
@@ -136,8 +174,10 @@ pde_error_count{flow_name="prices_import",error_type="processing_error",directio
136174

137175
#### pde_retry_count
138176

139-
**Тип:** Gauge
140-
**Описание:** Количество сообщений с повторными попытками обработки
177+
| | |
178+
|-|-|
179+
| **Тип** | Gauge |
180+
| **Описание** | Количество сообщений с повторными попытками обработки |
141181

142182
| Лейбл | Описание | Значения |
143183
|-------|----------|----------|
@@ -154,52 +194,83 @@ pde_error_count{flow_name="prices_import",error_type="processing_error",directio
154194

155195
#### pde_formation_duration_seconds
156196

157-
**Тип:** Gauge
158-
**Описание:** Время выполнения обработчика формирования сообщений
197+
| | |
198+
|-|-|
199+
| **Тип** | Gauge |
200+
| **Описание** | Время выполнения обработчика формирования исходящих сообщений |
201+
| **Источник** | `инт_СтатистикаОбработкиСообщений` (`ТипОперации = Формирование`) |
202+
| **Период агрегации** | последние 5 минут |
159203

160204
| Лейбл | Описание | Значения |
161205
|-------|----------|----------|
162206
| `flow_name` | Наименование потока данных | Строка |
163207
| `aggregation` | Тип агрегации | `avg`, `max` |
164208

165-
**Период агрегации:** последние 5 минут
166-
167209
---
168210

169211
#### pde_send_duration_seconds
170212

171-
**Тип:** Gauge
172-
**Описание:** Время отправки сообщений подписчикам (включая сетевые задержки)
213+
| | |
214+
|-|-|
215+
| **Тип** | Gauge |
216+
| **Описание** | Время отправки сообщений подписчикам (включая сетевые задержки) |
217+
| **Источник** | `инт_СтатистикаОбработкиСообщений` (`ТипОперации = Отправка`) |
218+
| **Период агрегации** | последние 5 минут |
173219

174220
| Лейбл | Описание | Значения |
175221
|-------|----------|----------|
176222
| `flow_name` | Наименование потока данных | Строка |
177223
| `aggregation` | Тип агрегации | `avg`, `max` |
178224

179-
**Период агрегации:** последние 5 минут
180-
181225
---
182226

183227
#### pde_incoming_duration_seconds
184228

185-
**Тип:** Gauge
186-
**Описание:** Время обработки входящих сообщений
229+
| | |
230+
|-|-|
231+
| **Тип** | Gauge |
232+
| **Описание** | Время обработки входящих сообщений (асинхронных и синхронных) |
233+
| **Источник** | `инт_СтатистикаОбработкиСообщений` (`ТипОперации = ОбработкаВходящего`) |
234+
| **Период агрегации** | последние 5 минут |
235+
236+
| Лейбл | Описание | Значения |
237+
|-------|----------|----------|
238+
| `flow_name` | Наименование потока данных | Строка |
239+
| `aggregation` | Тип агрегации | `avg`, `max` |
240+
241+
---
242+
243+
#### pde_sync_incoming_duration_seconds
244+
245+
| | |
246+
|-|-|
247+
| **Тип** | Gauge |
248+
| **Описание** | Время обработки **синхронных** входящих сообщений (потоки с `АсинхроннаяОбработка = Ложь`) |
249+
| **Источник** | `инт_СтатистикаОбработкиСообщений` (`ТипОперации = ОбработкаВходящего`, `ПотокДанных.АсинхроннаяОбработка = Ложь`) |
250+
| **Период агрегации** | последние 5 минут |
187251

188252
| Лейбл | Описание | Значения |
189253
|-------|----------|----------|
190254
| `flow_name` | Наименование потока данных | Строка |
191255
| `aggregation` | Тип агрегации | `avg`, `max` |
256+
| `status` | Результат обработки | `success`, `error` |
192257

193-
**Период агрегации:** последние 5 минут
258+
::: tip Зачем отдельная метрика
259+
`pde_incoming_duration_seconds` показывает **все** входящие (и асинхронные, и синхронные) без разбивки по статусу. `pde_sync_incoming_duration_seconds` выделяет именно синхронный путь с детализацией по `success`/`error`, что позволяет отслеживать качество обработки вне очереди.
260+
:::
194261

195262
---
196263

197264
### Метрики пропускной способности
198265

199266
#### pde_messages_per_minute
200267

201-
**Тип:** Gauge
202-
**Описание:** Количество обработанных сообщений за последнюю минуту
268+
| | |
269+
|-|-|
270+
| **Тип** | Gauge |
271+
| **Описание** | Количество обработанных сообщений за последнюю минуту |
272+
| **Источник** | `инт_СтатистикаОбработкиСообщений` (все типы операций) |
273+
| **Период агрегации** | последние 60 секунд |
203274

204275
| Лейбл | Описание | Значения |
205276
|-------|----------|----------|
@@ -223,49 +294,54 @@ pde_messages_per_minute{status="error"} /
223294

224295
#### pde_last_refresh
225296

226-
**Тип:** Gauge
227-
**Описание:** Unix timestamp последнего расчёта метрик (epoch seconds)
297+
| | |
298+
|-|-|
299+
| **Тип** | Counter |
300+
| **Описание** | Unix timestamp последнего расчёта метрик (epoch seconds) |
228301

229-
**Применение:** Мониторинг работоспособности самой системы сбора метрик
302+
**Применение:** мониторинг работоспособности самой системы сбора метрик.
230303

231304
---
232305

233306
#### pde_scrape_duration
234307

235-
**Тип:** Gauge
236-
**Описание:** Время расчёта каждой метрики в миллисекундах
308+
| | |
309+
|-|-|
310+
| **Тип** | Gauge |
311+
| **Описание** | Время расчёта каждой метрики в миллисекундах |
237312

238313
| Лейбл | Описание |
239314
|-------|----------|
240315
| `label` | Код метрики |
241316

242-
## Настройка сбора метрик
243-
244-
### Регламентное задание
245-
246-
Метрики рассчитываются регламентным заданием `пэмВыполнитьРасчетМетрик`:
247-
248-
| Параметр | Рекомендуемое значение |
249-
|----------|------------------------|
250-
| Расписание | Каждые 30-60 секунд |
251-
| Многопоточность | Включить (`пэмМногопоточныйРасчетМетрик = Истина`) |
317+
---
252318

253-
### Роли
319+
### Сводная таблица метрик
254320

255-
| Роль | Назначение |
256-
|------|------------|
257-
| `пэмПолучениеМетрик` | Доступ к HTTP-сервису `/prometheus/polling` |
258-
| `пэмНастройкаМетрик` | Настройка справочника метрик и констант |
321+
| Метрика | Тип | Источник | Лейблы |
322+
|---------|-----|----------|--------|
323+
| `pde_queue_length` | Gauge | Статусные регистры | `queue` |
324+
| `pde_oldest_pending_age_seconds` | Gauge | Статусные регистры | `queue` |
325+
| `pde_error_count` | Gauge | Статусные регистры | `flow_name`, `error_type`, `direction` |
326+
| `pde_retry_count` | Gauge | Статусные регистры | `flow_name`, `direction` |
327+
| `pde_formation_duration_seconds` | Gauge | Статистика | `flow_name`, `aggregation` |
328+
| `pde_send_duration_seconds` | Gauge | Статистика | `flow_name`, `aggregation` |
329+
| `pde_incoming_duration_seconds` | Gauge | Статистика | `flow_name`, `aggregation` |
330+
| `pde_sync_incoming_duration_seconds` | Gauge | Статистика | `flow_name`, `aggregation`, `status` |
331+
| `pde_messages_per_minute` | Gauge | Статистика | `flow_name`, `operation`, `status` |
332+
| `pde_last_refresh` | Counter | Служебная | — |
333+
| `pde_scrape_duration` | Gauge | Служебная | `label` |
259334

260-
### Добавление пользовательских метрик
335+
## Добавление пользовательских метрик
261336

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

264-
1. Создайте макет `CommonTemplate` с алгоритмом расчёта
339+
1. Создайте общий макет (`CommonTemplate`) с алгоритмом расчёта
265340
2. Добавьте элемент справочника с настройками:
266341
- **Код** — имя метрики в Prometheus (например, `my_custom_metric`)
267342
- **Тип метрики** — `Counter` или `Gauge`
268-
- **Алгоритм** — ссылка на макет
343+
- **Метод получения** — `Pull` (HTTP scrape) или `Push` (Pushgateway)
344+
- **Алгоритм** — текст BSL-кода из макета
269345

270346
**Формат алгоритма:**
271347

@@ -284,23 +360,6 @@ pde_messages_per_minute{status="error"} /
284360

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

287-
### Prometheus scrape config
288-
289-
```yaml
290-
scrape_configs:
291-
- job_name: '1c_integration'
292-
scrape_interval: 30s
293-
scrape_timeout: 10s
294-
metrics_path: /integration_base/hs/prometheus/polling
295-
basic_auth:
296-
username: prometheus_user
297-
password: secret
298-
static_configs:
299-
- targets: ['1c-server.local:80']
300-
labels:
301-
instance: 'prod-erp'
302-
```
303-
304363
### Рекомендуемые панели Grafana
305364

306365
| Панель | Метрики | Тип визуализации |
@@ -309,6 +368,7 @@ scrape_configs:
309368
| Ошибки по потокам | `pde_error_count` | Bar chart |
310369
| Пропускная способность | `pde_messages_per_minute` | Time series |
311370
| Время обработки | `pde_*_duration_seconds` | Heatmap / Time series |
371+
| Синхронные входящие | `pde_sync_incoming_duration_seconds` | Time series |
312372
| Застрявшие сообщения | `pde_oldest_pending_age_seconds` | Gauge / Alert list |
313373
| Повторные попытки | `pde_retry_count` | Stat / Table |
314374

@@ -335,6 +395,12 @@ scrape_configs:
335395
"targets": [
336396
{ "expr": "sum(pde_error_count) by (error_type)" }
337397
]
398+
},
399+
{
400+
"title": "Sync Incoming Duration",
401+
"targets": [
402+
{ "expr": "pde_sync_incoming_duration_seconds{aggregation=\"avg\"}", "legendFormat": "{{ flow_name }} ({{ status }})" }
403+
]
338404
}
339405
]
340406
}
@@ -383,6 +449,14 @@ groups:
383449
severity: warning
384450
annotations:
385451
summary: "Медленная обработка в потоке {{ $labels.flow_name }}"
452+
453+
- alert: SyncIncomingErrors
454+
expr: pde_sync_incoming_duration_seconds{status="error"} > 0
455+
for: 1m
456+
labels:
457+
severity: warning
458+
annotations:
459+
summary: "Ошибки синхронной обработки в потоке {{ $labels.flow_name }}"
386460
```
387461

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

0 commit comments

Comments
 (0)