Анализ полного технологического журнала, 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

См. также

HighLoad оптимизация Технологический журнал Системный администратор Программист Бесплатно (free)

Обсудим поиск и разбор причин длительных серверных вызовов CALL, SCALL.

24.06.2024    5303    ivanov660    12    

56

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

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

1 стартмани

15.11.2023    1610    8    AlexSTAL    0    

8

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

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

1 стартмани

13.11.2023    4807    9    AlexSTAL    0    

47

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

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

21.09.2023    7369    Andreynikus    14    

83

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

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

5 стартмани

18.09.2023    5176    huxuxuya    6    

27
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. user1534961 18.03.21 12:06 Сейчас в теме
Правильно ли я понимаю, вы предлагаете после оптимизации событий более 1 сек.определить общую сумму времени по каждому варианту событий и уменьшить количество наиболее часто используемых менее 1сек?
И проблема в большом количестве мелких вариантов, которые необходимо загрузить и оценить например, за месяц, а это физически невозможно?
Как насчет цепочек последовательных однотипных событий?
3. Axel2009 42 18.03.21 14:11 Сейчас в теме
(1) я предлагаю собирать полный тех журнал и фильтровать события, какие необходимы в конкретной ситуации.
она не подразумевает цепочку событий по времени.
user1534961; +1 Ответить
2. bugagashenka 203 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 3814 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 3814 18.03.21 14:48 Сейчас в теме
(5) назовите бизнес, где пишется 15 гб в минуту...
7. vesd 18.03.21 14:52 Сейчас в теме
(6)логистический процессинг маркетплейса например
10. bugagashenka 203 19.03.21 08:32 Сейчас в теме
(6) любая более-менее крупная торговая сеть. Я думаю, у БКС будет и поболее логов с их интенсивностью.
так же по опыту работы на базах 1Тб ++ могу написать, что "бизнес" никогда не будет тратить деньги на анализ больших логов... поэтому их особо никто анализировать и не умеет

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

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

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

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