ການບັນທຶກລັອກຂອງ Anaconda

Yohaan Vakil, Frank Sträter, Ben Cotton Version unspecified Last review: 2022-05-04

ບົດນຳ

Anaconda ຕິດຕາມການເຮັດວຽກທັງໝົດໃນລັອກ. ເຊິ່ງລວມມີ:

  • ການປ່ຽນຂັ້ນຕອນການຕິດຕັ້ງ (ເຊິ່ງກົງກັບໜ້າຈໍຕ່າງໆ ໃນຕົວຕິດຕັ້ງແບບກຣາບຟິກ)

  • ການກວດຫາ ແລະ ການຈັດການອຸປະກອນເກັບຂໍ້ມູນ

  • ການກວດຫາສື່ການຕິດຕັ້ງ

  • ການຕັ້ງຄ່າເລີ່ມຕົ້ນເຄືອຂ່າຍ

  • ຂໍ້ຄວາມຈາກເຄີນເນວ (kernel)

  • ການເອີ້ນໃຊ້ເມັດທອດ (methods) ທີ່ສຳຄັນພາຍໃນ anaconda

  • ການເອີ້ນໃຊ້ໂປຣແກຣມພາຍນອກ

ການບັນທຶກລັອກໃນລະບົບທີ່ຕິດຕັ້ງແລ້ວ

ໃນລະຫວ່າງການຕິດຕັ້ງ, ລັອກຈະຖືກເກັບໄວ້ໃນໄດເຣັກທໍຣີ /tmp:

ໄຟລ໌ລັອກ

/tmp/anaconda.log

ຂໍ້ມູນການຕິດຕັ້ງທົ່ວໄປ, ໂດຍສະເພາະແມ່ນການປ່ຽນແປງຂັ້ນຕອນ.

/tmp/storage.log

ການສະແກນ ແລະ ຈັດການອຸປະກອນເກັບຂໍ້ມູນ (ຮາດດິດ, ພາທິຊັນ, LVM, RAID), ການແບ່ງພາທິຊັນ

/tmp/program.log

ການເອີ້ນໃຊ້ໂປຣແກຣມພາຍນອກ ແລະ ຜົນການເຮັດວຽກຂອງພວກມັນ

/tmp/packaging.log

ຂໍ້ຄວາມການຕິດຕັ້ງແພັກເກດ DNF

/tmp/syslog

ຂໍ້ຄວາມລະບົບທີ່ກ່ຽວຂ້ອງກັບຮາດແວ

ບາງຂໍ້ຄວາມລັອກຍັງຖືກຂຽນລົງໃນເທີມິນອລ (terminals):

ອຸປະກອນ TTY

/dev/tty3

ຂໍ້ຄວາມຈາກ anaconda.log, storage.log ແລະ packaging.log.

/dev/tty4

ຄືກັນກັບ syslog

/dev/tty5

stdout ແລະ stderr ຈາກໂປຣແກຣມພາຍນອກ

tty3 ແລະ tty4 ສະແດງໄຟລ໌ລັອກບາງຢ່າງ. ໄຟລ໌ລັອກຈະບັນຈຸຂໍ້ຄວາມຈາກທຸກລະດັບລັອກສະເໝີ, ລວມທັງ debug, ແຕ່ລະດັບລັອກຕ່ຳສຸດໃນເທີມິນອລສາມາດຄວບຄຸມໄດ້ດ້ວຍ loglevel ຕົວເລືອກຄຳສັ່ງ.

ມີໄຟລ໌ລັອກອີກສອງໄຟລ໌ທີ່ຖືກສ້າງຂຶ້ນໃນລະບົບໄຟລ໌ເປົ້າໝາຍ, ໃນໄດເຣັກທໍຣີ /root, ເຊິ່ງສາມາດເຂົ້າເຖິງໄດ້ທີ່ /mnt/sysimage/root ໃນລະຫວ່າງການຕິດຕັ້ງ:

/mnt/sysimage/root/install.log

ລັອກຂອງຂັ້ນຕອນການຕິດຕັ້ງແພັກເກດ.

/mnt/sysimage/root/install.log.syslog

