Pencatatan Anaconda
Pendahuluan
Anaconda melacak semua aktivitasnya dalam log. Ini termasuk:
-
mengubah langkah-langkah instalasi (yang secara kasar sesuai dengan layar yang berbeda dalam penginstal grafis)
-
deteksi dan manipulasi perangkat penyimpanan
-
deteksi media instalasi
-
inisialisasi jaringan
-
pesan kernel
-
panggilan ke metode kritis dalam anaconda
-
panggilan ke program eksternal
Masuk ke sistem diinstal
Selama instalasi, log disimpan dalam direktori /tmp:
Berkas log
/tmp/anaconda.log-
informasi pemasangan umum, terutama perubahan langkah-langkah.
/tmp/storage.log-
pemindaian dan manipulasi perangkat penyimpanan (hard drive, partisi, LVM, RAID), partisi
/tmp/program.log-
panggilan ke program eksternal, keluarannya
/tmp/packaging.log-
DNF pesan instalasi paket
/tmp/syslog-
pesan sistem terkait perangkat keras
Pesan log tertentu juga ditulis ke terminal:
Perangkat TTY
/dev/tty3-
pesan dari
anaconda.log,storage.logdanpackaging.log. /dev/tty4-
sama dengan
syslog /dev/tty5-
stdout dan stderr dari program eksternal
tty3 dan tty4 merefleksikan berkas log tertentu. Berkas log selalu berisi pesan dari semua loglevel, termasuk debug, tetapi loglevel minimal pada terminal dapat dikontrol dengan opsi baris perintah loglevel.
Terdapat dua berkas log lain yang dibuat pada sistem berkas target, pada direktori /root, yang juga dapat diakses pada /mnt/sysimage/root pada saat proses instalasi:
/mnt/sysimage/root/install.log-
log dari proses instalasi paket.
/mnt/sysimage/root/install.log.syslog-
pesan dari chroot instalasi yang dicatat melalui syslog sistem.
Sebagian besar informasi tentang pengguna dan grup yang dibuat selama instalasi paket dnf penginstal.
Format log
Dalam berkas, format pesan log adalah sebagai berikut:
H:M:S,ms LOGLEVEL facility:message
di mana:
-
H:M:Sadalah stempel waktu pesan -
msadalah bagian milidetik dari stempel waktu. Perhatikan bahwa ini biasanya akan menjadi nol pada syslog jarak jauh. -
LOGLEVELadalah loglevel pesan. Secara teori, karena pesan kernel adalah bagian dari log anaconda, semua loglevel yang didefinisikan di rsyslog dapat muncul di logfile. Namun, Anaconda sendiri hanya akan mencatat pada loglevel berikut:-
DEBUG -
INFO -
WARN -
ERR -
CRIT
-
-
facilityadalah program atau komponen yang membuat pesan. Misalnya,kernel,anaconda,storage, atau yang serupa. -
messageadalah pesan log itu sendiri.
Untuk log yang berjalan di terminal, formatnya sederhana saja:
Fasilitas LOGLEVEL: pesan
Pencatatan jarak jauh melalui TCP
Anaconda mendukung pencatatan jarak jauh yang ditangani melalui daemon rsyslog yang berjalan pada sistem yang diinstal. Dapat dikonfigurasi untuk meneruskan lognya melalui TCP ke mesin sembarang dalam jaringan yang juga menjalankan daemon syslog. Hal ini dikontrol dengan opsi baris perintah syslog.
|
Jangan lupa untuk mengaktifkan port tempat Anda menjalankan daemon syslog lokal di firewall Anda. |
Apa yang dicatat dari jarak jauh
Segala sesuatu yang dicatat secara langsung oleh anaconda juga akan muncul dalam log jarak jauh. Ini termasuk pesan yang dipancarkan oleh pemuat dan subsistem penyimpanan. Semua traceback anaconda (/tmp/anaconda-tb-xyz) digabungkan ke dalam satu berkas /tmp/anaconda-tb-all.log dan kemudian ditransfer. Juga, /tmp/x.log ditransfer.
Pencatatan jarak jauh hanya bekerja ketika penginstal menginisialisasi jaringan. Setelah jaringan aktif, dibutuhkan beberapa menit bagi rsyslogd untuk menyadari hal ini. Rsyslog memiliki antrian untuk pesan yang tidak dapat diteruskan karena jaringan yang tidak dapat diakses dan pada akhirnya akan meneruskan semua pesan, dalam urutan yang benar.
Konfigurasi
Terserah Anda bagaimana daemon pencatatan jarak jauh dikonfigurasikan, misalnya, Anda bisa mencatat semua pesan yang masuk ke dalam satu berkas atau mengurutkannya ke dalam direktori sesuai dengan alamat IP sistem jarak jauh.
RPM anaconda menyediakan skrip analog, yang menghasilkan berkas konfigurasi rsyslogd yang sesuai berdasarkan beberapa parameter instalasi.
Ia juga dapat menghasilkan perintah bash untuk menjalankan rsyslogd dengan konfigurasi yang dihasilkan.
Dengan demikian Anda dapat melakukannya dari sebuah shell:
$ eval scripts/analog -p 6080 -s -o ./someconf /home/akozumpl/remote_inst
Ini akan memulai daemon rsyslog yang akan mendengarkan pada port 6080.
Log dari mesin remote dengan IP 10.34.33.221 akan disimpan di bawah /home/akozumpl/remote_inst/10.34.33.221/, misalnya /home/akozumpl/remote_inst/10.34.33.221/anaconda.log.
Konfigurasi syslog jarak jauh mengeksploitasi beberapa karakteristik pesan log untuk dapat mengurutkannya ke dalam berkas yang benar:
* IP pengirim pesan untuk mengetahui mesin mana yang membuat pesan dan direktori mana pesan tersebut berada.
* anaconda.log, storage.log dan program.log memiliki nama yang disematkan di dalamnya sebagai programname.
* Pesan syslog datang dari fasilitas kernel dan daemon, sama seperti yang terjadi pada sistem yang diinstal
* install.log.syslog yang dibuat selama penginstal paket dicatat sebagai nama host khusus sysimage.
Jalankan analog tanpa opsi -o untuk melihat bagaimana tepatnya tampilan berkas konfigurasi yang sesuai. Perhatikan juga bahwa ia menggunakan format pesan yang sama untuk pencatatan jarak jauh seperti yang digunakan anaconda, tetapi Anda tentu saja dapat memodifikasi ini untuk menentukan format apa pun yang Anda inginkan.
Pencatatan jarak jauh melalui virtio
QEMU/KVM di Fedora 13 dan seterusnya memungkinkan seseorang untuk membuat mesin virtual dengan beberapa perangkat virtio char yang diekspos ke mesin tamu. Salah satu perangkat tersebut dapat digunakan untuk meneruskan log anaconda ke mesin host. Dengan cara itu kita dapat meneruskan log secara real time, segera setelah subsistem pencatatan anaconda diinisialisasi (lebih awal) dan tidak perlu menunggu jaringan muncul. Selain itu, ini adalah satu-satunya cara untuk meneruskan log dalam pengaturan tanpa jaringan.
Konfigurasi Logging Jarak Jauh
Anaconda akan meneruskan log melalui virtio secara otomatis jika dapat menemukan port /dev/virtio-ports/org.fedoraproject.anaconda.log.0". Port ini dibuat menggunakan arahan XML libvirt yang menghubungkannya ke soket TCP di sisi host. Kemudian dimungkinkan untuk membaca log dari sana secara langsung, atau membuat instance rsyslog untuk mem-parsingnya dan mengarsipkannya ke dalam berkas masing-masing. Lihat bagan ascii di bawah ini untuk keseluruhan ansambel:
Anaconda--->rsyslog(guest)--->virtio(guest char device)--->kvm hypervisor--->virtio(TCP socket)
|
v
forwarded log files<---rsyslog(host)
Ikuti petunjuk langkah demi langkah untuk menyiapkan semuanya:
-
Buat mesin virtual pengujian, misalnya dengan menggunakan Virtual Manager </li>
-
Tambahkan port virtio-serial ke mesin virtual Anda, arahkan ke port TCP 6080 pada host. Mulailah dengan mengedit konfigurasi tamu:
virsh edit <nama mesin> -
Pada editor tamu, tambahkan informasi berikut ini ke dalam bagian
<devices>:
<channel type='tcp'> <source mode='connect' host='127.0.0.1' service='6080'/> <target type='virtio' name='org.fedoraproject.anaconda.log.0'/> </channel>
-
Mulai proses mendengarkan rsyslogd pada host, menggunakan skrip
analogyang dijelaskan [[#Remote_logging_via_TCP|di atas]]:
eval `analog -p 6080 -o rsyslogd.conf -s /home/akozumpl/remote_inst`
-
Mulai mesin virtual.
-
Lanjutkan dengan instalasi. Segera setelah salam Anaconda ditampilkan, pesan log akan muncul di direktori yang diberikan untuk skrip
analog, di subdirektori127.0.0.1.
Masalah dan pemecahan masalah yang diketahui
-
works in libvirt>=0.8.2
-
pesan syslog root dari
/mnt/sysimage/root/install.log.syslogtidak diteruskan. -
tidak mungkin untuk menghidupkan mesin kecuali ada sesuatu yang mendengarkan pada port TCP di mana virtio-serial terhubung.
-
jika Anda ingin menguji apakah koneksi virtio bekerja, daripada menggunakan analog dan rsyslog, biarkan utilitas netcat mendengarkan pada port yang diberikan, misalnya
nc -l 0.0.0.0 6080. Anda akan mulai melihat log mentah pada terminal setelah mesin tamu mulai melakukan booting. -
jika kedua pencatatan TCP jarak jauh melalui
syslog=dan pencatatan virtio jarak jauh melaluivirtiolog=ditentukan pada baris perintah, kita harus menyiapkan dua contoh rsyslogd di server/host untuk mendengarkan kedua koneksi tersebut, jika tidak, antrean rsyslog pengirim akan penuh dan penerusan akan terhenti.
Anaconda mencatat pada sistem yang sedang berjalan
Setelah setiap instalasi yang berhasil, log anaconda disalin ke dalam /var/log pada sistem yang baru saja Anda instal. Untuk menghindari bentrokan nama dengan berkas log lain di sana, log anaconda diganti namanya:
| Nama selama menginstal | Nama pada sistem target |
|---|---|
|
|
|
|
|
|
|
|
Kiat-kiat pencatatan
Jika Anda diminta untuk menyediakan log untuk bugzilla, pilihan terbaik Anda adalah beralih dari GUI anaconda ke tty2 dan kemudian menggunakan scp untuk menyalin berkas ke komputer Anda, mis:
$ cd /tmp
$ scp anaconda.log aklap:/home/akozumpl/
Anda juga dapat membuat dump lengkap dari kondisi proses anaconda yang sedang berjalan (dump yang sama yang dikompilasi secara otomatis jika terjadi pengecualian yang tidak tertangani). Untuk melakukan hal ini, kirimkan proses anaconda utama SIGUSR2:
$ kill -USR2 `cat /var/run/anaconda.pid``
Ini membangun berkas /tmp/anaconda-tb-????? yang juga berisi anaconda.log, storage.log, dan syslog.
Jika Anda menggunakan mesin virtual KVM dan tidak ada scp yang tersedia (stage1), Anda dapat (setelah mengatur jaringan jika belum tersedia) mengalihkan ke berkas tcp khusus, pada host:
$ nc -l 4444 > syslog.log
pada tamu:
$ ifconfig eth0 10.0.2.10/24 up
$ grep "" /tmp/syslog > /dev/tcp/10.0.2.2/4444
Want to help? Learn how to contribute to Fedora Docs ›