Анализ полного технологического журнала, 100ГБ+

18.03.21

База данных - Технологический журнал

В этой статье рассматривается анализ полного технологического журнала, размер которого за 1 час достигает 50Гб+. Когда у какого-то пользователя что-то происходит, но не постоянно, и выделить определенного пользователя не получается, и проще собрать полный технологический журнал. Но на дальнейшем анализе доступные визуальные средства не выдерживают таких объемов, и просмотр журнала объемом 50Гб попросту вылетает. Но поведение 1С все же хотелось бы изучить и проанализировать, что происходит.

Я не буду рассматривать в этой статье, как запускать скрипт на BASH. На это есть куча других статей в интернете.

Анализом технологического журнала занимаюсь давно. И проанализировать DBMSSQL события, которые длятся свыше 1 секунды, не составляет труда. Логи занимают 1.5Гб места за сутки, загрузили в Инструменты разработчика и проанализировали узкие места.

Сделали рассылку топ-10 событий на почту, аномалии оптимизировали.

Все хорошо? Вроде, да!

Но иногда возникали проблемы, понимаешь, что все "долго" оптимизировано по максимуму, а у пользователей проблемы. Значит, есть события, которые выполняются меньше 1 секунды, или еще куча вариантов.

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

Хочется включить полный технологический журнал и по нему посмотреть, что происходит. Смотрим, что он занимает 130ГБ.

Загрузка 5ГБ логов может занимать несколько часов, а уж о 130ГБ нет и речи. Такой объем визуальные инструменты не загрузят в принципе.

И я перед собой поставил задачу:

  • отбирать события в технологическом журнале по определенным критериям отбора;
  • за определенное время (не только час, но и до секунды);
  • оставить их ровно в той же иерархии, как 1С пишет;
  • оставить только те файлы, в которых остались события по отбору;
  • чтобы можно было загрузить файлы теми же визуальными средствами.

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

В итоге получился вот такой скрипт на BASH (на момент написания статьи максимально оптимизированный):

#!/bin/bash
#$1 mindatetime
#$2 maxdatetime
#$3 log catalog, result filter
#$4 any filter condition
maincat="/d/UPP/logz_filtr$3"
rm -r ${maincat}
mkdir -p $maincat

mindatetime=$(echo $1"000000000000" | cut -c1-12)
maxdatetime=$(echo $2"999999999999" | cut -c1-12)
mindatehour=$(echo $mindatetime | cut -c1-8)
maxdatehour=$(echo $maxdatetime | cut -c1-8)


