ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Igor Vlasenko <vlasenko@imath.kiev.ua>
To: devel@lists.altlinux.org
Subject: [devel] I: утилита logoved-report для обработки логов. 2-Установка и работа
Date: Fri, 21 Sep 2018 20:34:21 +0300
Message-ID: <20180921173420.GA29300@dad.imath.kiev.ua> (raw)

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

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


         reply	other threads:[~2018-09-21 17:34 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-21 17:33 [devel] I: утилита logoved-report для обработки логов. 1-введение Igor Vlasenko
2018-09-21 17:52 ` Igor Vlasenko
2018-09-21 17:49   ` [devel] I: утилита logoved-report для обработки логов. 3-Правила Логовед Igor Vlasenko
2018-09-21 17:34     ` Igor Vlasenko [this message]
2018-09-21 18:38     ` Igor Vlasenko
2019-06-25  8:36 ` [devel] I: утилита logoved-report для обработки логов. 1-введение Michael Shigorin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180921173420.GA29300@dad.imath.kiev.ua \
    --to=vlasenko@imath.kiev.ua \
    --cc=devel@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git