Chỉnh sửa 2016-06 / 02
Nếu bạn đang cố gắng tìm "Thông báo nhật ký khởi động" nói chung, hãy kiểm tra /var/log/upstart/
. Đó là nơi Upstart tiết kiệm stdout
và stderr
từ các dịch vụ Upstart. Cảm ơn câu trả lời của leopd đã chỉ ra điều này.
Nếu bạn đang tìm kiếm thông điệp tường trình từ chính Upstart, được cấu hình initctl log-priority
và phát ra bởi initctl emit
, hãy đọc tiếp!
Phiên bản ngắn
Các mục nhật ký sẽ thực sự hiển thị trong dmesg. Mặc dù vậy, chúng không hiển thị theo mặc định /var/log
.
Nếu bạn cũng muốn chúng /var/log
, hãy thêm $KLogPermitNonKernelFacility on
vào cấu hình của rsyslogd. Tôi khuyên bạn nên tạo một tệp tùy chỉnh /etc/rsyslog.d/60-custom.conf
để tránh chỉnh sửa /etc/rsyslog.conf
, vì đó được quản lý bởi dpkg. Bây giờ, các tin nhắn Upstart sẽ hiển thị /var/log/syslog
, sau khi bạn thiết lập Upstart's log-priority
trở lên info
.
Phiên bản dài
Điều này khiến tôi mất nhiều ngày để theo dõi, nhưng dường như Upstart (1.5) không đăng nhập vào syslog, nghĩa là nó không gọi hàm glibc syslog()
. Thay vào đó, Upstart đăng nhập vào bộ đệm vòng kernel, đó là những gì dmesg đọc. Bây giờ, tôi không nghĩ các quy trình không gian của người dùng có thể ghi vào bộ đệm đó, nhưng rõ ràng họ có thể viết bằng /dev/kmsg
và đó chính xác là những gì Upstart làm. Vì vậy, đó là phần đầu tiên của câu đố.
Phần thứ hai là có một niềm tin phổ biến rằng các thông điệp được ghi vào bộ đệm vòng kernel được tự động sao chép vào syslog bởi kernel (ít nhất đó là điều tôi luôn nghĩ). Hóa ra điều này thực sự được thực hiện bởi một daemon không gian người dùng, theo truyền thống klogd, hoạt động song song với syslogd. Rõ ràng rsyslogd thay thế syslogd nhưng rõ ràng nó cũng thay thế klogd (loại: xem ghi chú ở cuối).
Phần thứ ba là các tin nhắn được ghi vào bộ đệm vòng kernel từ không gian người dùng thực sự trông khác với các tin nhắn được viết từ không gian kernel: chúng có một phương tiện khác. dmesg có một vài tùy chọn mà tương tác với điều này: -x
sẽ hiển thị các thiết bị (và ưu tiên), trong khi -u
và -k
nói dmesg để chỉ hiển thị các thông điệp cơ sở người dùng và thông điệp cơ sở hạt nhân, tương ứng.
Bây giờ đây là móc sắt: theo mặc định, rsyslogd bỏ qua các tin nhắn với một cơ sở không phải kernel khi nó đọc các tin nhắn từ bộ đệm vòng kernel. Tùy chọn cấu hình có liên quan $KLogPermitNonKernelFacility
là tắt theo mặc định và cần được bật nếu bạn muốn rsyslogd xử lý các tin nhắn này. Lưu ý rằng phần còn lại của cấu hình rsyslogd sẽ coi tất cả các thông báo từ bộ đệm vòng nhân là có kern
cơ sở, bất kể cơ sở mà chúng có trong bộ đệm vòng nhân.
Thêm thông tin
nhật ký hệ thống
Mã có thể ghi vào syslog bằng cách gọi hàm glibc syslog()
, được mô tả trong man 3 syslog
. Rõ ràng các chức năng này ghi vào /dev/log
. Mã có thể đọc từ syslog bằng cách đọc /dev/log
, và đây là những gì syslogd
và thay thế của nó làm. rsyslogd
đọc /dev/log
bằng imuxsock
mô-đun đầu vào của nó .
Bộ đệm hạt nhân
Không gian hạt nhân ghi vào bộ đệm này bằng cách gọi hàm kernel printk()
, vì vậy đôi khi nó được gọi là bộ đệm printk. Không gian người dùng có thể viết cho nó bằng cách viết vào /dev/kmsg
. Không gian người dùng có thể đọc từ bộ đệm này bằng một số phương thức: nó có thể đọc từ /proc/kmsg
(những gì dmesg làm theo mặc định) hoặc nó có thể đọc từ /dev/kmsg
hoặc nó có thể gọi cuộc gọi hệ thống syslog()
, được mô tả trong man 2 syslog
và hoàn toàn khác với chức năng glibc syslog()
được mô tả trong man 3 syslog
. glibc thực sự cung cấp một trình bao bọc cho lệnh gọi hệ thống syslog()
, được gọi klogctl()
, để giúp giảm bớt sự nhầm lẫn này.
Theo truyền thống, klogd
đọc từ một trong các giao diện này, sau đó gọi hàm glibc syslog()
để sao chép chúng vào syslog. rsyslogd đọc một trong những giao diện này thông qua imklog
mô-đun đầu vào của nó nhưng AFAIK không bận tâm đến việc gọi glibc syslog()
, đó là lý do tại sao nó không giống như klogd; nó chỉ xử lý đầu ra imklog
giống như nó xử lý đầu ra từ bất kỳ mô-đun đầu vào nào khác. Có một cảnh báo bổ sung rằng tất cả imklog
đầu ra có kern
cơ sở bất kể các thông điệp cơ sở có trong bộ đệm vòng kernel.
Tài liệu tham khảo
dmesg
nhưng nó không có ý nghĩa gì nếu không có bối cảnh được đưa ra ở đây.