for file in $(find //server-name/logz_all/all/rphost_*/*.log -type f); do
  file_datehour_ext=${file##*/}
  file_datehour=${file_datehour_ext%.*}
  dir_m1=${file%/*}
  rphostname=${dir_m1##*/}
  dirname="${maincat}/${rphostname}"
  fullfilename="${dirname}/${file_datehour}.log"
  echo "current ${file}"
  if [[ ($file_datehour -le  $maxdatehour) && ($file_datehour -ge $mindatehour) ]] ; then
	  mkdir -p $dirname
	  cat $file |
	  perl -pe 's/\xef\xbb\xbf//g'|
	  awk -vORS= '{if(substr($0, 3, 1)==":" && substr($0, 6, 1)==".") print "\n" $0; else print "<line>" $0;}'|
	  #без времени выполнения
	  awk -v mindatetime=$mindatetime -v maxdatetime=$maxdatetime -v file_datehour=$file_datehour '{fulldatetime=file_datehour substr($0, 1, 2) substr($0, 4, 2); if (fulldatetime >= mindatetime && fulldatetime <= maxdatetime) print $0;}' 2>/dev/null|
	  grep -P "$4"|
	  perl -pe 's/<line>/\n/g' > "${fullfilename}"
	  numbstr=$(wc -l $fullfilename | awk '{ print $1 }')
	  echo "fullfilename=${fullfilename}, numbstr=${numbstr}"
	  if [[ $numbstr -lt 1 ]] ; then
	   rm -rf $fullfilename
	  fi
	  find $dirname -type d -empty -delete
  fi
done

Если запускать скрипт через файл, можно указывать входные параметры, и поменьше дергать сам текст скрипта

Параметры:

  1. минимальная дата + время, за которое отбирать события
  2. максимальная дата + время, за которое отбирать события
  3. каталог, в который будем выкладывать результат
  4. отбор событий, которые мы хотим отфильтровать и получить результат

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

time bash main.sh 210317190500 210317191500 _Пользователь Usr=Пользователь

Пример запуска данного скрипта по номеру соединения:

time bash main.sh 210317190500 210317191500 _123 ,SessionID=123,

Что необходимо поправить в скрипте:

  • основной результирующий каталог, в который можно складывать результат и вместе с 3им параметров выкладывать в разные папки:
maincat="/d/UPP/logz_filtr$3"
  • сетевой каталог, из которого считываем логи (можно указывать и локальный путь, если логи скопировали, или запустить на самом сервере 1с, но не рекомендую, идет нагрузка на процессор):
for file in $(find //server-name/logz_all/all/rphost_*/*.log -type f); do

Таким образом анализ технологического журнала с одного сервера анализируется без корректировок файла.

Анализ технологического журнала bash

См. также

Примеры настроек технологического журнала

Технологический журнал Платформа 1С v8.3 Бесплатно (free)

Шпаргалка по настройке технологического журнала.

27.04.2024    2990    kuzyara    5    

95

Магия преобразований Vector, часть 2: технологический журнал

Технологический журнал Мониторинг Абонемент ($m)

Как легко и быстро с помощью специализированных решений собирать, парсить и передавать логи и метрики.

1 стартмани

15.11.2023    903    4    AlexSTAL    0    

8

Магия преобразований: ЖР, ТЖ, RAS/RAC, логи - универсальное решение Vector

Мониторинг Журнал регистрации Технологический журнал Абонемент ($m)

Как легко и быстро с помощью специализированных решений собирать, парсить и передавать логи и метрики.

1 стартмани

13.11.2023    3347    5    AlexSTAL    0    

45

«Монитор» – простой анализ производительности

Администрирование СУБД Технологический журнал Бесплатно (free)

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

21.09.2023    6047    Andreynikus    14    

81

Экспорт технологического журнала 1С в Elastic с помощью Logstash

Технологический журнал Платформа 1С v8.3 Абонемент ($m)

Целью данного решения является организация хранения и анализа данных из технологического журнала 1С с использованием стека Elasticsearch + Logstash + Kibana.

5 стартмани

18.09.2023    3663    huxuxuya    3    

24

Мобильный помощник эксперта 1С (приложение android, позволяющее строить отчеты на СКД по логам технологического журнала и не только)

Технологический журнал Мониторинг Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

16.05.2023    3562    capitan    0    

24

Разбор технологического журнала без боли и страданий

Технологический журнал Абонемент ($m)

Технологический журнал - мощный инструмент логирования, используемый для анализа проблем производительности 1С. Но он обладает одним огромным недостатком, в "сыром виде" он почти не поддается адекватному анализу из-за своей структуры. Существует довольно много способов "разобрать" технологический журнал, но все опробованные способы обладают теми или иными недостатками. Предлагаю вам мой вариант "велосипеда" для разбора ТЖ и хранения разобранного в различных форматах.

1 стартмани

12.12.2022    8554    39    Segate    26    

90
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. user1534961 18.03.21 12:06 Сейчас в теме
Правильно ли я понимаю, вы предлагаете после оптимизации событий более 1 сек.определить общую сумму времени по каждому варианту событий и уменьшить количество наиболее часто используемых менее 1сек?
И проблема в большом количестве мелких вариантов, которые необходимо загрузить и оценить например, за месяц, а это физически невозможно?
Как насчет цепочек последовательных однотипных событий?
3. Axel2009 42 18.03.21 14:11 Сейчас в теме
(1) я предлагаю собирать полный тех журнал и фильтровать события, какие необходимы в конкретной ситуации.
она не подразумевает цепочку событий по времени.
user1534961; +1 Ответить
2. buganov 200 18.03.21 13:32 Сейчас в теме
Сколько по времени будут обрабатываться логи размером 50, 100 Гб?
8. Axel2009 42 18.03.21 14:54 Сейчас в теме
(2) ну вот у меня логи с историей 2 часа. значит хранится 12, 13, 14 (текущий час).
если я выбираю события из лога по пользователю с 14:00 по 14:30. то все файлы за 12 и 13 час будут пропускаться скриптом. и такой отбор идет порядка 8 минут.
в целом 120гб анализируются порядка 40 минут.

можно закомментировать сравнение до минут, если нет необходимости отбора по минутам. будет работать на 25% быстрее.
4. quazare 3635 18.03.21 14:18 Сейчас в теме
если речь идет о 1с-системах, то логи 100 гб ++ - это мегазапущенная база.

так же по опыту работы на базах 1Тб ++ могу написать, что "бизнес" никогда не будет тратить деньги на анализ больших логов... поэтому их особо никто анализировать и не умеет
5. vesd 18.03.21 14:40 Сейчас в теме
(4)может высоконагруженная? фулл ТЖ может легко по 15 Гб в минуту писать
9. Axel2009 42 18.03.21 15:16 Сейчас в теме
(4)
1. мегазапущенная в чем?
2. ну вот наверное статья и помогает проанализировать большие логи, выделив нужное )
6. quazare 3635 18.03.21 14:48 Сейчас в теме
(5) назовите бизнес, где пишется 15 гб в минуту...
7. vesd 18.03.21 14:52 Сейчас в теме
(6)логистический процессинг маркетплейса например
10. buganov 200 19.03.21 08:32 Сейчас в теме
(6) любая более-менее крупная торговая сеть. Я думаю, у БКС будет и поболее логов с их интенсивностью.
так же по опыту работы на базах 1Тб ++ могу написать, что "бизнес" никогда не будет тратить деньги на анализ больших логов... поэтому их особо никто анализировать и не умеет

Согласно моему опыту работы в базах 1Тб ++ бизнес всегда ищет решения и анализа больших логов. Либо человека, который умеет/желает научиться. Ибо если бизнес не озаботится о производительности заранее, в один момент может все встать колом и тогда уже можно потерять гораздо больше. Опять же, речь про действительно интенсивный бизнес 24/7, где час простоя стоит миллионы.
17. asved.ru 36 25.03.21 10:30 Сейчас в теме
(6) Кажется, вы путаете журнал транзакций СУБД и технологический журнал платформы.
11. PerlAmutor 129 20.03.21 06:17 Сейчас в теме
Интересно зачем нужен bash скрипт, если в нем используется "perl", на котором можно сделать все тоже самое и даже больше?

А вообще есть еще и специализированные инструменты, например Hyperscan, преимущество которого заключается в том, что он одновременно умеет анализировать один и тот же текст по огромному количеству регулярных выражений: https://github.com/intel/hyperscan

Но я надеюсь разработчики 1С нас услышат и сделают возможность писать ТЖ не в log файлы, а в NoSQL базу например, чтобы этот ад с регулярными выражениями закончился.
Ambakollajder; cleaner_it; +2 Ответить
13. buganov 200 20.03.21 11:42 Сейчас в теме
(11) вообще, лучше не баш и не перл, а питон. Как минимум тем, что может утилизировать все ядра процессора. А можно еще и для эластика готовить выгрузки, вот Вам и NoSQL
14. Shmell 536 21.03.21 10:51 Сейчас в теме
(13) можно рассмотреть такой стек, там и nosql и эластик

https://github.com/NuclearAPK/go-techLog1C
Plotks2017; buganov; +2 Ответить
15. buganov 200 21.03.21 12:47 Сейчас в теме
(14) это очень интересно. Спасибо
12. kirillkr 29 20.03.21 08:04 Сейчас в теме
(11), не знаком с NoSQL (вернее очень поверхностно), но надеюсь, что нет. Хватило попытки перейти на SQLite технологического журнала. Ну интенсивных базах пришлось возвращать старый добрый текстовый формат.
Про Hyperscan - нет собранных релизов под... Вообще нет сборок, только исходники.
16. triviumfan 93 21.03.21 22:30 Сейчас в теме
Хочется включить полный технологический журнал и по нему посмотреть, что происходит.
Прикрепленные файлы:
tormozit; Дмитрий74Чел; Eremkin; SxF; +4 Ответить
18. Serg O. 268 09.09.21 10:22 Сейчас в теме
(16) Всех вылечат...
Главное, что бы не как Ай-Болит с картинки :)
Прикрепленные файлы:
19. Дмитрий74Чел 234 20.01.22 18:49 Сейчас в теме
(16) Согласен. Автор предлагает писать полный ТЖ чтоб потом в нем искать записи по одному пользователю. Мда.
Если кто не в курсе - ТЖ настраивается, в т.ч. можно писать события только по одному пользователю или по одному сеансу.
20. пользователь 20.10.22 12:28
Сообщение было скрыто модератором.
...
Оставьте свое сообщение