Для клиентов

Логин:
Пароль:

Загруженность

16.04.2024 - 26.04.2024

Календарь

Ссылки по теме

Zabbix - мониторинг обновлений Битрикс (Б24)

Заметки на полях

Совсем не так давно я описывал как связать проверку обновлений wordpress и zabbix. Сегодня речь пойдет об аналогичной функции, но для Битрикс24 (коробочная версия). Думаю, что аналогичный способ будет полезен и для обычного Битрикс.

Принцип работы схемы остается полностью аналогичным: zabbix запрашивает количество неустановленных обновлений у сайта, если оно изменилось -- предупреждает вас об этом.

Для обработки запросо на стороне сайта необходим специальный скрипт. Вот его содержание:

<?php

// отключаем авторизацию
define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS",true);
define('CHK_EVENT', true);

// подключаем необходимые для работы стандартные модули
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php" ) ;

// подключаем класс для запроса обновлений
require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/classes/general/update_client.php');

// запрашиваем информацию по обновлениям
$errors = null;
$stableVersionsOnly = COption::GetOptionString('main', 'stable_versions_only', 'Y');
$arUpdateList = CUpdateClient::GetUpdatesList($errors, LANG, $stableVersionsOnly);

// формируем массив с нужными данными
$updates=array(
	'system' => 0,
	'modules' => 0,
	'lang' => 0,
	'langOther' => 0,
);
	// need update tool update
	if ( isset($arUpdateList["UPDATE_SYSTEM"]) )
		$updates['system'] = 1;
// кусочек из /bitrix/modules/main/admin/update_system.php для анализа и подсчета количества обновлений
if (isset($arUpdateList["MODULES"]) && is_array($arUpdateList["MODULES"]) && isset($arUpdateList["MODULES"][0]["#"]["MODULE"]) && is_array($arUpdateList["MODULES"][0]["#"]["MODULE"]))
	$updates['modules'] = count($arUpdateList["MODULES"][0]["#"]["MODULE"]);
if (isset($arUpdateList["LANGS"]) && is_array($arUpdateList["LANGS"]) && isset($arUpdateList["LANGS"][0]["#"]["INST"]) && is_array($arUpdateList["LANGS"][0]["#"]["INST"]) && is_array($arUpdateList["LANGS"][0]["#"]["INST"][0]["#"]["LANG"]))
	$updates['lang'] = count($arUpdateList["LANGS"][0]["#"]["INST"][0]["#"]["LANG"]);
if (isset($arUpdateList["LANGS"]) && is_array($arUpdateList["LANGS"]) && isset($arUpdateList["LANGS"][0]["#"]["OTHER"]) && is_array($arUpdateList["LANGS"][0]["#"]["OTHER"]) && is_array($arUpdateList["LANGS"][0]["#"]["OTHER"][0]["#"]["LANG"]))
	$updates['langOther'] = count($arUpdateList["LANGS"][0]["#"]["OTHER"][0]["#"]["LANG"]);

// формирование вывода
if ( (!isset($_GET['k'])) or (!isset($updates[$_GET['k']])) ) {
	foreach ($updates as $k=>$l) {
		echo $k.": ".$l."\n";
	}
} else {
	echo $updates[$_GET['k']];
}
?>

Вызов этого скрипта также, как и в решении для wordpress может быть как с выводом количества всех доступных обновлений, так и по одному из параметров:

  • system - обновление системы обновлений Б24 (и ядра в последствии),
  • module -  обновление модулей Битрикс24,
  • lang - обновление языковых файлов,
  • langOther - обновление других (неустановленных?) языков.

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

UPD 28.08.2019:
Добавил в скрипт еще реакцию на обновление ядра системы, а то до этого он не выдавал необходимость обновления модулей и пр. Теперь есть параметр system в котором будет единица, если есть обновление ядра системы. Обычно после этого и модули для обновления также появляются.