Собирать данные мониторинга для Zabbix можно несколькими способами:
- Формирование файла нужного формата сразу по нескольких показателям (Items), например с помощью регламентного задания и отправка этого файла Zabbix серверу через Zabbix sender (На Инфостарте уже есть отдельная статья об этом).
- Способ сбора данных, когда Zabbix запрашивает данные через REST интерфейс. Его преимущество в том, данные по мониторингу из 1С может получить любая другая система (например Grafana).
- Формирование значения по одному показателю (Item) в момент выполнения какого-либо действия в 1С и отправка этого значения Zabbix серверу через Zabbix sender. Это разновидность способа номер 1.
Сбор данных через REST интерфейс.
Сначала, о том, что мы собираем через REST интерфейс и зачем:
— показатели количества сессий 1С: все сессии, только клиентские сессии, только jobs, только com connections.
— показатели количества использованных лицензий, в разрезе каждой лицензии. Зачем: у нас ограниченное количество лицензий и проходиться контролировать количество входящих com connections. Мониторинг показателей с Apllication сервера 1С лучше вешать на отдельную БД, что-то типа MonitoringDB, в ней надо создать пользователя Zabbix, у которого будет указано Windows аутентификация типа \Net_NTServerOneS$.
— показатели очередей импорта/экспорта объектов. Зачем: наши системы 1С получают в день от 500 тысяч до 1 млн. событий извне и порой в очередях 1С может скапливаться десятки тысяч событий, соответственно срабатывание Trigger’a на определенном пороге для нас сигнал, что возникла проблема.
— показатели работы Apllication и sql серверов, которые собираются с помощью типовых шаблонов самого Zabbix.
Как настроить сбор данных через REST интерфейс:
1. На стороне 1С создаются https сервисы, каждый из которых будет возвращать значение нужного нам показателя. Подразумеваем, что у Вас уже стоит и настроен IIS или Apache.
2. На стороне Zabbix настраиваем нужное количество Items и необходимые Triggers.
Шаг 1. Создание https сервисов в базе 1С.
Здесь все стандартно и уже не раз описывалось на Инфостарте, покажу пример на сборе данных о лицензиях. В итоге должен получиться примерной такой вызов: http://serverOneS/MonitoringDB/hs/1CMonitoring/GetLicensessData/serverOneS/Server8100000001, который вернет значение: licence_Server8100000001:10
Примеры кода 1С приложены в обработке к статье, код протестирован на платформе 1С 8.3.10.2669.
Функция GetLicensesData(Parametrs)
NameClusterПар = Parametrs.ПараметрыURL.Получить("NameCluster");
TypeOfParameterПар = Parametrs.ПараметрыURL.Получить("TypeOfParameter");
Соединение = Новый COMОбъект("V83.COMConnector");
Агент = Соединение.ConnectAgent("tcp://" + NameClusterПар);
Кластер = Агент.GetClusters().GetValue(0);
Агент.Authenticate(Кластер,"","" );
МассивСессий = Агент.GetSessions(Кластер).Выгрузить();
Кластер = Неопределено; Агент = Неопределено; Соединение = Неопределено;
ClientORGL8Set20 = 0; //аппаратная лицензия
Server8100000001 = 0; //программная лицензия
Для Каждого Сессия Из МассивСессий Цикл
Если Сессия.License <> Неопределено И Сессия.License.ShortPresentation = "Client, ORGL8 Set 20" Тогда
ClientORGL8Set20 = ClientORGL8Set20 + 1;
КонецЕсли;
Если Сессия.License <> Неопределено И Сессия.License.ShortPresentation = "Server, 8100000001 20 20" Тогда
Server8100000001 = Server8100000001 + 1;
КонецЕсли;
КонецЦикла;
МассивСессий = Неопределено;
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Content-type", "application/json; charset=utf-8");
Если TypeOfParameterПар = "licenceClientORGL8Set20" Тогда
Ответ.УстановитьТелоИзСтроки("licence_ClientORGL8Set20:" + ClientORGL8Set20);
ИначеЕсли TypeOfParameterПар = "Server8100000001" Тогда
Ответ.УстановитьТелоИзСтроки("licence_Server8100000001:" + Server8100000001);
КонецЕсли;
Возврат Ответ;
КонецФункции
Шаг 2. Создание Items в Zabbix.
Заходим в Configuration — All hosts — Host — Item — Create Item.
Самое главное корректно заполнить поле Key с помощью шаблона Поиск строки на веб-странице: web.page.regexp[хост,<путь>,<порт>,<регулярное выражение>,<длина>,<вывод>] .
В моем примере в поле Key надо положить строку: web.page.regexp[serverOneS,"MonitoringDB/hs/1CMonitoring/GetLicensesData/serverOneS/licenceClientORGL8Set20",80,"licence_ClientORGL8Set20:([0-9]+)",,1]
Разберем формат строки:
- хост — serverOneS — сервер 1С, на котором поднят IIS;
- путь — MonitoringDB/hs/1CMonitoring/GetLicensesData — путь к http сервису + serverOneS/licenceClientORGL8Set20 — параметры передаваемые в http сервис.
- регулярное выражение — "licence_ClientORGL8Set20:([0-9]+)" — шаблон строки, который разбирается Zabbix. В скобках указан шаблон извлечения числа и если Zabbix сможет эту часть преобразовать в число, то это и будет value для Item.
- вывод — по этому параметру, к сожалению, не нашел внятного описания, поэтому поставил аналогично примерам найденным на форумах.
Остальные параметры Item заполняем аналогично скриншоту ниже:
Проверяем в Latest Data, что Zabbix собирает данные.
В таком случае, надо проверить через отладчик, что Zabbix цепляет http сервис и возвращает ему правильную строку. Если все-таки отладчик покажет, что строка возврата верная, то скорее всего запрос внутри 1С отрабатывает, более 20 секунд и этом случае Zabbix считает, что ответа нет и выдает ошибку "Value "" of type "string" is not suitable for value type "Numeric (unsigned)"".
Сбор данных по определенным показателям через Zabbix sender:
- На стороне Zabbix настроить Item с типом Zabbix trapper.
- На стороне 1С необходимо вставить вызов Windows команды, которая будет отравлять значение по нужному Item в Zabbix.
Для чего можно использовать именно такой способ сбора данных: с помощью регламентных заданий каждые 30 минут отрабатывает реконсиляция между 1С и сторонней системой по входящим объектам, которая показывает количество расхождений по объектам и как результат в Zabbix отравляется количество брейков.
Мы не храним внутри 1С количество брэйков, поэтому второй способ не подходит, а видеть сколько у нас брэйков на графике надо, чтобы нужный момент отчитаться бизнесу.
Шаг 1. Настройка Item с типом Zabbix trapper
Заходим в Configuration — All hosts — Host — Item — Create Item.
Необходимо заполнить поля Name и Key названием показателя. В поле Type выбрать Zabbix trapper, поле Type of information = Numeric(unsigned).
Шаг 2. Вызов Windows команды внутри регламентного задания
Добавить в конце регламентного задания подобный код:
Попытка
КоличествоРасхождений = СтрЗаменить(КоличествоРасхождений,Символы.НПП,"");
CodeReturn = "";
ВнешняяКоманда="c:/ZabbixAgent/zabbix_sender.exe -c c:/ZabbixAgent/zabbix_agentd.conf -s <ИМЯ хоста в ZABBIX> -k document_breaks -o "+Формат(КоличествоРасхождений,"ЧГ=")+"";
ЗапуститьПриложение(ВнешняяКоманда,,True, CodeReturn);
Исключение
ЗаписьЖурналаРегистрации("ZabbixAgent", УровеньЖурналаРегистрации.Предупреждение,,,"Не удалось выполнить внешнюю команду! "+ ВнешняяКоманда + " " + ОписаниеОшибки() + "CodeReturn: " + CodeReturn);
КонецПопытки;
После настройки Items и получения данных из 1С, настраиваем Graphs и Dashboards и наслаждаемся :-).
P.S. Zabbix отлично собирает данные, но возможности в настройках Dashboards у него не большие, гораздо лучше и красивее в этом плане Grafana, у которой в качестве источника можно указать Items из Zabbix’а:
P.S.P.S. Данный способ мониторинг довольно прост, но чтобы разобраться с ним я потратил немало времени на поиск информации, поэтому статья написана, не только с целью поделиться своим опытом, но и узнать опыт коллег. Всем удачи.
Добрый день, отличная статья.
Но я бы попросил вас бы добавить описание что именно вы мониторите и т.д. Либо прикрепил ссылки на статьи где описано в чем именно полезность данного механизма. Я знаю что можно мониторить взаимодействие 1С с веб и http сервисами, а что еще можно получить при помощи данного мониторинга, конкретно на примерах из жизни что это дает в части отслеживания проблем и скорости их устранения?
Добрый день, спасибо.
Мы в основном контролирую с помощью Заббикса нагрузку на серверах 1С и интеграционные очереди.
С помощью Заббикса мы нашли, какие наши регл. задания съедали по 10-15 ГБ памяти и были причиной падения rphost’а.
Сейчас у нас на показателе память rphost’а стоит триггер, которые присылает нотификацию, в случае превышения определенного порога.
На скриншоте с rphost’ом видна загрузка его в течении дня и это нормальный график для нас, если начинается отклонение, то где-то проблема.
Контролируя интеграционные очереди, мы видим, где у нас узкие места в интеграции и начинаем копать там. Также благодаря Забикксу мы точно можем спрогнозировать какое количество событий может 1С обработать за определенный период.
Я подумаю, какие еще примеры из практики по 1С можно добавить к статье.
(2)
Озвучьте весь список пожалуйста. ойек….
список и как достучаться до всего что есть.
Заранее спасибо.
(4) Меня всегда смешили люди, которые считают себя умнее других. Вообще вопрос был не к вам, и вопрос был не в том нужно или нет. Я знаю для чего нужен Заббикс и т.д. я хотел подробнее познакомиться с опытом коллег. Это всегда бывает полезно сколько бы человек не работал в ИТ.
В следующий раз вообще не пишите комментарии, чем писать такое.
(2) Большое спасибо за ответ. Лучше бы конечно добавить весь перечень узких мест, механизмов и сервисов которые можно контролировать при помощи Zabbix.
Тогда статья бы получилось полной на все 100% и была бы полезна как разработчикам, админам и руководителям ИТ подразделений.
Не описано — на каких версиях платформы 1С это будет работать (у меня в таком виде — не пропускает модератор).
HTTP-сервисы доступны с версии 8.3.5.1068. На более ранних версиях — нужно делать костыли или выкручиваться через web-сервисы.
Мы достаточно успешно используем шаблон к Zabbix:
https://github.com/bessonovevgen/srv-1c-zabbix-template
Его важным плюсом является работа через ras, благодаря чему он работает под linuxwin.
(5)
В следующий раз вообще не пишите комментарии, чем писать такое.
Честно говоря, меня тоже вводит в некоторое замешательство Ваш вопрос, но давайте я поделюсь опытом своего предприятия.
У нас тоже построены дашбоарды графаны на основании данных заббикса. Мы создали дашбоард в разрезе каждой базы куда выведены ключевые показатели производительности наших серверов (1С + MS SQL).
Общие MS SQL + 1C.
За ключевые счетчики мы посчитали: Нагрузка ЦП, Очередь ЦП, % использования РАМ, Очередь диска, время обращение к диску, нагруженность сети, наличие свободного места на диске, доступность сервера, время отклика. Если речь о СУБД, то в счетчики в разрезе всех дисков (С, tempDB, Диск с базой).
Только для 1С:
Наличие установленной блокировки входа в базу, наличие установленной блокировки для регламентных заданий в базу, текущий потребляемый объем памяти в разрезе рп хостов. Так же прикручена логика если вдруг какой то из счетчиков выйдет из зеленой зоны сразу же запуститься скрипт на powershell который выведет топ 5 пользователей в консоли отсортированных по колонке захвачено СУБД.
Только для СУБД:
Процент попадания в буферный кэш, время жизни страницы в буфере, количество латчей, статистика ожиданий. + данные регламентных заданий на СУБД, были ли они выполнено успешно.
Данные из СХД:
Счетчик загруженности операциями IO с СХД.
p.s: не обращайте внимание на отсутствие значений, сейчас в работе у нас модернизация нашего текущего железа, в связи с чем мы тестируем разные СХД от вендеров, а в графане подвязан счетчик от другого Луна.
Ниже прикладываю скрины как выглядит мой дашбоард, ну и подобный дашбоард у меня в разрезе каждой базы.
Ну а на вопрос «Конкретно на примерах из жизни что это дает в части отслеживания проблем и скорости их устранения?» я бы ответил, что это дает очень удобную визуализацию, что именно является узким горлышком в момент появлении проблемы с производительностью баз данных + отправка СМС ответственным лицам с информацией о том, что просели ключевые счетчики, подключись посмотри.
Ну и так же такой момент, что в графану мы выводим только ключевые счетчики, есть куча других счетчиков которые собирает заббикс к которым точно так же прикручены алармы. Недавно прикрутили новый alarm который отслеживает размер ldf файла, который по неизвестным мне причинам не очищался после инкриментального бэкапа, а в конечном итоге вырос до огромных размеров.
В продолжение глупых вопросов. Сколько кушает агент забикса? Вопрос к тому что есть глупый сервак на котором крутится все (скуль, агнты1с,лицензии) и пока иет согласование новых игрушек хочется подоткнуть мониторинг, причем желательно с максимальной задержкой в 3-5 секунд.
Создать http сервис, который съест лицензию, чтобы по COM (на сервере, что не рекомендуется ни 1с ни майкросфтом) залезть на кластер? И это чтобы посчитать количество лицензий!
Используйте ras! Выше уже дали ссылку на готовый шаблон от тов. Бессонова.
(11) Забавно, а ведь я даже не подумал об этом в таком ключе.
этот шаблон я видел. и про использование ras я думал, но не стал: http сервис проще и отрабатывает буквально за секунду и в общей массе не влияет на количество занятых лицензий; в 13 платформе появилась новая возможность Контроль потребления ресурсов и можно будет как-то автоматизировано собирать статистику с кластера — надо будет посмотреть на это.
(10) забирает он совсем не много: 8-10 MB ОП и 0.1 % от общей загрузки процессоров. Он не должен существенно грузит сервер. Но у нас сбор данных настроен от 30 до 60 секунд.
(7) ну почему же не описано ,есть такое:
в статье над кодом есть строка: Примеры кода 1С приложены в обработке к статье, код протестирован на платформе 1С 8.3.10.2669.
(9)
Спасибо в целом за детальный ответ.
У нас тоже есть проблема с ростом ldf, причина роста понятна, это не отрабатывал бэкап. Можно пример как сделан такой аларм.
Есть мысли мониторить рост баз в скуле и заодно ldf.
(12) Ага
Для утилиты rac при выводе информации о сеансе реализованы свойства cpu-time-current, cpu-time-5min-last, cpu-time-total
Источник:http://downloads.v8.1c.ru/content//Platform/8_3_13_1549/1cv8upd_8_3_13_1549.htm#b5a30ffb-0b1f-11e8-a3f7-0050569f678a
(13) Ага, спасибо. На текущий момент серваки все виндовые и коллега одмин-1ц пользуется перфоманс манагером, который настроен только у него и когда нужно что-то где-то глянуть, то это прям головная боль =)))
Хорошая статья, в избранное.
А что делает обработка, приложенная к статье?
(9) Ну вот, хороший ответ. А то начинают некоторые умничать)))) Спасибо за ответ. Конечно это все можно прочитать в литературе и т.д. хотелось от конкретных людей услышать применение Заббикс в части 1С. А удивляетесь вы зря, на многих предприятиях даже и этого не настроено и люди сидят вычисляют в консоли серверов 1С кто же что там «съел» и так далее и то после того как начинают звонить пользователи и ругаться что все тормозит люто. Далеко не каждый настраивает эти вещи. Может быть админы там что то и анализировали, но до 1С это у нас не доходило либо я про это не слышал))))
(18) Спасибо.
Обработка ничего не делает, в ней примеры кода получения кол-во лицензий (это есть в статье) и кол-ва сессий (это дополнительно).
(19) скажу так, года 2-3 назад мы были теми людьми которые что-то там в консоли пытались поймать))))
(21) Ну вот))))
(21) вот я сейчас на этой стадии нахожусь и не знаю что, как и где смотреть почему периодически тормозит и подвисает 1С )
Мониторинг это хорошо, но ничего не выйдет без понимания что это за показатели и какие цифры для них это нормально, а какие уже беда.
Или вот допустим запустил кто-то средь бела дня перепроведение тысяч документов за несколько лет, и на какие показатели смотреть и как вычислять этого пользователя?) Консоль в таких случаях кажется совсем бесполезной. Может подскажете литературу где такие вопросы и ключевые показатели работы 1С сервера рассматриваются?
(23)
А в таких случаях я использую свой второй козырь 🙂 Графана очень хорошо помогает визуализировать данные заббикса, а вот активность пользователей 1С я предпочитаю смотреть в PowerBI, т.к. очень гибкие отборы могу задать на вход и видеть всю динамику в разрезе всего (времени, базы, имени пользователя, запросов, стеков вызовов, блокировках (субд, 1с), да и вообще на что фантазии хватит). Данные в PowerBI заливаются с трассировок MS SQL + Технологический журнал 1С. В планах подкрутить еще несколько фишек, но дай бог времени, сил и терпения.
А по Вашему случаю надо понять что является узким горлышком в системе, как правило это либо проблемы параллельности (ожидания на блокировках), либо в нехватке аппаратных ресурсов (высокая нагрузка на процессор, большое потребление оперативной памяти, нестабильная сеть), с админом общались на тему торможения? Какие цифры это нормально, я думаю тут очень интимный момент и подбирается под систему индивидуально )
Из литературы могу посоветовать только то, что читал сам лично:
http://v8.1c.ru/metod/books/book.jsp?id=499) .
1. Настольная книга 1С:Эксперта по технологическим вопросам. 2 издание (
2. Методическое пособие по эксплуатации крупных информационных систем на платформе «1С:Предприятие 8».
3. PDFка, от по производительности на много страниц, но она мне показалась не такой увлекательной как первые 2 книги, но возможно это связано с тем, что я читал её еще тогда когда вообще мало что понимал.
Если что пиши можем поковырять, может смогу чем-то помочь.
(23) Я тут писал огромное сообщение в которое вложил душу, но инфостарт выдал ошибку и резко все закрылось )
Ну тогда краткая выдержка.
1. Что говорит админ по поводу торможений?
2. Из литературы могу посоветовать то, что читал сам лично:
— Настольная книга 1С:Эксперта по технологическим вопросам. 2 издание
— Методическое пособие по эксплуатации крупных информационных систем на платформе «1С:Предприятие 8»
— PDFка по производительности с курсы-по-1с на кучу страниц.
3. Если Вы уверены, что точно кто-то занимается перепроведением кучи документов, можно как вариант рассмотреть запрос к регистру версий объектов, сгруппировав по пользователю, а если хотим просто выловить кто из пользователей вносит самый большой вклад, то надо изучать возможности технологического журнала и SQL трассировок.
(25) вот поэтому я иногда копирую текст набранного сообщения в буфер, а потом нажимаю кнопку отправить)
Сервер мощный довольно, загрузка CPU около 20%, админ говорит в SQL ничего странного не видит.
Насчет перепроведений это не точно, просто иногда жуткие тормоза какое-то время. Хотел ЦУП поставить посмотреть, но конечно все равно надо с тех. журнала начинать настройку и данные какие-то начать собирать. Я так понимаю визуализировать их потом можно где угодно, просто кроме ЦУПа раньше инструментов не было.
(24)(25) спасибо за информацию по книгам, обязательно почитаю!
(24)
Мне не приходило в голову использовать PowerBI для мониторинга. Это реально интересно, вот если бы вы сделали статью об этом, то было бы здорово.
У нас сейчас грозит рост объемов в 2 раза и такой мониторинг мог бы помочь.
(23)
Я бы сказал, что консоль 1С поможет в большинстве таких случаях.
Если кто-то запустил перепроведение 1000 документов в середине дня, то в консоли надо смотреть на показатели «Memory Current» и «DBMS data», если они превышают пороговое значение (для нас ~5 ГБ для Memory Current), то явно пользователь что тяжелое запустил.
Есть планы вывести в Zabbix 3 пользователей с самыми большими значениями этих показателей и мониторить это.
Из недавнего юзер запустил Универсальный отчет по Бух. регистру без отбора (потом сказал, что забыл поставить отбор:-)). в итоге rphost набрал 55 ГБ, хорошо, что алерт сработал и мы успели убить эту сессию, иначе бы 1С свалился.
(28) А как настройки кластера подобное пропустили?
(29) мы не ставим ограничение по кол-ву памяти.
на мой взгляд, странно принудительно рестартовать prhost и отваливать все процессы, если какая-то сессия сожрала слишком много. Есть шанс успеть ее принудительно отключить и все остальные будут жить.
(30) Насколько помню настройки кластера позволяют ограничить объем потребляемой памяти за один вызов, в этом случае не должно быть рестарта РП хоста, а будет попытка дропнуть проблемную сессию.
(31) да точно, но что -то не хочется на проде экспериментировать.:-)
(26)
Такое бывает при выключении процесса и передаче соединений вновь созданному.
(30) падение всего кластера vs рестарт одного rphost. Причем во втором случае реально пострадают только те, кто в момент рестарта процесса выполнял код, остальные спокойно мигрируют на другой процесс.
ЗЫ но это КОРП лицуха
Добрый день, коллеги.
Вопрос автору:
— не нашел выше упоминание ошибки.
Вопросы всем: по статье (вариант «сбор данных через REST интерфейс») сделал 3 items, но все время они «отваливаются» — в списке «Элементы данных» напротив каждого стоит восклицательный знак с пояснением «ZBX_TCP_READ() timed out». Интервал обновления items стоит 60s, и при проверке через браузер вроде-бы не замечаю долгого ответа (более чем 12-18сек). Как сделать так чтоб эта ошибка не прерывала сбор данных?
Еще в примере автора есть формирование ответа в виде json-файла с несколькими показателями сразу. Как можно настроить zabbix так, чтобы он из одного такого ответа http-сервиса записывал несколько items?
(35) Добрый день
Ошибка такого свойства «Value «» of type «string» is not suitable for value type «Numeric (unsigned)». Поправил в статье :-).
Если возможно прикрепите скрины с настройкой item и текст ключа. Если через в браузере ответ возвращается, то скорее всего проблема в настройке item. Если можно еще скрин с ответом, который возвращается в браузере.
— а это описание здесьhttps://infostart.ru/public/546523/
(36) Скриншоты прикрепил.
зависимые items
А про сбор сразу всех — ковыряю
(37) текст ключа корректен. Значит дело не в настройках item.
тут надо похоже глубже копать, в конфиге Zabbix Agentd. Тут мне сложно помочь, у нас этим отдельная служба занимается.
(38) в конфиге сервера zabbix стоит timeout 4 сек. А 1С ответ дает часто 10 сек. Нач.админов менять timeout не хочет, так что переходим на план Б (546523).
(8)
у вас на 3 заббиксе? на 4 ругается на темплейт
У меня ругается на «Соединение = Новый COMОбъект(«V83.COMConnector»);»
В браузере сообщение:
{HTTPСервис.Monitoring1C.Модуль(27)}: Ошибка при вызове конструктора (COMОбъект)
С чем может быть связано?
(41)
как вариант не зарегистрирован ком объект — regsvr32.exe comcntr.dll
(42)
Акимыч, DLL-ку зарегистрировал, к сожалению, после этого ошибка осталась,
Также попробовал выполнить пример другого HTTP-сервис — с запросом
Показать
В браузере теперь ругается на
{HTTPСервис.ЕщеПример.Модуль(19)}: Ошибка при вызове метода контекста (Выполнить)
Такое чувство, что у HTTP-сервиса очень ограниченный контекст, — создать COM-объект нельзя, запрос выполнить нельзя…
Что я делаю не так?
(43)
насчет COM-объект не пробовал через HTTP-сервис.
Но запросы HTTP-сервис отлично выполняет. что за конфигурация и платформа?
(44)
С запросом разобрался, все норм отрабатывает, а вот COM-объект не получается.
Конфигурация чистая с несколькими пользователями, справочниками, ролью полные права и собственно с HTTP-сервисами
Версия платформы — 8.3.15.1489
(45)
а зачем в HTTP-сервис делать еще COM к другой базе? Боюсь такой функциональности нет.
(46)
Делаю по вашему примеру)) — Шаг 1
(47) Точно, сорри, просто забыл, что внутри примера.
а можно еще написать, что система пишет в Информация для технической поддержки.