Zabbix: Мониторинг рабочих процессов

07.02.20

Администрирование - Мониторинг

Мониторинг памяти, потребляемой рабочими процессами, средствами Zabbix. Создание пользовательских LLD правил с помощью One Script

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Zabbix: Мониторинг рабочих процессов: МониторингПамятиРабочихПроцессов.epf
.epf 8,30Kb
4
4 Скачать (1 SM) Купить за 1 850 руб.
Zabbix: Мониторинг рабочих процессов: RphostPID.os
.os 4,47Kb
4
4 Скачать (1 SM) Купить за 1 850 руб.

В этой статье описан один из способов мониторинга памяти, потребляемой рабочими процессами rphost средстами Zabbix.

Кратко механизм мониторинга можно описать следующим образом:

1. На стороне 1С по расписанию запускается обработка, которая подключается к кластеру серверов и получает от него необходимые данные

2. Полученные данные отправляются на сервер Zabbix с помощью механизма Zabbix sender

3. Количество рабочих процессов на сервере 1С не постоянно. Для того, тобы Zabbix сервер хранил и анализировал данные в разрезе отдельных процессов, должно быть настроено динамическое обнаружение рабочих процессов

4. Динамическое обнаружение можно реализовать путем создания пользовательских LLD (Low Level Discovery) правил на стороне Zabbix сервера

5. Данный механизм предполагает выполнение скрипта, осуществляющего обнаружение рабочих процессов на Zabbix агенте

Таким образом, настройку мониторинга рабочих процессов можно разделить на следующие этапы:

1. Настройка сбора и отправки данных

2. Настройка Zabbix агента для реализации механизма динамического обнаружения рабочих процессов

3. Настройка Zabbix сервера для получения, хранения и анализа данных

1. Настройка сбора и отправки данных

Сбор данных для мониторинга можно реализовать с помощью внешней обработки, настроенной на запуск по расписанию, либо регламентного задания. Пример кода с использованием COM соединения:

Процедура ВыполнитьКоманду(ИдентификаторКоманды) Экспорт

	Если ИдентификаторКоманды = "МониторингПамятиРабочихПроцессов" Тогда
		СтруктураПараметров = Новый Структура; // Указываются настройки подключения к кластеру:
		СтруктураПараметров.Вставить("АдресКластера", "Server:1540"); 
		СтруктураПараметров.Вставить("ПортКластера", 1541);
		СтруктураПараметров.Вставить("АдминистраторКластера", "Administrator");
		СтруктураПараметров.Вставить("ПарольАдминистратораКластера", "Password");
		
		ПолучитьЗначения(СтруктураПараметров);
	КонецЕсли;
	
КонецПроцедуры

Процедура ПолучитьЗначения(СтруктураПараметров) Экспорт
	
	АдресКластера = СтруктураПараметров.АдресКластера;
	ПортКластера = СтруктураПараметров.ПортКластера;
	АдминистраторКластера = СтруктураПараметров.АдминистраторКластера;
	ПарольАдминистратораКластера = СтруктураПараметров.ПарольАдминистратораКластера;
	
	ПараметрыСоединения = ПроверитьСоединениеСКластером(
	    АдресКластера,
	    ПортКластера, 
	    АдминистраторКластера, 
	    ПарольАдминистратораКластера);
		
	Если ПараметрыСоединения = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	МенеджерСоединений = ПараметрыСоединения["МенеджерСоединений"];
	СоединениеСЦентральнымСервером = ПараметрыСоединения["СоединениеСЦентральнымСервером"];
	Кластер = ПараметрыСоединения["Кластер"];
	
	Процессы = СоединениеСЦентральнымСервером.GetWorkingProcesses(Кластер);                 
	
	Для Каждого Процесс Из Процессы Цикл
		КодВозврата = "";
		ЗапуститьПриложение( // указывается команда отправки данных серверу через zabbix sender. Подробнее о механизме zabbix_sender можно прочитать в документации
			"C:\zabbix_agent\zabbix_sender.exe zabbix_sender -z <IP zabbix сервера> -s ""<наблюдаемый узел Zabbix>"" -k Rphost[" + Процесс.PID + "] -o " + Формат(Процесс.MemorySize, "ЧГ=''"), 
			,
			Истина, 
			КодВозврата);
	КонецЦикла;
	
