Это руководство позволяет настроить полный сбор всех событий сервера 1С в заданную папку для последующего анализа производительности, отладки ошибок и аудита. Процесс состоит из трех ключевых этапов: настройка, сбор и анализ.
Этап 1: Подготовка и настройка (конфигурационный файл logcfg.xml)
Цель: Создать и активировать конфигурационный файл для сбора логов.
1.1. Создание файла конфигурации
- Перейдите в каталог конфигурации сервера 1С (обычно %PROGRAMFILES%\1cv8\conf или /opt/1cv8/conf для Linux).
- Создайте файл logcfg.xml.
- Скопируйте в него содержимое ниже. Внимание! Измените путь D:\log\28-08-23 на актуальный для вашей системы.
xml
<?xml version="1.0" encoding="UTF-8"?>
<log>
<!-- Отключение создания дампов для экономии места -->
<dump create="false"/>
<!-- Основное правило логирования: ВСЕ события в указанную папку -->
<rule name="FullLog">
<!-- Путь к каталогу логов. Замените на свой! -->
<file path="D:\log\28-08-23\%Y%m%d%H.log"/>
<!-- Хранить файлы логов 5 дней -->
<history dir="D:\log\28-08-23\" length="5d"/>
<!-- Фильтр: событие без имени == ВСЕ события -->
<event>
<neq property="name" value=""/>
</event>
</rule>
</log>
Ключевые параметры:
- file path: Шаблон имени файла. %Y%m%d%H создаст файл для каждого часа (напр., 2024011514.log).
- history length="5d": Автоматическое удаление логов старше 5 дней.
- <neq property="name" value=""/>: Логировать любое событие, у которого есть имя. Это захватывает все.
1.2. Активация конфигурации и проверка прав
- Перезапустите сервер 1С (все рабочие процессы или весь кластер). Без этого конфигурация не применится.
- Проверьте права доступа: Учетная запись, от которой работает служба сервера 1С (usr1cv8 и т.п.), должна иметь полные права на запись в целевую папку (D:\log\28-08-23\).
- Проверка успешности: После перезапуска в указанной папке должны начать появляться файлы логов (например, 2024011514.log).
Этап 2: Сбор и управление логами
После активации конфигурации логи пишутся автоматически.
2.1. Проверка состояния через rac (консоль управления)
Убедитесь, что сервер "видит" вашу конфигурацию:
bash
# Перейдите в каталог утилиты rac (напр., %PROGRAMFILES%\1cv8\8.3.xx.xxxx\bin)
rac logcfg list --cluster=<адрес_вашего_кластера>:<порт> --cluster-user=<admin> --cluster-pwd=<пароль>
В выводе должно отобразиться ваше правило FullLog.
2.2. Рекомендации по эксплуатации
- Ротация логов: Используйте параметр history в конфиге или настройте внешнюю очистку (например, задача Windows/Linux). Не храните логи вечно.
- Дисковое пространство: Полный лог может быть очень объемным. Мониторьте размер папки. Для постоянного мониторинга используйте выборочные правила (как в п.1.3).
Этап 3: Парсинг и анализ логов в 1С
Для анализа создайте внешнюю обработку (.epf) или используйте стандартную из ИТС.
3.1. Чтение файлов логов
bsl
// Укажите путь к каталогу с логами
КаталогЛогов = "D:\log\28-08-23";
// Находим все файлы .log
МассивФайлов = НайтиФайлы(КаталогЛогов, "*.log", Ложь);
Для Каждого ФайлЛога Из МассивФайлов Цикл
ЧтениеТекста = Новый ЧтениеТекста(ФайлЛога.ПолноеИмя, КодировкаТекста.UTF8);
Пока Не ЧтениеТекста.КонецПотока() Цикл
СтрокаЛога = ЧтениеТекста.ПрочитатьСтроку();
// ... Анализ строки ...
КонецЦикла;
КонецЦикла;
3.2. Разбор строки лога и анализ
Каждая строка — это событие с параметрами в формате Key=Value;.
bsl
// Пример строки: txn=1;DBMSSQL;Duration=1563;Sql=SELECT ...
Функция РазобратьСтрокулога(СтрокаЛога)
МассивПараметров = СтрРазделить(СтрокаЛога, ";", Ложь);
СтруктураСобытия = Новый Структура;
Для Каждого Пар Из МассивПараметров Цикл
Разделитель = Найти(Пар, "=");
Если Разделитель > 0 Тогда
Ключ = Лев(Пар, Разделитель - 1);
Значение = Сред(Пар, Разделитель + 1);
СтруктураСобытия.Вставить(Ключ, Значение);
КонецЕсли;
КонецЦикла;
Возврат СтруктураСобытия;
КонецФункции
3.3. Практические примеры анализа
Добавьте в обработку таблицу значений (ТВ_Результат) с колонками: Время, ИмяСобытия, Длительность, Контекст, Sql и т.д.
bsl
// ... внутри цикла чтения файла ...
Событие = РазобратьСтрокулога(СтрокаЛога);
// Пример 1: Сбор всех медленных SQL-запросов (> 1 сек)
Если Событие.Свойство("Name") И Событие.Name = "DBMSSQL" Тогда
Длительность = Число(Событие.Duration);
Если Длительность > 1000 Тогда
НоваяСтрока = ТВ_Результат.Добавить();
НоваяСтрока.ИмяСобытия = Событие.Name;
НоваяСтрока.Длительность = Длительность;
НоваяСтрока.Sql = Событие.Sql;
КонецЕсли;
КонецЕсли;
// Пример 2: Сбор всех исключений (ошибок)
Если Событие.Свойство("Name") И Событие.Name = "EXCP" Тогда
НоваяСтрока = ТВ_Результат.Добавить();
НоваяСтрока.ИмяСобытия = "ОШИБКА";
НоваяСтрока.Контекст = Событие.Context; // Здесь часто есть текст ошибки
КонецЕсли;
3.4. Визуализация и экспорт результатов
- Вывод в табличный документ: Отсортируйте ТВ_Результат по Длительность (убывание) и выведите топ-10.
- Группировка: Сгруппируйте данные по ИмяСобытия или Контекст для анализа частоты.
- Экспорт в Excel:bslОтчет = Новый ТабличныйДокумент;
// ... заполнение отчета из ТВ_Результат ...
Отчет.Записать("D:\Отчеты\Топ_Медленных_Запросов.xlsx", ТипФайлаТабличногоДокумента.XLSX);
Важные рекомендации и предупреждения
- Тестирование на тестовом контуре: Всегда проверяйте конфигурацию и анализ на тестовом сервере, чтобы не перегрузить диск рабочей системы.
- Селективный сбор для продакшена: Полный лог (<neq property="name" value=""/>) используйте только для кратковременной детальной диагностики. Для постоянного мониторинга настройте целевые правила (см. п.1.3).
- Мониторинг места: Настройте алерты на заполнение диска, где хранятся логи.
- Автоматизация анализа: Рассмотрите использование скриптов (PowerShell, Python) для ежедневного парсинга логов, отправки отчетов по email или интеграции с системами мониторинга (Zabbix, Prometheus).
Этот подход обеспечивает полный контроль над журналированием и позволяет эффективно диагностировать проблемы производительности и стабильности в 1С:Предприятие.