Tại sao có quá nhiều tệp nhật ký trong một hệ thống Linux điển hình? Tại sao họ không sử dụng một db / tệp nhật ký hợp nhất và một api?


8

Tôi chỉ tự hỏi tại sao có quá nhiều tệp nhật ký trong một hệ thống Linux điển hình? Sẽ không phải là một ý tưởng tốt hơn để có một chức năng api hệ thống để ghi nhật ký và một bảng tổng hợp để lưu tất cả các mục nhật ký từ tất cả các ứng dụng?


1
Câu hỏi bổ sung được tái cấu trúc: Xem xét * nix rất chín chắn, tại sao các quy ước đặt tên (& conf) log vẫn còn quá rời rạc và không nhất quán? Nếu tiện ích mở rộng tệp hoàn toàn dành cho sử dụng của con người, tại sao tất cả các nhà phát triển (và liên kết tượng trưng cho di sản) không thể đồng ý sử dụng .log.conflàm định danh?
dhaupin

Câu trả lời:


16

Đó là một phần của triết lý Unix . Ý tưởng là các tệp văn bản không bị khóa chương trình và mọi người đều có thể sử dụng bất kỳ kỹ thuật nào họ thích. Để thực hiện điều này hơn nữa, các tệp phẳng thường được sử dụng, trái ngược với các ngôn ngữ đánh dấu như XML (mặc dù tôi cũng đã thấy các chương trình lưu trữ mọi thứ ở định dạng XML).

Trong googling tôi đã tìm thấy bài viết hay này về văn bản đơn giản, với các bình luận về triết lý Unix.



15

Sử dụng các tệp văn bản đơn giản có lợi thế là bạn không cần bất kỳ công cụ cụ thể nào của cơ sở dữ liệu để nhận các mục nhật ký của mình.

Bạn có thể phân tích chúng bằng grep nếu bạn thích, bạn có thể mở chúng bằng máy nhắn tin yêu thích của mình và bạn có thể xử lý chúng bằng ngôn ngữ kịch bản yêu thích của bạn như Perl, Python, v.v. mà không cần thêm bất kỳ thư viện nào.

Trên hệ thống Unix, bạn đã có một số loại "API nhật ký hệ thống". Nó được gọi là nhật ký hệ thống. Syslog không thực sự là một API nhưng nó là một tiêu chuẩn để ghi nhật ký tin nhắn. Tên viết tắt của giao thức mạng và thư viện và daemon đằng sau nó.

Cấu hình mặc định của hầu hết các hệ thống là một trình nền syslog nghe các tin nhắn cục bộ.

Trình nền chấp nhận các thông báo và thực hiện đăng nhập. Có một số cách triển khai khác nhau của syslog daemon cho tất cả các loại nền tảng và cũng có thể đăng nhập tin nhắn của bạn vào cơ sở dữ liệu.

Điều đó phụ thuộc vào bạn.


10

Tôi chỉ tự hỏi tại sao có quá nhiều tệp nhật ký trong một hệ thống Linux điển hình?

Các tệp nhật ký khác nhau chứa thông tin khác nhau (mặc dù thường có một số trùng lặp). Chúng thường có các đặc điểm khác nhau: các chính sách xoay vòng và lưu giữ khác nhau, các quyền khác nhau, v.v ... Trình nền syslog đảm nhiệm việc viết chúng; bạn có thể thấy các thiết lập của nó trong /etc/syslog.confhoặc /etc/syslog-ng.conf.

Sẽ không phải là một ý tưởng tốt hơn để có một chức năng api hệ thống để đăng nhập

Đây là một ý tưởng tốt. Hãy gọi nó là syslog . Công việc của nó là gửi các mục nhật ký đến trình nền syslog.

và một bảng tổng hợp để lưu tất cả các mục nhật ký từ tất cả các ứng dụng?

Bây giờ đó là cả một con giun. Bạn dường như đang giả sử sự hiện diện của một công cụ cơ sở dữ liệu, có thể là cơ sở dữ liệu quan hệ, có thể là một cơ sở dữ liệu bạn có thể truy vấn trong SQL. Nhưng Unix cũ hơn SQL và có những lý do rất chính đáng tại sao nó không chấp nhận SQL như một thành phần tiêu chuẩn. Trong Unix, cơ sở dữ liệu là hệ thống tập tin. Nó không phải là một cơ sở dữ liệu quan hệ, nó là một cơ sở đơn giản . Các mục của nó không phải là hàng, mà là các tệp đơn giản , tốt nhất là văn bản, tốt nhất là với định dạng đơn giản. Ví dụ: tệp nhật ký là tệp văn bản, với một mục nhập trên mỗi dòng, chứa ngày, tên máy, chương trình khởi tạo và văn bản nhập. Sử dụng cơ sở dữ liệu quan hệ sẽ có một số nhược điểm:

  • Bạn làm gì nếu cơ sở dữ liệu không hoạt động? (Hệ thống tập tin là một thành phần cơ bản (và tôi đã đề cập đến nó đơn giản hơn nhiều so với cơ sở dữ liệu quan hệ?) và đáng tin cậy.)
  • Làm thế nào để bạn đăng nhập hoạt động cơ sở dữ liệu? .
  • Làm thế nào để bạn truy cập các mục nhật ký? Hãy so sánh sự đơn giản của cat, grep, lesschống lại các truy vấn SQL. Và các quyền đối với tệp, tốt, tôi không biết làm thế nào bạn xử lý việc này trong cơ sở dữ liệu quan hệ thông thường.
  • Cài đặt nhiều máy chủ không lưu trữ nhật ký của họ cục bộ, họ sử dụng tính năng nhật ký từ xa được tích hợp vào trình nền syslog kể từ khi bình minh của Unix xuất hiện. Điều đó dễ thực hiện với kiến ​​trúc ghi nhật ký unix; bạn không thể chạy một cơ sở dữ liệu nhân rộng trên ngân sách phức tạp đó.


1

Điều này sẽ làm cho những thứ như 'tail -f /var/log/apache/access.log' không thể thực hiện được.

Tại sao bạn nghĩ sẽ tốt hơn nếu đặt mọi thứ trong một tệp?


1
grep '\[apache\]' | tail -f /dev/stdin- nhưng có nhật ký trên mỗi người dùng trên máy chủ (khi người dùng không có quyền truy cập vào nhật ký của người dùng khác).
Maciej Piechotka

"Tại sao bạn nghĩ sẽ tốt hơn nếu đặt mọi thứ vào một tệp?" - Bởi vì tôi yêu SQL ;-) Và vì tôi không thích (và hầu như không thể) để ghi nhớ nhiều điều.
Ivan

11
Khi tất cả những gì bạn biết là SQL, mọi thứ trông giống như một vấn đề cơ sở dữ liệu quan hệ.
David Mackffy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.