База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как вывести APDEX из 1С в Zabbix простыми способами?
- В этой теме 1 ответ, 2 участника, последнее обновление 58 секунд назад сделано
Odin — Одинэсник.
-
АвторЗаписи
-
-
28 сентября 2026 в 8:36 #38738
простые способы вывода APDEX 1C в Zabbix
-
28 сентября 2026 в 8:36 #38739
Самый простой вариант: считать APDEX в 1С, записывать результат в файл, а Zabbix забирать его через Zabbix Agent.
APDEX обычно рассчитывается по формуле:
1С (Код)1APDEX = (Удовлетворительные + Терпимые / 2) / Все запросыГде:
— удовлетворительные: время ответа
<= T;
— терпимые: время ответа> Tи<= 4T;
— неудовлетворительные: время ответа> 4T;
—Tобычно принимают равным 1, 2 или 4 секундам.Например:
1С (Код)123456T = 2 секундыУдовлетворительные = 800Терпимые = 150Неудовлетворительные = 50APDEX = (800 + 150 / 2) / 1000 = 0,875В Zabbix значение можно хранить как
0,875или умножить на 100 и показывать как87,5%.## Вариант 1. Файл с APDEX и UserParameter
Это наиболее простой и понятный способ.
### 1. Расчет APDEX в 1С
Ниже пример процедуры, которая получает количество операций по трем категориям и записывает APDEX в файл.
1С (Код)12345678910111213141516171819202122232425262728293031323334353637Процедура ЗаписатьAPDEXВФайл() ЭкспортПорогТ = 2;КоличествоУдовлетворительных = 800;КоличествоТерпимых = 150;КоличествоНеудовлетворительных = 50;ВсегоОпераций =КоличествоУдовлетворительных+ КоличествоТерпимых+ КоличествоНеудовлетворительных;Если ВсегоОпераций = 0 ТогдаИндексAPDEX = 0;ИначеИндексAPDEX =(КоличествоУдовлетворительных+ КоличествоТерпимых / 2)/ ВсегоОпераций;КонецЕсли;ИмяФайла = "/var/lib/zabbix/1c_apdex.txt";Запись = Новый ЗаписьТекста(ИмяФайла,КодировкаТекста.UTF8,Ложь);Запись.ЗаписатьСтроку(Формат(ИндексAPDEX, "ЧДЦ=3; ЧР=.; ЧГ=0"));Запись.Закрыть();КонецПроцедурыВ реальной конфигурации вместо тестовых значений нужно получить данные из регистра сведений, журнала производительности, накопленной статистики или другого источника, где хранятся времена выполнения операций.
Важно, чтобы пользователь, под которым работает сервер 1С, имел права на запись в каталог:
1С (Код)1/var/lib/zabbix/Например, можно использовать отдельный каталог:
1С (Код)1/opt/1c-monitoring/и дать доступ на запись пользователю сервера 1С.
### 2. Настройка UserParameter
На сервере, где работает Zabbix Agent, создайте файл:
1С (Код)1/etc/zabbix/zabbix_agentd.d/1c_apdex.confСодержимое:
1С (Код)1UserParameter=1c.apdex,cat /var/lib/zabbix/1c_apdex.txtПроверьте ключ:
Shell1zabbix_agentd -t 1c.apdexОжидаемый результат:
1С (Код)11c.apdex [t|0.875]Перезапустите агент:
Shell1systemctl restart zabbix-agent### 3. Элемент данных в Zabbix
Создайте элемент данных:
1С (Код)123456Имя: 1С APDEXТип: Zabbix agentКлюч: 1c.apdexТип информации: Числовой с плавающей точкойИнтервал обновления: 60 секундЕдиница измерения: без единицыЕсли нужно показывать APDEX в процентах, можно записывать в файл значение
87.5, а в Zabbix указать единицу измерения%.## Триггер на низкий APDEX
Например, критичным считаем значение ниже 0,7:
1С (Код)1last(/ИмяХоста/1c.apdex)<0.7Предупреждение при значении ниже 0,85:
1С (Код)1last(/ИмяХоста/1c.apdex)<0.85Чтобы избежать срабатывания на коротком единичном провале, лучше использовать среднее значение:
1С (Код)1avg(/ИмяХоста/1c.apdex,10m)<0.7## Вариант 2. Передача APDEX через zabbix_sender
Этот способ лучше, если APDEX рассчитывается по расписанию, например раз в 5 минут. Не нужно ждать, пока Zabbix Agent сам опросит файл.
### Скрипт отправки
Создайте файл:
1С (Код)1/usr/local/bin/send_1c_apdex.shShell12345678910111213141516#!/bin/bashZABBIX_SERVER="127.0.0.1"ZABBIX_HOST="1C-Server"APDEX=$(cat /var/lib/zabbix/1c_apdex.txt)if [ -z "$APDEX" ]; thenexit 1fi/usr/bin/zabbix_sender-z "$ZABBIX_SERVER"-s "$ZABBIX_HOST"-k "1c.apdex"-o "$APDEX"Сделайте его исполняемым:
Shell1chmod +x /usr/local/bin/send_1c_apdex.shПроверьте вручную:
Shell1/usr/local/bin/send_1c_apdex.shДолжен появиться результат примерно такого вида:
1С (Код)1processed: 1; failed: 0; total: 1В Zabbix создайте элемент данных:
1С (Код)1234Имя: 1С APDEXТип: Zabbix trapperКлюч: 1c.apdexТип информации: Числовой с плавающей точкойЗапускать отправку можно через планировщик:
Shell1*/5 * * * * root /usr/local/bin/send_1c_apdex.shИли непосредственно из регламентного задания 1С, если на сервере 1С разрешен запуск внешней команды. Но обычно безопаснее разделить расчет и отправку:
1. 1С формирует файл;
2. cron запускаетzabbix_sender.## Вариант 3. Один JSON со всеми показателями
Если нужно передавать не только APDEX, но и расшифровку, удобнее отправлять JSON:
JavaScript12345678{"apdex": 0.875,"satisfied": 800,"tolerating": 150,"frustrated": 50,"total": 1000,"threshold": 2}В 1С можно формировать JSON так:
1С (Код)123456789101112131415161718192021222324252627282930313233343536373839Процедура ЗаписатьМетрикиВJSON() ЭкспортЗаписьJSON = Новый ЗаписьJSON;ЗаписьJSON.УстановитьСтроку();ЗаписьJSON.ЗаписатьНачалоОбъекта();ЗаписьJSON.ЗаписатьИмяСвойства("apdex");ЗаписьJSON.ЗаписатьЧисло(0.875);ЗаписьJSON.ЗаписатьИмяСвойства("satisfied");ЗаписьJSON.ЗаписатьЧисло(800);ЗаписьJSON.ЗаписатьИмяСвойства("tolerating");ЗаписьJSON.ЗаписатьЧисло(150);ЗаписьJSON.ЗаписатьИмяСвойства("frustrated");ЗаписьJSON.ЗаписатьЧисло(50);ЗаписьJSON.ЗаписатьИмяСвойства("total");ЗаписьJSON.ЗаписатьЧисло(1000);ЗаписьJSON.ЗаписатьИмяСвойства("threshold");ЗаписьJSON.ЗаписатьЧисло(2);ЗаписьJSON.ЗаписатьКонецОбъекта();JSONСтрока = ЗаписьJSON.Закрыть();Запись = Новый ЗаписьТекста("/var/lib/zabbix/1c_metrics.json",КодировкаТекста.UTF8,Ложь);Запись.Записать(JSONСтрока);Запись.Закрыть();КонецПроцедурыВ Zabbix создается основной элемент:
1С (Код)1234Имя: Метрики 1С JSONТип: Zabbix agentКлюч: 1c.metrics.jsonТип информации: ТекстUserParameter:
1С (Код)1UserParameter=1c.metrics.json,cat /var/lib/zabbix/1c_metrics.jsonЗатем создаются зависимые элементы данных.
### Зависимый элемент APDEX
1С (Код)1234Имя: 1С APDEXТип: Зависимый элемент данныхОсновной элемент: Метрики 1С JSONТип информации: Числовой с плавающей точкойВ предобработке укажите JSONPath:
1С (Код)1$.apdex### Зависимый элемент удовлетворительных операций
1С (Код)1$.satisfied### Зависимый элемент терпимых операций
1С (Код)1$.tolerating### Зависимый элемент неудовлетворительных операций
1С (Код)1$.frustrated### Зависимый элемент общего количества операций
1С (Код)1$.totalПреимущество этого способа в том, что Zabbix делает только один опрос агента, а из одного JSON получает несколько показателей.
## Вариант 4. Сбор APDEX из журнала регистрации 1С
Если в журнале регистрации уже есть события с длительностью выполнения, можно не добавлять отдельные измерения в прикладное решение.
Общая схема:
1. Отбираются события за последнюю минуту или пять минут.
2. Для каждого события определяется длительность.
3. Длительность сравнивается с порогомT.
4. Считаются:
— быстрые операции;
— терпимые операции;
— медленные операции.
5. Рассчитывается APDEX.
6. Результат передается в файл или черезzabbix_sender.Этот способ зависит от того, какие именно события записываются в журнал регистрации и доступны ли в них длительности операций. Журнал регистрации 1С не всегда содержит полноценное время ответа пользователя, особенно если требуется измерять клиентские операции, сетевые задержки и время отрисовки формы. Поэтому для прикладного APDEX надежнее самостоятельно фиксировать начало и окончание контролируемых операций.
Например, для критичных операций можно сохранять длительность в регистр сведений:
1С (Код)123456ДатаВремяПользовательСеансОперацияДлительностьРезультатЗатем регламентное задание за последние 5 минут выполняет расчет:
1С (Код)123События с длительностью <= T -> satisfiedСобытия с длительностью <= 4T -> toleratingСобытия с длительностью > 4T -> frustrated## Что лучше передавать в Zabbix
Для практического мониторинга рекомендую передавать минимум четыре показателя:
1С (Код)12341c.apdex1c.response.avg1c.response.p951c.requests.totalОдного APDEX бывает недостаточно. Например, APDEX равен
1, но за интервал была всего одна операция. Поэтому желательно контролировать количество операций:1С (Код)1last(/ИмяХоста/1c.requests.total)<10Также полезен показатель
p95, то есть 95-й процентиль времени ответа. Он показывает, насколько медленно работают самые проблемные 5% операций.Оптимальная простая схема для небольшой базы:
1С (Код)123451. Регламентное задание 1С рассчитывает APDEX каждые 5 минут.2. 1С записывает JSON в файл.3. Zabbix Agent получает JSON.4. В Zabbix создается один основной элемент и несколько зависимых.5. Триггер контролирует средний APDEX за 10 минут.Пример условий:
1С (Код)12APDEX ниже 0,85:avg(/1C-Server/1c.apdex,10m)<0.851С (Код)12APDEX ниже 0,70:avg(/1C-Server/1c.apdex,10m)<0.701С (Код)12Мало данных для расчета:last(/1C-Server/1c.requests.total)<10Для самого простого внедрения достаточно одного файла
1c_apdex.txtи ключа:1С (Код)1UserParameter=1c.apdex,cat /var/lib/zabbix/1c_apdex.txtЕсли требуется вывести сразу APDEX, количество операций и длительности, лучше использовать JSON и зависимые элементы данных.
-
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.