ຂໍ້ຄວາມຈາກ chroot ການຕິດຕັ້ງທີ່ຖືກບັນທຶກຜ່ານ syslog ຂອງລະບົບ.

ສ່ວນຫຼາຍແມ່ນຂໍ້ມູນກ່ຽວກັບຜູ້ໃຊ້ ແລະ ກຸ່ມທີ່ຖືກສ້າງຂຶ້ນໃນລະຫວ່າງການຕິດຕັ້ງແພັກເກດຂອງ dnf.

ຮູບແບບລັອກ

ໃນໄຟລ໌, ຮູບແບບຂອງຂໍ້ຄວາມລັອກມີດັ່ງນີ້:

 H:M:S,ms LOGLEVEL facility:message

ໂດຍທີ່:

  • H:M:S ແມ່ນເວລາຂອງຂໍ້ຄວາມ (timestamp)

  • ms ແມ່ນສ່ວນມິນລິວິນາທີຂອງເວລາ. ໝາຍເຫດ ໂດຍປົກກະຕິແລ້ວຄ່ານີ້ຈະກາຍເປັນສູນໃນ syslog ທາງໄກ.

  • LOGLEVEL ແມ່ນລະດັບລັອກຂອງຂໍ້ຄວາມ. ໃນທາງທິດສະດີ, ເນື່ອງຈາກຂໍ້ຄວາມເຄີນເນວແມ່ນສ່ວນໜຶ່ງຂອງລັອກ anaconda, ທຸກລະດັບລັອກທີ່ກຳນົດໃນ rsyslog ສາມາດປະກົດໃນໄຟລ໌ລັອກໄດ້. ແຕ່ Anaconda ເອງຈະບັນທຶກລັອກສະເພາະໃນລະດັບດັ່ງຕໍ່ໄປນີ້:

    • DEBUG

    • INFO

    • WARN

    • ERR

    • CRIT

  • facility ແມ່ນໂປຣແກຣມ ຫຼື ສ່ວນປະກອບທີ່ສ້າງຂໍ້ຄວາມ. ຕົວຢ່າງເຊັ່ນ kernel, anaconda, storage ຫຼື ທີ່ຄ້າຍຄືກັນ.

  • message ແມ່ນໂຕຂໍ້ຄວາມລັອກເອງ.

ສຳລັບລັອກທີ່ເຮັດວຽກໃນເທີມິນອລ, ຮູບແບບຈະເປັນ:

 LOGLEVEL facility:message

ການບັນທຶກລັອກທາງໄກຜ່ານ TCP

Anaconda ຮອງຮັບການບັນທຶກລັອກທາງໄກຜ່ານ rsyslog daemon ທີ່ເຮັດວຽກຢູ່ໃນລະບົບທີ່ຕິດຕັ້ງ. ມັນສາມາດຕັ້ງຄ່າໃຫ້ສົ່ງຕໍ່ລັອກຜ່ານ TCP ໄປຫາເຄື່ອງໃດກໍໄດ້ໃນເຄືອຂ່າຍທີ່ກຳລັງເປີດໃຊ້ syslog daemon ຢູ່. ສາມາດຄວບຄຸມໄດ້ດ້ວຍ syslog ຕົວເລືອກຄຳສັ່ງ.

ຢ່າລືມເປີດພອດທີ່ເຈົ້າໃຊ້ສຳລັບ local syslog daemon ໃນໄຟວໍ (firewall) ຂອງເຈົ້າ.

ສິ່ງທີ່ຖືກບັນທຶກທາງໄກ

ທຸກຢ່າງທີ່ຖືກບັນຈຸໂດຍ anaconda ໂດຍກົງຄວນຈະປະກົດໃນລັອກທາງໄກຄືກັນ. ເຊິ່ງລວມມີຂໍ້ຄວາມທີ່ສົ່ງອອກມາຈາກໂຕໂຫຼດ (loader) ແລະ ລະບົບຍ່ອຍການເກັບຂໍ້ມູນ (storage subsystem). Anaconda tracebacks (/tmp/anaconda-tb-xyz) ທັງໝົດຈະຖືກລວມເຂົ້າໃນໄຟລ໌ດຽວ /tmp/anaconda-tb-all.log ແລ້ວຈຶ່ງຖືກສົ່ງຕໍ່. ນອກຈາກນັ້ນ, /tmp/x.log ກໍຈະຖືກສົ່ງຕໍ່ເຊັ່ນກັນ.