КонецПроцедуры

Функция ПроверитьСоединениеСКластером(АдресКластера, ПортКластера, Администратор, Пароль) Экспорт
    
    Попытка
		МенеджерСоединений = Новый COMОбъект("V83.COMConnector");
		СоединениеСЦентральнымСервером = МенеджерСоединений.ConnectAgent(АдресКластера);
	Исключение
		ЗаписьЖурналаРегистрации("ПроверитьСоединениеСКластером", УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
		Возврат Неопределено;
	КонецПопытки;
	
	Попытка
		СписокКластеров = СоединениеСЦентральнымСервером.GetClusters();
	Исключение
		ЗаписьЖурналаРегистрации("ПроверитьСоединениеСКластером", УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.КонтрольПамятиСервер,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
		Возврат Неопределено;
	КонецПопытки;
	
	НомерКластера = СписокКластеров.GetLowerBound();
	ПоследнийНомерКластера = СписокКластеров.GetUpperBound();
	Пока НомерКластера <= ПоследнийНомерКластера Цикл
		Кластер = СписокКластеров.GetValue(НомерКластера);
		Если Кластер.MainPort = ПортКластера Тогда
			Прервать;
		КонецЕсли;
		НомерКластера = НомерКластера + 1;
	КонецЦикла;
	
	Если НомерКластера > ПоследнийНомерКластера Тогда
		Текст = "Кластер с портом " + XMLСтрока(ПортКластера) + " не зарегистрирован на центральном сервере " + АдресКластера;		
		Возврат Неопределено;
	КонецЕсли;
	
	Кластер = СписокКластеров.GetValue(НомерКластера);
	
	Попытка
		СоединениеСЦентральнымСервером.Authenticate(Кластер, Администратор, Пароль);
	Исключение
		ЗаписьЖурналаРегистрации("ПроверитьСоединениеСКластером", УровеньЖурналаРегистрации.Ошибка,	Метаданные.ОбщиеМодули.КонтрольПамятиСервер,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
		Возврат Неопределено;
	КонецПопытки;
	
	Возврат Новый Структура("МенеджерСоединений, СоединениеСЦентральнымСервером, Кластер", МенеджерСоединений, СоединениеСЦентральнымСервером, Кластер);
		
КонецФункции

К статье приложена обработка, использующая данный код. Она может быть подключена к типовым конфигурациям средствами БСП через дополнительные внешние отчеты и обработки и запускаться по расписанию. Обработка протестирована на платформе 8.3.12.1790.

Данные отправляются в цикле отдельно для каждого рабочего процесса. При этом ожидается, что в настройках Zabbix сервера создан элемен элемент под каждое значение с именем Rphost[<PID>] (об этом далее).
 

2. Настройка Zabbix агента для реализации механизма динамического обнаружения рабочих процессов

Создание правил обнаружения применяется в том случае, когда на этапе создания элемента данных Zabbix не известны его параметры. В данном случае мы не знаем количество и PID рабочих процессов, которые требуется мониторить.

Настройка обнаружения на стороне Zabbix агента заключается в следующем:

1. В конфигурации агента используется директива UserParameter. Она является инструментом расширения функциональности агента. UserParameter используется для запуска агентом пользовательских скриптов т.е. директива указывает на скрипт. В файл конфигурации zabbix агента zabbix_agentd.conf добавляется строка:

UserParameter=oscript,"C:\Program Files (x86)\OneScript\bin\oscript.exe" C:\temp\RphostPID.os

После обновления файла конфигурации агента необходимо перезапустить.
2. Создается скрипт, который должен возвращать список рабочих процессов в формате JSON следующего вида:

[{"data":[{"{#SERVICE_NAME}":"AA"},{"{#SERVICE_NAME}":"HH"}]}]

В данном случае используется скрипт OneScript со следующим кодом:

#Использовать json
#Использовать strings

Функция ПолучитьПараметры()

	СтруктураПараметров = Новый Структура;
	СтруктураПараметров.Вставить("АдресКластера", "Server:1540");
	СтруктураПараметров.Вставить("ПортКластера", 1541);
	СтруктураПараметров.Вставить("АдминистраторКластера", "Administrator");
	СтруктураПараметров.Вставить("ПарольАдминистратораКластера", "Password");
		
	Возврат СтруктураПараметров;
	
КонецФункции

Функция ПолучитьЗначения(СтруктураПараметров)
	
	ПараметрыСоединения = ПроверитьСоединениеСКластером(
	    СтруктураПараметров.АдресКластера,
	    СтруктураПараметров.ПортКластера, 
	    СтруктураПараметров.АдминистраторКластера, 
	    СтруктураПараметров.ПарольАдминистратораКластера);
	
	МенеджерСоединений = ПараметрыСоединения["МенеджерСоединений"];
	СоединениеСЦентральнымСервером = ПараметрыСоединения["СоединениеСЦентральнымСервером"];
	Кластер = ПараметрыСоединения["Кластер"];
	
	Процессы = СоединениеСЦентральнымСервером.GetWorkingProcesses(Кластер);
	ДанныеПроцессов = ДанныеПроцессов(Процессы);
	СтруктураВывода = Новый Структура;
	СтруктураВывода.Вставить("data", ДанныеПроцессов);
	
	ПарсерJSON = Новый ПарсерJSON();
	СтруктураВыводаJSON = ПарсерJSON.ЗаписатьJSON(СтруктураВывода);
	
	СтруктураВыводаJSON = СтрЗаменить(СтруктураВыводаJSON, "PID", "{#PID}");
	
	Возврат СтруктураВыводаJSON;
	
КонецФункции

Функция ПроверитьСоединениеСКластером(АдресКластера, ПортКластера, Администратор, Пароль)
    
	МенеджерСоединений = Новый COMОбъект("V83.COMConnector");
	СоединениеСЦентральнымСервером = МенеджерСоединений.ConnectAgent(АдресКластера);
	СписокКластеров = СоединениеСЦентральнымСервером.GetClusters();

	Для НомерКластера = 0 По СписокКластеров.Count() Цикл
		Кластер = СписокКластеров[НомерКластера];
		Если Кластер.MainPort = ПортКластера Тогда
			Прервать;
		КонецЕсли;
	КонецЦикла;

	СоединениеСЦентральнымСервером.Authenticate(Кластер, Администратор, Пароль);

	Возврат Новый Структура("МенеджерСоединений, СоединениеСЦентральнымСервером, Кластер", МенеджерСоединений, СоединениеСЦентральнымСервером, Кластер);
		
КонецФункции

Функция ДанныеПроцессов(Процессы) 
	
	ТаблицаДанныхПроцессов = Новый ТаблицаЗначений;
	ТаблицаДанныхПроцессов.Колонки.Добавить("PID",, "{#PID}");
	
	Для НомерПроцесса = 0 По Процессы.Count() - 1 Цикл
			
		НоваяСтрока = ТаблицаДанныхПроцессов.Добавить();
			
		Процесс = Процессы[НомерПроцесса];
		НоваяСтрока["PID"] = Процесс.PID;
			
	КонецЦикла;
	
	Возврат ТаблицаДанныхПроцессов;
	
КонецФункции

ПараметрыПодключения = ПолучитьПараметры();
PIDПроцессов = ПолучитьЗначения(ПараметрыПодключения);
Message(PIDПроцессов);

Если на агенте все настроено правильно, то выполнение команды на сервере

zabbix_get -s <имя хоста> -p <порт хоста> -k 'oscript'
будет возвращать данные в требуемом формате.

3. Настройка Zabbix сервера

На стороне сервера необходимо выполнить следующие настройки:

1. Создать шаблон:  «Настройка → Шаблоны → Создать шаблон». Здесь необходимо заполнить только имя

2. Для созданного шаблона создать правило обнаружения: «Настройка → Шаблоны → Имя созданного шаблона → Правила обнаружения → Создать правило обнаружения».

Здесь необходимо заполнить параметры:

Тип: Zabbix agent

Ключ: oscript (имя UserParameter из конфигурации zabbix агента)

3. Создать прототип данных «Настройка → Шаблоны → Имя созданного шаблона → Правила обнаружения → Имя созданного правила → Прототипы элементов данных → Создать прототип элементов данных»

Здесь необходимо заполнить параметры:

Тип: Zabbix trapper

Ключ: Rphost[{#PID}]

Тип информации: числовой (целое положительное)

Тип данных: десятичный

4. Созданный шаблон применить к объекту мониторинга

Через некоторое время будут автоматически созданы элементы мониторинга Rphost[<PID>], соответствующие рабочим процессам. Собранные данные можно анализировать с помощью графиков и настраивать оповещения с помощью триггеров.

См. также

Журнал регистрации Мониторинг Системный администратор Программист Бизнес-аналитик Руководитель проекта Платформа 1С v8.3 Платные (руб)

В сферу обязанностей при работе с клиентами входит контроль работы баз данных и серверов 1С. Нужно понимать что происходит в базах, есть ли ошибки, зависания у пользователей и фоновых задач, блокировки или какое-то необычное поведение системы, получение информации о причинах возникновения проблем и их оперативное устранение и т.д. В качестве источников информации использую консоль кластеров 1С, технологический журнал 1С, журналы регистрации базы 1С. Для автоматизации части операций мониторинга и анализа создал инструмент на основе 1С.

9000 руб.

28.08.2019    34157    22    21    

75

SALE! 50%

Учет доходов и расходов Логистика, склад и ТМЦ Маркетплейсы Мониторинг Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Расширение модуля Synchrozon для удобного контроля габаритов на Ozon! Разработка позволяет мгновенно сравнивать установленные габариты товаров, с габаритами, указанными на Ozon, чтобы выявлять любые несоответствия. Поможет сократить расходы на логистику, гарантируя, что все данные о товарах остаются точными и актуальными.

3600 1800 руб.

31.10.2024    379    1    0    

3

Мониторинг Системный администратор Программист Платформа 1С v8.3 Россия Платные (руб)

Обработка позволяет использовать подобные КОРП-функциональности механизмы контроля расхода памяти (сеансом на 1 вызов и рабочими процессами), реагируя завершением "тяжелых" вызовов, перезапуском рабочих процессов при чрезмерном потреблении этого важного ресурса.

3600 руб.

03.05.2023    5174    3    0    

4

SALE! 50%

Логистика, склад и ТМЦ Мониторинг Маркетплейсы Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Платные (руб)

Расширение для 1С, которое автоматически «отлавливает» тарифы складов с наиболее выгодными коэффициентами для ваших товаров на маркетплейсе Wildberries. С помощью этого инструмента вы сможете легко находить и выбирать склады с лучшими условиями для максимизации своей прибыли. Удобная интеграция позволяет настроить регулярный поиск складов по выгодным коэффициентам в виде регламентного задания в 1С, что существенно экономит время и автоматизирует процесс принятия решений по размещению товаров. Всегда будьте на шаг впереди конкурентов и повышайте эффективность своего бизнеса с помощью «Ловца коэффициентов складов Wildberries»!

3600 1800 руб.

14.11.2024    354    1    0    

4

Мониторинг Инструменты администратора БД Системный администратор Платформа 1С v8.3 Россия Платные (руб)

Конфигурация Session Monitor предназначена для мониторинга сервера 1С с целью отслеживания чрезмерной нагрузки от конкретных сеансов и скорости реакции рабочих процессов.

1500 руб.

01.12.2020    16087    38    0    

56

Мониторинг Анализ продаж Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Розница 3.0 Управленческий учет Платные (руб)

Решение для управления ключевыми показателями компании, обеспечивающее гибкую настройку, визуализацию данных и эффективный контроль за достижением целей. Продукт сокращает трудозатраты на расчет и аналитику, позволяя быстрее принимать обоснованные решения. Легко интегрируется в любую конфигурацию 1С, предлагая интуитивный интерфейс, удобный для всех пользователей.

24000 руб.

11.11.2024    283    0    0    

0

Мониторинг Сервера Системный администратор Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

StartPlus и система контроля и сбора информации (настраиваем за час и пользуемся). Данное решение позволяет быстро собирать и анализировать различную информацию из разных источников данных (не обязательно серверов 1С). В любой момент можно менять состав сводной информации без сложной разработки на стороне 1С.

1 стартмани

18.07.2024    901    7    moolex    0    

5

Мониторинг Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Решение для автоматического отслеживания нагрузки на кластеры 1С различных версий, автоматического удаления сеансов по показателям кластера, удаления сеансов по показателям через телеграм бота, мониторинга журнала регистрации с возможностью блокирования входов и сброса сеансов для пользователей инициаторов событий, получение анализа ошибок журнала регистрации в телеграм.

1 стартмани

13.06.2024    5088    39    Garilia    3    

38
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Дмитрий74Чел 239 17.02.20 13:20 Сейчас в теме
Зачем всё это? Какова цель мониторинга памяти? Ваши процессы съедают всю доступную?
2. Sloth 393 18.02.20 09:38 Сейчас в теме
Круто, что oscript - кроссплатформенность! Печально, что COM - первый пункт вычеркиваем :(

Скорректирую предыдущий вопрос: что дает мониторинг именно в разрезе процессов? Т.е. почему не суммарный объем по всем процессам?
3. EShchavleva 28 18.02.20 11:42 Сейчас в теме
(2) Резко возросшее количество памяти, потребляемой рабочим процессом, часто свидетельствует о наличии проблемы в этом процессе. Оперативное обнаружение проблемы дает возможность принять меры по ее устранению до того, как это отразится на сеансах, которые находятся на этом процессе.
Собранные показатели можно использовать для анализа причин произошедшего. Для удобства анализа планирую расширить доработку, добавив мониторинг показателей сеансов пользователей.
4. Sloth 393 18.02.20 12:43 Сейчас в теме
(3)
Оперативное обнаружение проблемы дает возможность принять меры по ее устранению до того, как это отразится на сеансах, которые находятся на этом процессе.

Какая именно реакция происходит когда зафиксировано событие, что произошел "черезмерный" рост памяти (а черезмерный - это в данном контексте сколько) на процессе таком-то? Эта реакция автоматизирована или осуществляется человеком?
5. EShchavleva 28 18.02.20 18:17 Сейчас в теме
(4) Реакция осуществляется человеком и будет зависеть от проблемы. Например, если одновременно обнаружен пользовательский сеанс, потребляющий большое количество памяти, то реакция будет заключаться в удалении этого сеанса, выяснении того, что в этот момент делал пользователь и оптимизации этого инструмента для дальнейшего использования.
6. Sloth 393 19.02.20 09:23 Сейчас в теме
(5) Подскажите еще: сколько на текущий момент ИБ и общее количество сеансов на "подопытном"?

Совет: поставьте в поле "Units" у элемента данных "Rphost memory size (PID $1)" значение "kB", тогда величина объема памяти будет коректной ;)
7. serezh1a 177 23.05.23 11:07 Сейчас в теме
Вопрос от начинающего меня:

Требуются после привязки к объекту мониторинга какие-то дальнейшие манипуляции на Zabbix?

Все собирает, отправляет, но получить не могу. Отправляю, согласно документации того же Zabbix:(
Оставьте свое сообщение