Diagnostika logov

Klucove slova: mantis log downloader mantisLogDownloader driverBugReport driver bug report

Zaloha logov na strojceku sa nachadza na ceste

/opt/emtest/var/log/

Vo formate:

driverBugReport_DATUM_ZALOHY.tgz

Logy su ulozene v suborovej strukture:

  • /tmp/ - Logy z priecinka /tmp na strojceku
  • /var_log/ - Logy z priecinka /opt/emtest/var/log/ na strojceku
  • /statistic/ - Logy z priecinka /opt/emtest/var/lib/hlavny/statistika na strojceku

Zaloha obsahuje:

  • Systemove logy:
    • dmesg_output
  • Logy hardverovych prostriedkov
    • free_output
    • df_output
  • Logy platnobneho terminalu + vsetky zalohy logov z priecinka /tmp
  • Logy vozidlovej aplikacie + vsetky zalohy logov z priecinka /tmp
  • Statisticke zaznamy
    • binarny subor aktualne otvoreneho odpoctu
    • konfiguracny subor statistiky 'statistikacfg.xml'
  • Logy monitorovania podpornych aplikacnych programov

Systemove logy

Logy hardverovych prostriedkov

Logy platnobneho terminalu

Logy vozidlovej aplikacie

Statisticke zaznamy

Log Downloader

Autor sluzby: Matej Turcel
Konzultant: J. Sipikal, K. Turcelova

Skript z Mantisu/Helpdesku ziskava informacie o novych bugoch, na zaklade ktorych stahuje zo strojcekov logy (vo formate tgz) a pridava ich na Mantis k tomu-ktoremu bugu ako prilohu.
Pri necakanom ukonceni a opatovnom spusteni skript pokracuje v stahovani rozstahovanych logov a uploade dostahovanych, pricom si uchova tiez ID posledneho spracovaneho bugu. Nemalo by teda vadit ak bude skript nasilne ukonceny.

Umiestnenie a vlastnosti sluzby:

  1. Sluzba je spustena na servri 192.168.99.130 alebo pomocou domeny servis.dopravnakarta.sk. Server je umiestneny v telecom cloud-e
  2. Login a heslo poskytne IT oddelenie.
  3. Sluzba sa spusta automaticky po starte pomocou skriptu /etc/systemd/system/mantislogdownloader.service

Zdrojove subory sa nachadzaju v git repozitari s nazvom: mantislogdownloader.git. Link na git wiki

Deployment / instalacia

Skript musi bezat na serveri z ktoreho je pristup na strojceky (napr. 192.168.99.130).

Potrebny je Python 3.4.3 a vyssie a nainstalovane zavislosti.
Instalacia zavislosti - spustenim skriptu install.sh (musi byt spusteny ako root).

Na instalaciu zavislosti je potrebny Python package installer - pip3. Pokial nie je dostupny, skript install.sh sa ho pokusi nainstalovat, to sa ale nemusi vzdy podarit (lebo na to je potrebny modul ensurepip pre Python3 ktory tiez nemusi byt dostupny).
Instalacia pip3 - nainstalovat balik python3-pip.

Adresarova struktura

logdldr/
doc/
  util/
  pdf/
  src/