ການບັນທຶກລັອກທາງໄກຈະເຮັດວຽກເມື່ອໂຕຕິດຕັ້ງເລີ່ມຕັ້ງຄ່າເຄືອຂ່າຍເທົ່ານັ້ນ. ເມື່ອເຄືອຂ່າຍພ້ອມໃຊ້ງານ, ຈະໃຊ້ເວລາສອງສາມນາທີເພື່ອໃຫ້ rsyslogd ຮັບຮູ້. Rsyslog ມີຄິວ (queue) ສຳລັບຂໍ້ຄວາມທີ່ບໍ່ສາມາດສົ່ງຕໍ່ໄດ້ເນື່ອງຈາກເຄືອຂ່າຍເຂົ້າເຖິງບໍ່ໄດ້ ແລະ ໃນທີ່ສຸດມັນຈະສົ່ງຕໍ່ທັງໝົດຕາມລຳດັບທີ່ຖືກຕ້ອງ.

ການຕັ້ງຄ່າ

ມັນຂຶ້ນກັບເຈົ້າວ່າຈະຕັ້ງຄ່າ remote logging daemon ແນວໃດ, ຕົວຢ່າງ: ເຈົ້າສາມາດບັນທຶກຂໍ້ຄວາມຂາເຂົ້າທັງໝົດລົງໃນໄຟລ໌ດຽວ ຫຼື ແຍກພວກມັນໃສ່ໄດເຣັກທໍຣີຕາມທີ່ຢູ່ IP ຂອງລະບົບທາງໄກກໍໄດ້.

Anaconda RPM ມີສະຄຣິບ analog ເຊິ່ງຈະສ້າງໄຟລ໌ກຳນົດຄ່າ rsyslogd ທີ່ເໝາະສົມໂດຍອີງຕາມພາຣາມິເຕີການຕິດຕັ້ງບາງຢ່າງ. ມັນຍັງສາມາດສ້າງຄຳສັ່ງ bash ເພື່ອເປີດໃຊ້ rsyslogd ພ້ອມກັບການຕັ້ງຄ່າທີ່ສ້າງຂຶ້ນ. ດັ່ງນັ້ນ ເຈົ້າສາມາດເຮັດຜ່ານ shell ໄດ້ດັ່ງນີ້: $ eval scripts/analog -p 6080 -s -o ./someconf /home/akozumpl/remote_inst ນີ້ຈະເປັນການເລີ່ມຕົ້ນ rsyslog daemon ທີ່ຈະລໍຖ້າຮັບຂໍ້ມູນຜ່ານພອດ 6080. ລັອກຈາກເຄື່ອງທາງໄກທີ່ມີ IP 10.34.33.221 ຈະຖືກເກັບໄວ້ພາຍໃຕ້ /home/akozumpl/remote_inst/10.34.33.221/, ເຊັ່ນ: /home/akozumpl/remote_inst/10.34.33.221/anaconda.log.

ການຕັ້ງຄ່າ syslog ທາງໄກໃຊ້ປະໂຫຍກຈາກຄຸນລັກສະນະຂອງຂໍ້ຄວາມລັອກຫຼາຍຢ່າງເພື່ອສາມາດແຍກພວກມັນລົງໃນໄຟລ໌ທີ່ຖືກຕ້ອງ: * IP ຂອງຜູ້ສົ່ງຂໍ້ຄວາມເພື່ອໃຫ້ຮູ້ວ່າເຄື່ອງໃດເປັນຜູ້ສ້າງຂໍ້ຄວາມ ແລະ ຂໍ້ຄວາມນັ້ນຄວນຢູ່ໃນໄດເຣັກທໍຣີໃດ. * anaconda.log, storage.log ແລະ program.log ມີຊື່ລະບຸໄວ້ໃນນັ້ນເປັນ programname. * ຂໍ້ຄວາມ syslog ແມ່ນມາຈາກ kernel ແລະ daemon facilities, ຄືກັນກັບຢູ່ໃນລະບົບທີ່ຕິດຕັ້ງແລ້ວ. * install.log.syslog ທີ່ສ້າງຂຶ້ນໃນລະຫວ່າງການຕິດຕັ້ງແພັກເກດຈະຖືກບັນທຶກເປັນ hostname ພິເສດ sysimage.

