[devel] I: утилита logoved-report для обработки логов. 2-Установка и работа

Igor Vlasenko vlasenko на imath.kiev.ua
Пт Сен 21 20:34:21 MSK 2018


Установка и работа.

1. Установка.
 git clone git://git.altlinux.org/people/viy/packages/logoved.git logoved.git
для работы нужно установить noarch пакет perl-Logoved-Stream из Сизифа.

2. Работа с утилитой на примере beehive.

Переходим в склонированный logoved.git.
Копируем себе beehive-logs
 rsync -avp --delete-after git.altlinux.org::beehive-logs/Sisyphus-x86_64/latest/error .

2.1 Запускаем утилиту.
 time ./logoved-report -v error/*
так как в beehive более 500 логов, запускаем с опцией -v,
чтобы не скучать, следя за сообщениями
[...]
parsing error/zoneminder-1.30.4-alt3.S1 ...
parsing error/zrtpcpp-2.3.4-alt2.1 ...  
./logoved-report -v error/*  206,93s user 3,37s system 99% cpu 3:32,32 total

три минуты, и все 500+ логов разобраны.

Замечание.
Таким образом мы обрабатываем все логи, которые есть в beehive.
Если же есть желание разобрать только свои логи, (пакетов, где leader <ваш логин>)
то поможет perl-ALTLinux-ACL >= 0.20 .
команда в таком случае будет иметь вид
 time ./logoved-report `ls error/* | altlinux-acl-filter-list-by-access --nvr --leader --user <ваш логин>`
сокращенно
 time ./logoved-report `ls error/* | altlinux-acl-filter-list-by-access --nvr -l -u <ваш логин>`

2.2 Результат запуска.

Итак, после запуска ./logoved-report
в текущем каталоге появилась папка LOGS
а в ней файл

00FIXSCRIPT

и большое количество папок

apt-E-broken
apt-E-ghost
apt-E-package-not-found
apt-E-version-not-found
brp-alt-028-check_contents
brp-alt-032-compres-man-page-broken-reference
brp-alt-verify-elf-error
build-compile-error
build-Werror
check-failed
conf-automake-version
conf-c++
conf-c-compiler
conf-cmake-configure-failed
conf-configure-error
conf-configure-error-C-compiler-cant-create
conf-configure-error-fortran-dont-compile
conf-gir-vala
conf-pkgconfig
[...]
и т.д.

Пройдемся по подпапкам.
В каждой папке собраны символические ссылки (опция по умолчанию)
на лог файлы с ошибкой одного типа,
а также служебные файлы, такие, как 00statistics.

К примеру:

$ ls apt-E-broken 
00statistics
gnustep-FortyTwo-0.2.0-alt4
gnustep-BDB-0.2.1-alt4
libctl-3.2.2-alt1_3
skytools-2.1.13-alt1

$ cat apt-E-broken/00statistics 
E: Broken packages:
  2: Package perl-devel has broken dep on libdb4-devel
  1: Package guile22-devel has broken dep on guile18-devel
  1: Package postgresql9.6-server has broken dep on postgresql9.6

ls apt-E-package-not-found|wc -l
36

$ cat apt-E-package-not-found/00statistics 
E: Невозможно найти пакет:
  5: gnustep-Etoile-DocGenerator
  5: gdk-pixbuf-devel
  4: python-module-setuptools-tests
[...]
  1: kdepim-devel

и т. д.

Разбивка по подпапкам выполняется по правилам, хранящимся
в базе Логовед. База хранится рядом с logoved-report,
в подпапке db:

$ ls -1 db/
apt
brp-alt
build
check
[...]

$ ls -1 db/apt
00default
E-broken.logoved
E-conflict.logoved
E-ghost.logoved
E-package-not-found.logoved
E-version-not-found.logoved

В базе Логовед хранятся правила Логовед
(в файлах с расширением .logoved)
и значения по умолчанию в файлах 00default.

Каждый файл .logoved содержит правило,
по которому можно выделить внутри лог файла некоторое сообщение об ошибке.
Чтобы узнать, какие правила logoved сработали на лог файл и на что именно,
можно воспользоваться утилитой logoved-grep (в том же git):

$ ./logoved-grep LOGS/apt-E-package-not-found/xmds2-2.2.3-alt1 
LOGS0/apt-E-package-not-found/xmds2-2.2.3-alt1 matches apt::E-package-not-found[error] in line 405:
E: Couldn't find package python-module-cheetah

Легко догадаться, что подпапка LOGS/apt-E-broken
порождена правилом db/apt/E-broken.logoved,
подпапка LOGS/apt-E-package-not-found
порождена правилом db/apt/E-package-not-found.logoved,
и т. д.

Пример правила Логовед.
$ cat db/apt/E-package-not-found.logoved 

# E: Couldn't find package libtau-common
PATTERN=^E: Couldn't find package (\S+)
PATTERN=^E: Невозможно найти пакет (\S+)
STATISTICS=%{GROUP:1}
STATISTICS_HEADER=E: Невозможно найти пакет:


Кроме подпапок, порожденных правилами, в LOGS/
находятся "служебные" подпапки отчета Логовед,
 LOGOVED-not-matched
 LOGOVED-overcome
 LOGOVED-fixable

В папке LOGOVED-not-matched собраны ссылки на
"нераспознанные" лог файлы, для которых ни одно правило
логовед не сработало. Если увидите в этой папке повторяющиеся
ошибки, стоит создать для них новое правило логовед.

Если сообщение об ошибке фатальное, то после сообщения об ошибке
соответствующий этап сборки должен в итоге аварийно завершиться.
Однако это бывает не всегда.

В папке LOGOVED-overcome собраны и разложены по соответствующим подпапкам
ошибки, которые вроде бы были преодолены на соответствующем этапе сборки,
т.е. они встретилсь в секции, к примеру, %build,
тем не менее сборка пошла дальше, "преодолела" (overcome)
эту ошибку и в итоге упала, к примеру, на %files,
как в примере

$ ./logoved-grep error/ftimes-3.10.0-alt2
error/ftimes-3.10.0-alt2 matches run::command-not-found::other[success] in line 254:
/bin/sh: line 1: pod2html: command not found
error/ftimes-3.10.0-alt2 matches ld::DSO-missing[success] in line 698:
collect2: error: ld returned 1 exit status
error/ftimes-3.10.0-alt2 matches ld::DSO-missing[success] in line 755:
collect2: error: ld returned 1 exit status
error/ftimes-3.10.0-alt2 matches ld::DSO-missing[success] in line 817:
collect2: error: ld returned 1 exit status
error/ftimes-3.10.0-alt2 matches perl::cant-locate-in-inc[success] in line 906:
Can't locate Digest/SHA1.pm in @INC (you may need to install the Digest::SHA1 module) (@INC contains: /usr/local/lib64/perl/5.26 /usr/local/share/perl/5.26 /usr/lib64/perl5 /usr/share/perl5 /usr/lib64/perl5 /usr/share/perl5 /etc/perl5 /usr/lib/perl5/vendor_perl .) at ../../../../../utils/tree_builder line 158.
error/ftimes-3.10.0-alt2 matches rpmbuild-error::file-not-found-by-glob[error] in line 952:
    File not found by glob: /usr/src/tmp/ftimes-buildroot/usr/bin/*

Причины для такого поведения могут быть разные. От кривого Makefile, который
не выпустил ошибку наружу, до безвредных сотрясений воздуха.
В любом случае, разбираться надо более тщательно, поэтому они выделены
внутрь отдельной подпапки LOGOVED-overcome.

Подпапка LOGOVED-fixable сейчас дополнительно содержит ссылки на логи,
для которых сгенерировано автоисправление. При этом эти же каталоги
и ссылки содержатся и обычным порядком в LOGS/.
Это, возможно, временное поведение. В зависимости от опций командной
строки LOGOVED-fixable либо не будет создаваться вообще (все чиним руками)
либо, логи, там упомянутые, будут удаляться из других папок в LOGS/,
чтобы разделить логи, которые скормим роботу от логов, которые будем чинить руками.

Сгенерированное автоисправление представляет собой файл LOGS/00FIXSCRIPT.

wc -l 00FIXSCRIPT
42

Т.е. из 500+ пакетов beehive робот попытался бы починить сборку 42.
00FIXSCRIPT представляет собой таблицу
<имя srpm,обязательно><tab><имя srpm,опционально><tab>команда на починку

Пример:

head 00FIXSCRIPT
acct	acct-6.6.1-alt1	buildrequires --add makeinfo
bacula7	bacula7-7.4.7-alt3.S1	buildrequires --add /proc
bacula	bacula-5.2.13-alt11	buildrequires --add /proc
bacula	bacula-5.2.13-alt11	sourcedep --add-devel-lib gssapi_krb5
cairo-dock-plugins	cairo-dock-plugins-3.4.1-alt10.S1	buildrequires --add pkgconfig(libdrm)
cairo-dock-plugins	cairo-dock-plugins-3.4.1-alt10.S1	buildrequires --add python2.7(multiprocessing)
chromium	chromium-69.0.3497.81-alt1	buildrequires --add python2.7(multiprocessing)
clisp	clisp-2.48-alt1.qa1	buildrequires --add groff-ps
compiz	compiz-0.9.13.1-alt1	buildrequires --add pkgconfig(libdrm)
emacs-chess	emacs-chess-2.0-alt5.b6.qa1	sourcedep --add-path makeinfo
emacs-elib	emacs-elib-1.0-alt8	sourcedep --add-path makeinfo
[...]

00FIXSCRIPT -- это скрипт для утилиты logoved-batchfix,
которая пока в разработке. Я не включал ее в этот
релиз, так как утилита пока не поддерживает работу с gear репозиториями,
но с src.srpm она уже успешно работает, и я ей активно пользуюсь
в autoimports/fcimport, autoimports/mgaimport и т. д.

Пример запуска:

$ cd ../logoved.git
$ time ./logoved-report fcimport-aupd/TASK.BAD   
./logoved-report fcimport-aupd/TASK.BAD  27,41s user 1,19s system 93% cpu 30,593 total

$ cd ../logoved-batchfix.git
$ ./logoved-batchfix --batch ../logoved.git/LOGS/00FIXSCRIPT --srpmdir ../fcimport.git/OUT
Записан: OUT.FIXED/FlightGear-Atlas-0.5.0-alt1_0.47.cvs20141002.src.rpm
Записан: OUT.FIXED/avr-gdb-8.1-alt1_2.src.rpm
Записан: OUT.FIXED/boxes-1.1.1-alt1_13.src.rpm
[...]
Записан: OUT.FIXED/rwall-0.17-alt1_53.src.rpm
Записан: OUT.FIXED/sshuttle-0.78.4-alt1_5.src.rpm
Записан: OUT.FIXED/steadyflow-0.2.0-alt1_4.src.rpm
(36 пакетов)

Замечание.
По умолчанию в ./logoved-report включен --flat mode.
Есть еще nested mode, который включается опцией --nested.

flat mode хорош для десктопа и больших экранов.
В nested mode ./logoved-report переводит путь в базе Логовед
к файлу правил в подкаталоги.

ls LOGS/
00FIXSCRIPT
error
fixable
not-matched
overcome

LOGS/
  error/
    apt/
      E-package-not-found/
      E-ghost/
      E-version-not-found/
      E-broken/
      ...

Во flat mode цепочки подкаталогов 2-го уровня распрямляются
в один каталог, (заменяем в пути '/' на '-')
каталог 1-го уровня error/ убирается, а его содержимое переносится на 1-й уровень,
остальные каталоги 1-го уровня получают приставку 'LOGOVED-'.


-- 

I V


Подробная информация о списке рассылки Devel