Ротация логов 1C

Исходя из практики могу отметить что большинство пользователей не подозревают о том что обмен с 1С создает логи которые занимают достаточно большое количество места, из последнего примера 60 гигабайт логов 1С в проекте размером чуть более 30. Существуют методы очистки через крон, но ИМХО это достаточно костыльное решение так как подчеркиваю пользователи не всегда подозревают что забивает место или где они находятся.

Предлагаю как вариант сделать возможность:

  • отключения ( а скорее даже наоборот возможность включать логи если это нужно )
  • если логи включены задавать время жизни таких логов и удалять те которые старше N дней
  • архивировать успешно завершенные gzip-ом

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

7 лайков

И если уж делать логи отключаемыми(включаемыми) - то добавить в них недостающие условия. А то в коде обработка события есть, а в логи не выводится. В итоге ответ на вопрос почему обмен прервался или что-то не завершилось в логах искать бесполезно. Не загрузились товары частично? В логах информации не будет. Не прогрузились фотки? Тоже информации не будет. Прервался по каким-то причинам обмен остатками и ценами? Вообще ноль информации, ни в логах записей, ни уведомления администратора - ничего. Завершился ли успешно? Таких записей в логах тоже нет. Начало - есть, а вот конца - нет, остается гадать. Да и сами записи логов было бы неплохо поправить, а то изменение количества и цены обозначается как Added product. Какой продукт, куда эддед… хорошо хоть в конце есть приписка сколько и чего. Что кстати тоже условно - потому как цена отображается исключительно главная, а то что в различных соглашениях - нет.

Скажу больше, 10-и гигабайтный магазин на выделенном сервере с диском в террабайт через три месяца лег. Причина - всё место на диске заняли логи обмена с 1С УТ (заказами), так как 1С шлет обратно на сайт измененные заказы, которые сайт и в помине не обрабатывает.

2 лайка

Да, если есть частый обмен с заказами, только за сутки можно заполнить несколько Гб.

Вот кстати до сих пор загадка - зачем принимать файлы и ничего с ними не делать, просто сохранять на диск. Первое что приходит на ум - надо актуализировать состав заказов, что возможно, из них, но нет - такого не происходит. Они просто так валяются, не обработанные. Вроде как идея - статусы загрузить… но почему только статусы, ведь содержимое в разы важнее? Тем более что статусы отправляет одна единственная конфигурация 1С, а вот состав заказа - все. И на сайте есть всё чтобы обработать эти изменения - вот заказы, вот товары, вот коды, вот цены, вот количества… - вообще всё что нужно в наличии.

1 лайк

Здравствуйте! Я правильно понял, что файлы с папки /www/var/files/1/exim нужно удалить, чтобы уменьшить место на диске?

Можно и нужно удалять мусор. :wink:

Также, хочу отметить и обратить внимание разработчиков @imac тот факт, что в маркетплейсе схожая проблема с файлами вендоров. Не смотря на то, что в мультивендоре исключена возможность использования 1С, тем не менее, мусорных файлов загруженных продавцами накапливается выше крыши, и вендоров этот факт совсем не заботит. По моему мнению необходима возможность отслеживать этот процесс, т.е. иметь статистику, какую-то сводную таблицу в админке с информацией о объеме занимаемого пространства файлами по всем вендорам, чтобы видеть у кого сколько они занимают место на данный момент времени. Иначе, если вендоров сотня и более, тогда у владельца нет никакой возможности отслеживать это, и тем более открывать и просматривать содержимое их папок. Еще будет не лишним иметь возможность опционально ограничивать разрешенный общий размер отведенного пространства для файлов вендора, например “не более чем 1МБ”, и лучше, если ограничивать можно было как глобально, так и каждого вендора в отдельности, чтобы можно было их мотивировать на своевременную очистку. Кому по объективным причинам необходимо больше места, тогда можно будет увеличить объем индивидуально.

Раз уж разработчики наверняка займутся проблемой забивания свободного места логами от 1С, то посмотрят и в сторону файлов вендоров.

У нас есть функция, которая чистит файлы с заказами или полное удаление директории. Необходимо тестировать для новых версий CMS, хотя проблем быть не должно.

Функцию можно поставить в свой контроллер и на CRON, или в контроллер модуля обмена.
/app/addons/rus_exim_1c/controllers/frontend/exim_1c.php Примерно так https://skr.sh/s2bQ4GF6ITR

function fn_sw_1c_clean_start(){
	
	$addon_settings['days_margin'] = 10;    //Оставляет данные за последние N дней
	$addon_settings['clean_folders'] = 'N'; //Полная очистка директории если == Y (Y или N)
	$addon_settings['clean_orders'] = 'Y'; //Очистка файлов заказов  (Y или N)

	if(empty($addon_settings['days_margin']){
		$addon_settings['days_margin'] = 10;
	}

	$dir_root = Registry::get('config.dir.root');
	$path = '/var/files/1/exim/';
	$data = fn_get_dir_contents($dir_root.$path,true,false,'','',false);

	# example
	/*$ex_date = array(
		0 => '1C_'.date('dmY'),
		1 => '1C_'.date('dmY', time() - 86400),
		2 => '1C_'.date('dmY', time() - 86400*2)
	);
	*/
	$day = 1; //start margin
	$ex_date = array();

	while ($x<=$addon_settings['days_margin'])
	{
		$ex_date[] = '1C_'.date('dmY', time() - 86400 * $day);
		$day++;
	}

	if(!empty($data)){
		foreach($data as $data_dir){			

			if(in_array($data_dir, $ex_date)){
				continue; 
			}

			$files = array();

			if($addon_settings['clean_folders'] == 'Y'){

				rmdir($dir_root.$path.$data_dir);

			}elseif($addon_settings['clean_folders'] == 'N' && $addon_settings['clean_orders'] == 'Y'){

				$files = fn_get_dir_contents($dir_root.$path.$data_dir,false,true,'','',false);


				if(!empty($files)){
					foreach($files as $files_elm){

						$findme   = 'orders-';
						$pos = strpos($files_elm, $findme);

						if($pos === false){
							continue;
						}else{
							fn_rm($dir_root.$path.$data_dir.'/'.$files_elm);
						}

					}
				}
			}

		}
	}

	fn_echo('OK'); 
	return;
}
1 лайк

Здравствуйте, все зависит от пути где лежат логи с 1С , то есть папка к рутовой директории + var/files/*/exim где * - айди магазина, по умолчанию это 1, но если несколько витрин то будут другие айди.

В целом годное решение, но я бы ещё добавил выборку по айдишкам витрин, в строке
$path = ‘/var/files/1/exim/’;
не всегда 1 а зависит от витрины.

Так же лучше делать привязку к дате создания директории а не к названию, тогда будет более гибко к названиям.

2 лайка

Подскажите, каким образом отключить логи 1С, уже второй раз место забивается…

когда я задолбался с тем что не уследишь- и сайт ложится, потому что на полуторатеррабайтном сервере заканчивается место из за логов 1С - поставил в крон задачу на выполнение раз в сутки в ночь:
find /путь/до/корня/сайта/var/files/1/exim/* -type d -name “1C_*” | xargs rm -dfR
и теперь в полночь удаляются все папки от 1С

2 лайка

find /home/sait/www/var/files/1/exim/* -type d -name “1C_*” | xargs rm -dfR

Вот так?) Ну и задание на 1 раз в сутки

1 лайк