ລັນ (Run) analog ໂດຍບໍ່ມີຕົວເລືອກ -o ເພື່ອເບິ່ງວ່າໄຟລ໌ກຳນົດຄ່າທີ່ເໝາະສົມນັ້ນມີໜ້າຕາເປັນແນວໃດ. ນອກຈາກນັ້ນໃຫ້ສັງເກດວ່າມັນໃຊ້ຮູບແບບຂໍ້ຄວາມດຽວກັນກັບການບັນທຶກລັອກທາງໄກຄືກັນກັບທີ່ anaconda ໃຊ້, ແຕ່ແນ່ນອນວ່າເຈົ້າສາມາດແກ້ໄຂເພື່ອລະບຸຮູບແບບໃດກໍໄດ້ຕາມທີ່ເຈົ້າຕ້ອງການ.

ເບິ່ງຕື່ມ

ການບັນທຶກລັອກທາງໄກຜ່ານ virtio

QEMU/KVM ໃນ Fedora 13 ຂຶ້ນໄປ ອະນຸຍາດໃຫ້ສ້າງ virtual machines ທີ່ມີ virtio char devices ຫຼາຍອັນ ເປີດໃຫ້ເຄື່ອງ guest ໃຊ້ງານ. ອຸປະກອນດັ່ງກ່າວອັນໜຶ່ງສາມາດໃຊ້ເພື່ອສົ່ງຕໍ່ລັອກ anaconda ໄປຫາເຄື່ອງ host ໄດ້. ດ້ວຍວິທີນີ້ ພວກເຮົາສາມາດຮັບລັອກທີ່ສົ່ງຕໍ່ໄດ້ແບບຣຽວໄທມ໌ (real time), ທັນທີທີ່ລະບົບຍ່ອຍການບັນທຶກລັອກຂອງ anaconda ເລີ່ມເຮັດວຽກ (ຂັ້ນຕອນທຳອິດ) ແລະ ບໍ່ຈຳເປັນຕ້ອງລໍຖ້າໃຫ້ເຄືອຂ່າຍພ້ອມໃຊ້ງານ. ນອກຈາກນີ້, ມັນຍັງເປັນວິທີດຽວທີ່ຈະສົ່ງຕໍ່ລັອກໃນການຕັ້ງຄ່າແບບບໍ່ມີເຄືອຂ່າຍ.

ການຕັ້ງຄ່າການບັນທຶກລັອກທາງໄກ

Anaconda ຈະສົ່ງຕໍ່ລັອກຜ່ານ virtio ໂດຍອັດຕະໂນມັດ ຫາກມັນສາມາດຫາພອດ /dev/virtio-ports/org.fedoraproject.anaconda.log.0 ພົບ. ພອດນີ້ຖືກສ້າງຂຶ້ນໂດຍໃຊ້ libvirt XML directive ທີ່ເຊື່ອມຕໍ່ມັນເຂົ້າກັບ TCP socket ໃນຝັ່ງຂອງ host. ຈາກນັ້ນກໍສາມາດອ່ານລັອກຈາກບ່ອນນັ້ນໄດ້ໂດຍກົງ, ຫຼື ສ້າງ rsyslog instance ເພື່ອແຍກ (parse) ພວກມັນ ແລະ ເກັບລົງໃນໄຟລ໌ທີ່ກ່ຽວຂ້ອງ. ເບິ່ງຜັງ ascii ດ້ານລຸ່ມສຳລັບພາບລວມທັງໝົດ:

Anaconda--->rsyslog(guest)--->virtio(guest char device)--->kvm hypervisor--->virtio(TCP socket)
                                                                                |
                                                                                v
                                                      ໄຟລ໌ລັອກທີ່ຖືກສົ່ງຕໍ່<---rsyslog(host)