data/
  partial/
    [zlozky jednotlivych bugov, napr. "9744_10.12.196.1_20160907051621\"]
      [archiv s logmi daneho bugu, napr. "driverBugReport_20160907-05_16_21.tar.gz"]
  finished/
  failed/
    pack/
    download/
    upload/
var/
  logdldr.log
[mantis/]
install.sh
logdldr.py

Zlozky/subory potrebne pre beh programu su vytvorene automaticky.

  • logdldr: zdrojove subory (vratane config.py)
  • doc: dokumentacia
    • util: nastroje na editaciu / zobrazenie dokumentacie
    • pdf: subory vo formate pdf
    • src: zdrojove subory dokumentacie
      • .xml → draw.io
      • .pu → doc/util/plantuml.jar
      • .sd → doc/util/sdedit-4.2-beta8.jar
      • .tsm → doc/util/tinyuml-0.13_02-bin/tinyuml.jar
  • data: data stiahnute zo strojcekov (zlozky obsahuju podzlozky pre jednotlive bugy)
    • partial: ciastocne stiahnute logy; po ukonceni a opatovnom spusteni skriptu sa logy v tejto zlozke dostahuju a uploadnu na Mantis
    • finished: kompletne stiahnute logy; subory su po uspesnom uploade na Mantis odstranene; po opatovnom spusteni - upload na Mantis
    • failed: subory pri ktorych doslo k chybe - skript sa nimi dalej nezaobera
      • pack: zlyhalo zabalenie do archivu (napr. subory na strojceku neexistuju, alebo tiez strojcek nie je dostupny)
      • download: zlyhalo stahovanie zo strojceka
      • upload: zlyhal upload na Mantis
  • var/logdldr.log: obsahuje varovania a chyby (pri opatovnom spusteni - append)
  • install.sh: instalacia zavislosti
  • logdldr.py: spustac programu (volany z konzoly apod.)

Konfiguracia

Subor logdldr/config.py obsahuje rozne nastavenia, od adries, uctov a hesiel cez nazvy lokalnych priecinkov a suborov po “backoff strategy” pri preruseni spojenia.

Spustanie

Prepinace, argumenty:

  • BUG_ID_SINCE: stahovat logy pre bugy novsie nez tento (ak nie je zadane, skript caka na nove bugy vznikle po jeho spusteni)
  • -s, –simulate-upload: simulacia uploadu na Mantis (povodne pre ucely debuggingu - mozno by bolo vhodne upravit podla potrieb). Namiesto uploadu na Mantis sa stiahnute subory presunu do zlozky mantis, napr. mantis/9744/driverBugReport_20160907-05_16_21.tar.gz.
  • -n, –no-new-bugs: nestahovat nove logy, iba dokoncit rozstahovane / uploadnut stiahnute
  • -m, –multi-instance: povolit viacero beziacich instancii. Skript spusteny bez tohto prepinaca moze bezat iba jeden. Ak je skript spusteny s prepinacom -m a potom bez prepinaca, tiez bezia obe instancie.
  • -d, –debug: debug output na stdout

Ked sa skript spusti bez prepinaca -d a v skorych stadiach (tj. spracovanie argumentov, vytvorenie priecinkov, …) nedojde k chybe, na konzole nie je nijaky vystup a skript bezi az do ukoncenia (napr. Ctrl+C).
Pri spusteni viacerych instancii naraz budu vsetky pokracovat v stahovani rozstahovanych logov, preto by nemalo bezat viac instancii naraz.
Chyby ktore nastanu pocas behu su logovane do suboru var/logdldr.log, niektore tiez na Mantis ako poznamky k bugom (napr. ak sa nepodari stiahnut logy).

Ukoncenie

Pri prvom SIGINT/Ctrl+C sa prestanu preberat z Mantisu nove bugy a caka sa na dokoncenie spracovania zacatych.
Pri druhom SIGINT/Ctrl+C sa skript okamzite ukonci.
V oboch pripadoch sa na stderr (pokial stderr je konzola) vypise informacna hlaska.

Implementacia

Diagramy

Popis tried

Menej podstatne triedy a wrapper triedy vynechane.
(S) za nazvom triedy znaci, ze existuje iba jedna instancia triedy

  • bugfetcher.py
    • BugFetcher (S): periodicke ziskavanie bugov z Mantisu (stahuje ich cez objekt DldMgr)
  • dldmgr.py
    • DldMgr (S): sprava stahovania (priradovanie do prislusnej stahovacej fronty)
    • DldQueue: fronta pre konkretny strojcek, obsahuje svoj Downloader ktorym stahuje logy zo strojceka
  • downloader.py
    • Downloader: stahovanie logov z konkretneho strojceka (kazda IP adresa ma svoju instanciu)
  • upldmgr.py
    • UpldMgr (S): sprava uploadov na Mantis; samotny upload implementuje Uploader
  • uploader.py
    • Uploader (S): upload logov na Mantis
  • mantisclient.py
    • MantisClient (S): komunikacia s Mantisom
  • bug.py
    • Bug: nesie informacie o bugu (ID, IP adresa, datum/cas,…)
    • Bug_MantisConverter: mixin implementujuci prevod SOAP-objektu na instanciu triedy Bug
  • filemgr.py
    • Bug_FileMgr: mixin pridavajuci do triedy Bug spravu suborov toho-ktoreho bugu (presuvanie suborov, mazanie,…)
    • BugIDFileMgr (S): spravuje subor obsahujuci ID posledneho spracovaneho bugu
  • log.py
    • LogRecord: informacie o zazname (povodna sprava, datum/cas, vlakno, subor/riadok/funkcia,…)
    • BasicFormatter (S): zakladny prevod instancie LogRecord do textovej podoby
    • ColoredConsoleFormatter (S): prevod LogRecord to textovej podoby s farebnym zobrazenim (napr. chyby - cervena)
    • MantisFormatter (S): prevod LogRecord to textovej podoby s minimalnym mnozstvom informacii (iba povodna sprava bez datumu/casu atd.)
    • AbstractRecordLogger: obsahuje abstraktnu metodu _log_record, ktora pomocou prislusneho formattera prevedie LogRecord do textovej podoby a vysledok zapise do logu
    • AbstractBasicLogger : AbstractRecordLogger: implementuje metody log, log_error a log_warning, ktore vytvoria LogRecord objekt a zavolaju metodu _log_record
    • AbstractBugLogger : AbstractRecordLogger: implementuje metody log_bug, log_bug_error a log_bug_warning, ktore vytvoria LogRecord objekt a zavolaju metodu _log_record
    • DebugLogger (S) : AbstractBasicLogger, AbstractBugLogger: implementuje abstraktnu metodu _log_record, v ktorej zapisuje do konzoly; na formatovanie pouziva ColoredConsoleFormatter
    • LocalLogger (S) : AbstractBasicLogger, AbstractBugLogger: implementuje abstraktnu metodu _log_record, v ktorej zapisuje do suboru; pouziva BasicFormatter
    • MantisLogger (S) : AbstractBugLogger: implementuje abstraktnu metodu _log_record, v ktorej pridava na Mantis poznamku k bugu; pouziva MantisFormatter
 
troubleshoot/driver_bug_report_initial_diagnostic.txt · Last modified: 2016/11/02 15:24 by 192.168.242.44
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki