bash, еще bash, еще много-много bash

29.10.18

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

Делюсь своим опытом параллельного разбора технологического журнала. По мотивам статьи https://infostart.ru/public/928184.

Оригинальная публикация была сделана еще год назад. Тогда пришлось вручную запускать 15 скриптов для разбора технологического журнала (около 60 Гб в первые дни). Перспектива делать это каждый день на протяжении двух недель меня не обрадовала. Поэтому решил поизучать мануалы по bash для написания управляющего скрипта. Приятным бонусом стала информация о том, что можно реализовать параллельный запуск. В итоге написал скрипт:

#!/bin/bash
#main.sh - one script to rule them all
#scr/* script_dir
#$1 tech_log_dir
#$2 result_dir

if [ "$1" = "" ] 
then 
echo 'set param tech_log_dir (1)'
exit
fi

tech_log_dir=$1

if [ "$2" = "" ] 
then 
result_dir=$(basename $1)
else
result_dir=$2
fi

if ! [ -d $result_dir ]
then
mkdir $result_dir
fi

for i in scr/*.sh; do $i $tech_log_dir $result_dir & done

Реализованы два варианта запуска:
$ bash main.sh /e/techlog - анализирует данные в каталоге /e/techlog, создает в каталоге скрипта подкаталог techlog и складывает в него результаты разбора
$ bash main.sh /e/techlog /f/result - анализирует данные в каталоге /e/techlog и складывает в /f/result результаты разбора

Рабочие скрипты складываются в подкаталог /scr каталога расположения основного скрипта.

Примеры адаптации скриптов с ИТС под передаваемые параметры и структуру каталогов технологического журнала:

#!/bin/bash
#scr/long_transactions.sh
cat $1/events/rphost*/*.log | \
perl -n -e 'if (/^\d\d:\d\d\.\d+/) {$event =~ s/.\n/<line>/g; print $event."\n"; $event = "";} $event .= $_; END{print $event};' | \
perl -pe 's/\xef\xbb\xbf//g' | \
grep -P "SDBL.*Func=(Commit|Rollback)Transaction.*Context" | \
perl -pe 's/^\d+:\d+.\d+-//g' | \
perl -pe 's/,SDBL,.*Context.*<line>[ \t]+/,Context=/g' | \
perl -pe 's/,SDBL,.*Context=/,Context=/g' | \
sed 's/<line>//g' | \
awk -F',Context=' '{sum[$2]+=$1; count[$2]+=1;} END {for(i in sum) {print sum[i] " " sum[i]/count[i] " " count[i] " " i}}' | \
sort -rnb | \
head -n 5 > $2/long_transactions.txt
#!/bin/bash
#scr/long_calls.sh
cat $1/events/rphost*/*.log | \
perl -n -e 'if (/^\d\d:\d\d\.\d+/) {$event =~ s/.\n/<line>/g; print $event."\n"; $event = "";} $event .= $_; END{print $event};' | \
perl -pe 's/\xef\xbb\xbf//g' | \
grep -P ",CALL,.*,Context=" | \
perl -pe 's/<line>//' | \
perl -pe 's/^\d+:\d+.\d+-//g' | \
perl -pe 's/,CALL,.*Context/,Context/g' | \
perl -pe 's/,Interface=.*OutBytes=\d+//g' | \
awk -F',Context=' '{sum[$2]+=$1; count[$2]+=1;} END {for(i in sum) {printf "%d %d %d %s\n",sum[i],sum[i]/count[i], count[i],i}}' | \
sort -rnb | \
head -n 5 > $2/long_calls.txt

Эффект от параллельного выполнения моих пятнадцати скриптов:

 

 

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

См. также

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

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

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

1 стартмани

15.11.2023    772    4    AlexSTAL    0    

8

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

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

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

1 стартмани

13.11.2023    2973    4    AlexSTAL    0    

42

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

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

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

21.09.2023    5732    Andreynikus    14    

80

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

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

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

5 стартмани

18.09.2023    3287    huxuxuya    3    

23

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

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

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

16.05.2023    3322    capitan    0    

23

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

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

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

1 стартмани

12.12.2022    8162    37    Segate    26    

86

Выполняем в СУБД запрос из ТЖ

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

Обработка для подстановки или нумерации параметров в тексте запроса из технологического журнала.

1 стартмани

24.11.2022    2856    3    VKislitsin    1    

17
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. nnsidorov22 20.01.21 22:31 Сейчас в теме
Добрый день. Можете помочь разобрать следующий скрипт: perl -n -e 'if (/^\d\d:\d\d\.\d+/) {$event =~ s/.\n/<line>/g; print $event."\n"; $event = "";} $event .= $_; END{print $event};' ?
Я понимаю что идет преобразование многострочного текста к однострочному, но пошагово не понимаю логику скрипта. Для чего идет вот этот кусок скрипта: $event = ""? И почему в конце ещё раз выводится переменная: print $event?
Оставьте свое сообщение