ຂັ້ນຕອນການຕັ້ງຄ່າທັງໝົດມີດັ່ງນີ້:

  1. ສ້າງ virtual machine ສຳລັບທົດສອບ, ຕົວຢ່າງ: ໃຊ້ Virtual Manager </li>

  2. ເພີ່ມພອດ virtio-serial ໃສ່ virtual machine ຂອງເຈົ້າ, ຕັ້ງຄ່າໃຫ້ມັນໄປທີ່ TCP ພອດ 6080 ໃນ host. ເລີ່ມໂດຍການແກ້ໄຂການຕັ້ງຄ່າ guest: virsh edit <ຊື່ເຄື່ອງ>

  3. ໃນ guest editor, ໃຫ້ເພີ່ມຂໍ້ມູນຕໍ່ໄປນີ້ໃສ່ໃນສ່ວນ <devices>:

<channel type='tcp'>
  <source mode='connect' host='127.0.0.1' service='6080'/>
  <target type='virtio' name='org.fedoraproject.anaconda.log.0'/>
</channel>
  1. ເລີ່ມຂະບວນການ rsyslogd ເພື່ອລໍຖ້າຮັບຂໍ້ມູນໃນ host, ໂດຍໃຊ້ສະຄຣິບ analog ທີ່ອະທິບາຍໄວ້ [[#Remote_logging_via_TCP|ຂ້າງເທິງ]]:

$ eval `analog -p 6080 -o rsyslogd.conf -s /home/akozumpl/remote_inst`
  1. ເລີ່ມ virtual machine.

  2. ດຳເນີນການຕິດຕັ້ງຕໍ່. ທັນທີທີ່ຂໍ້ຄວາມຕ້ອນຮັບຂອງ Anaconda ປະກົດຂຶ້ນ ຂໍ້ຄວາມລັອກຈະປະກົດຢູ່ໃນໄດເຣັກທໍຣີທີ່ລະບຸໄວ້ໃນສະຄຣິບ analog, ໃນໄດເຣັກທໍຣີຍ່ອຍ 127.0.0.1.

virt-install

ຫາກເຈົ້າກຳລັງໃຊ້ virt-install ເຈົ້າສາມາດຕັ້ງຄ່າມັນໄດ້ດ້ວຍຕົວເລືອກ --channel:

--channel tcp,host=127.0.0.1:6080,mode=connect,target_type=virtio,name=org.fedoraproject.anaconda.log.0

ບັນຫາທີ່ພົບ ແລະ ການແກ້ໄຂບັນຫາ

  • ໃຊ້ໄດ້ໃນ libvirt>=0.8.2

  • ຂໍ້ຄວາມ syslog ຂອງ chroot ຈາກ /mnt/sysimage/root/install.log.syslog ຈະບໍ່ຖືກສົ່ງຕໍ່.

  • ບໍ່ສາມາດເລີ່ມເຄື່ອງໄດ້ ຍົກເວັ້ນແຕ່ຈະມີບາງຢ່າງກຳລັງລໍຖ້າຮັບຂໍ້ມູນ (listening) ຢູ່ທີ່ TCP ພອດ ທີ່ virtio-serial ເຊື່ອມຕໍ່ຢູ່.

  • ຫາກເຈົ້າຕ້ອງການທົດສອບວ່າການເຊື່ອມຕໍ່ virtio ເຮັດວຽກໄດ້ຫຼືບໍ່, ແທນທີ່ຈະໃຊ້ analog ແລະ rsyslog ໃຫ້ໃຊ້ເຄື່ອງມື netcat ເພື່ອລໍຖ້າຮັບຂໍ້ມູນໃນພອດທີ່ກຳນົດ, ເຊັ່ນ: nc -l 0.0.0.0 6080. ເຈົ້າຈະເລີ່ມເຫັນລັອກດິບ (raw logs) ໃນເທີມິນອລ ເມື່ອເຄື່ອງ guest ເລີ່ມບູດ (boot).

  • ຫາກມີການລະບຸທັງການບັນທຶກລັອກ TCP ທາງໄກຜ່ານ syslog= ແລະ ການບັນທຶກລັອກ virtio ທາງໄກຜ່ານ virtiolog= ໃນບັນທັດຄຳສັ່ງ, ຜູ້ໃຊ້ຕ້ອງຕັ້ງຄ່າ rsyslogd ສອງ instance ໃນ server/host ເພື່ອລໍຖ້າຮັບການເຊື່ອມຕໍ່ທັງສອງ ຖ້າບໍ່ດັ່ງນັ້ນຄິວຂອງ rsyslog ທີ່ສົ່ງຂໍ້ມູນຈະເຕັມ ແລະ ການສົ່ງຕໍ່ຈະຢຸດລົງ.

ລັອກຂອງ Anaconda ໃນລະບົບທີ່ກຳລັງເຮັດວຽກ

ຫຼັງຈາກການຕິດຕັ້ງສຳເລັດທຸກຄັ້ງ, ລັອກຂອງ anaconda ຈະຖືກຄັດລອກລົງໃນ /var/log ຂອງລະບົບທີ່ເຈົ້າຫາກໍ່ຕິດຕັ້ງ. ເພື່ອຫຼີກເວັ້ນຊື່ທີ່ຊ້ຳກັນກັບໄຟລ໌ລັອກອື່ນໆຢູ່ບ່ອນນັ້ນ, ລັອກຂອງ anaconda ຈະຖືກປ່ຽນຊື່:

ຊື່ລະຫວ່າງການຕິດຕັ້ງ ຊື່ໃນລະບົບເປົ້າໝາຍ

/tmp/anaconda.log

/var/log/anaconda/anaconda.log

/tmp/program.log

/var/log/anaconda/program.log

/tmp/storage.log

/var/log/anaconda/storage.log

/tmp/packaging.log

/var/log/anaconda/packaging.log

ເຄັດລັບການບັນທຶກລັອກ

ຫາກເຈົ້າຖືກຂໍໃຫ້ສົ່ງລັອກສຳລັບ bugzilla, ວິທີທີ່ດີທີ່ສຸດຄືການປ່ຽນຈາກ Anaconda GUI ໄປເປັນ tty2 ແລ້ວໃຊ້ scp ເພື່ອຄັດລອກໄຟລ໌ໄປຫາຄອມພິວເຕີຂອງເຈົ້າ, ຕົວຢ່າງ:

$ cd /tmp
$ scp anaconda.log aklap:/home/akozumpl/

ມັນຍັງເປັນໄປໄດ້ທີ່ຈະສ້າງ dump ທີ່ສົມບູນຂອງສະຖານະຂະບວນການ anaconda ທີ່ກຳລັງເຮັດວຽກຢູ່ ( dump ອັນດຽວກັນທີ່ຈະຖືກຄອມໄພລ໌ອັດຕະໂນມັດຫາກເກີດ unhandled exception). ເພື່ອເຮັດສິ່ງນີ້ ໃຫ້ສົ່ງ SIGUSR2 ໄປຫາຂະບວນການຫຼັກຂອງ anaconda:

$ kill -USR2 `cat /var/run/anaconda.pid`

ນີ້ຈະສ້າງໄຟລ໌ /tmp/anaconda-tb-????? ເຊິ່ງລວມມີ anaconda.log, storage.log ແລະ syslog ນຳ.

ຫາກເຈົ້າຢູ່ໃນ KVM virtual machine ແລະ ບໍ່ມີ scp ໃຫ້ໃຊ້ (stage1), ເຈົ້າສາມາດ (ຫຼັງຈາກຕັ້ງຄ່າເຄືອຂ່າຍແລ້ວ ຫາກຍັງບໍ່ທັນໄດ້ຕັ້ງຄ່າ) ສົ່ງຕໍ່ໄປຫາໄຟລ໌ tcp ພິເສດ, ໃນ host:

$ nc -l 4444 > syslog.log

ໃນ guest:

$ ifconfig eth0 10.0.2.10/24 up
$ grep "" /tmp/syslog > /dev/tcp/10.0.2.2/4444