Как анализировать технологический журнал 1С с помощью Perl и регулярных выражений

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Работа с технологическим журналом (ТЖ) — это одна из ключевых компетенций эксперта по технологическим вопросам. Логи 1С могут достигать гигантских размеров, и ручной анализ таких файлов невозможен. В данной статье мы проанализируем ситуацию, когда необходимо быстро и эффективно обрабатывать текст ТЖ в условиях ограниченных инструментов (например, на экзамене или на «голом» сервере Linux), используя perl и sed.

Разбираем основы: что такое цепочки команд в консоли

Часто в статьях на ИТС можно встретить сложные конструкции, объединяющие несколько команд через символ вертикальной черты |. Давайте выясним причину такой структуры. Этот символ называется «пайп» (pipe), и он передает результат работы одной программы на вход другой.

Рассмотрим пример классической очистки лога от специфических данных для группировки:


cat file | sed -r 's/.{8}-.{4}-.{4}-.{4}-.{12}/{GUID}/g' | sed -r 's/\:[0-9]{4,5}/{PORT}/g' | sed -r 's/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/{ADDR}/g'

Проанализируем по шагам, что происходит в этой цепочке:

  1. Команда cat file считывает содержимое файла и отправляет его в поток.
  2. Первый sed -r ищет последовательности, похожие на GUID (например, 5927-hdoc...), и заменяет их на текст {GUID}. Флаг g означает «глобально», то есть во всей строке.
  3. Второй sed принимает уже измененный текст и ищет в нем номера портов (двоеточие и 4-5 цифр), заменяя их на {PORT}.
  4. Третий sed находит IP-адреса и заменяет их на {ADDR}.

В результате мы получаем «обезличенный» лог, который гораздо проще анализировать и группировать, так как уникальные идентификаторы больше не мешают находить повторяющиеся события.

Загадочный флаг perl -pe: расшифровка

Многие авторы считают использование perl более удобным, чем sed. Разберем, что означает конструкция perl -pe 's/найти/заменить/'. Это так называемый «one-liner» — полноценная программа на языке Perl, умещающаяся в одну строку.

Рассмотрим подробнее используемые ключи:

Таким образом, perl -pe работает как продвинутый sed, но предоставляет гораздо больше возможностей для сложной логики.

Преимущества Perl перед стандартными утилитами

Почему для анализа ТЖ мы выбираем именно Perl? Выясним причину: регулярные выражения в Perl (PCRE) намного мощнее тех, что используются в базовом sed или grep. В Perl мы можем использовать:

Практические примеры анализа ТЖ через Perl

Давайте разберем по шагам, как можно не просто заменять текст, но и анализировать данные. Если нам нужно просуммировать время всех событий в логе, мы можем использовать флаг -n (который похож на -p, но не печатает строки автоматически) и блок END.

Посмотрим на пример команды для суммирования длительности (второе поле в ТЖ):


perl -F',' -ane '$total += $F[1]; END { print "Общее время: " . $total/1000000 . " сек\n" }' logs.log

В этом примере:

Работа с многострочными событиями

Технологический журнал 1С коварен: SQL-запросы или планы выполнения могут занимать десятки строк. Обычные утилиты, работающие построчно, «сломаются» на таком событии. В Perl мы можем изменить разделитель записей.

Проанализируем ситуацию: каждое новое событие в ТЖ начинается с метки времени (например, 12:00.0000-0). Мы можем сказать Perl считывать файл не до символа переноса строки, а до следующей метки времени.


perl -0777 -ne 'while (/(\d{2}:\d{2}\.\d+-\d+,DBMSSQL,.*?,Context=(.*?)\n)/gs) { print "Длительный контекст: $2\n" }' log.log

Здесь флаг -0777 заставляет Perl считать весь файл целиком в память (будьте осторожны с очень большими файлами!), что позволяет искать регулярным выражением текст, содержащий переносы строк.

Современные альтернативы внутри 1С

Если вы работаете не в консоли сервера, а внутри самой платформы 1С, стоит помнить, что начиная с версии 8.3.24, в платформе появилась встроенная поддержка регулярных выражений. Теперь мы можем решать задачи парсинга прямо в коде 1С, используя объект РегулярныеВыражения.

Посмотрим на пример кода:


РегВыр = Новый РегулярныеВыражения();
Результат = РегВыр.Найти(ТекстЛога, "\d{2}:\d{2}\.\d+-\d+,(\w+)");
Для Каждого Совпадение Из Результат Цикл
    Сообщить("Найдено событие: " + Совпадение.Группы[0].Значение);
КонецЦикла;

Однако на экзамене «1С:Эксперт» вам, скорее всего, придется работать с «голой» операционной системой, поэтому навыки владения perl и sed остаются критически важными.

Инструменты для отладки регулярных выражений

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

При работе с ним важно:

  1. Выбирать режим PCRE (Perl Compatible Regular Expressions) в боковом меню.
  2. Вставлять фрагмент реального лога в поле Test String.
  3. Изучать раздел Explanation, где подробно расписано, какая часть регулярки за что отвечает.

Итоги и рекомендации

Мы рассмотрели основные подходы к анализу ТЖ через Perl. Подытожим наши выводы:

Помните, что Perl — это инструмент, который есть почти на каждом сервере Linux «из коробки», и умение написать на нем одну строку кода может сэкономить вам часы ручного разбора логов при расследовании технологических проблем.

← На главную