Tìm hiểu về Log, Syslog, Rsyslog trên Linux
Bài viết này Nhân Hòa sẽ giới thiệu với các bạn về những file log, Syslog, Rsyslog…cơ bản trên hệ điều hành Linux, cũng như công dụng của chúng từ đó giúp cho chúng ta có thể tự tìm hiểu và tự học Linux cơ bản dễ dàng hơn.
I.Log là gì? Log để làm gì?
1.Giới thiệu về file log
- Log ghi lại các thông báo về hoạt động của cả hệ thống hoặc của các dịch vụ được triển khai trên hệ thống và file tương ứng. Các file log này sẽ chứa các thông báo về máy chủ, bao gồm kernel, dịch vụ và ứng dụng đang chạy trên nó. File log cung cấp thời gian của các sự kiện cho hệ điều hành, ứng dụng và hệ thống Linux và là một công cụ quan trọng giúp chúng ta kiểm tra và khắc phục sự cố.
- Mỗi ứng dụng được cài đặt trên hệ thống có cơ chế tạo log file riêng của nó. Trên Linux thì nơi lưu trữ Log được tập trung tại các file log trong thư mục /var/log/, nó chứa hầu hết các file log như access log, error log, app log, service log, system log…
2.Một số file log thông dụng có mặc định trên /var/log và ý nghĩa của nó.
- /var/log/messages : File log này sẽ chứa nhật ký hoạt động hệ thống (System Logs). Nó chủ yếu được sử dụng để lưu trữ các thông tin liên quan đến hệ thống như mail, cron,kern, auth,… bao gồm cả các thông báo trong quá trình khởi động hệ thống.
- /var/log/cron : Chứa dữ liệu log của cron deamon. Bắt đầu và dừng cron cũng như cronjob thất bại.
- /var/log/auth.log : Chứa thông tin xác thực trên hệ thống trong máy chủ được ghi lại. Khi các bạn cần tìm kiếm vấn đề liên quan đến cơ chế ủy quyền của người dùng thì hãy tìm kiếm trong file log này. File log này giúp các bạn xác định được các lần thử đăng nhập thất bại hay kiểm tra các cuộc tấn công và các lỗ hổng liên quan đến cơ chế ủy quyền của người dùng.
- /var/log/secure : File log này chứ các thông tin về xác thực trên hệ thống. Và có thể lưu trữ tất cả các thông tin liên quan đến bảo mật, các lỗi xác thực. File log này còn giúp cho chúng ta theo dõi thông tin đăng nhập sudo, đăng nhập SSH và các lỗi khác được ghi bởi tiến trình chạy nền của dịch vụ bảo mật hệ thống,mật khẩu thất bại, người dùng không tồn tại….
- /var/log/kern.log : Chứa các thông tin được ghi bởi kernel. Thông qua file log này giúp cho chúng ta có thể khắc phục các lỗi và cảnh báo liên quan đến kernel.
- /var/log/wtmp : Chứa tất cả các đăng nhập và đăng xuất lịch sử.
- /var/log/btmp : Thông tin đăng nhập không thành công.
- /var/run/utmp : Thông tin log trạng thái đăng nhập hiện tại của mỗi người dùng.
- /var/log/maillog hoặc /var/log/mail.log : File log lưu trữ các thông tin từ máy chủ mail đang chạy trên hệ thống bao gồm các thông tin về postfix, smtpd, MailScanner, SpamAssassain hoặc bất kỳ dịch vụ liên quan đến email nào khác. Trong file log này sẽ ghi lại tất cả các email đã được gửi hoặc nhận trong một khoảng thời gian cụ thể. Thông qua file log này giúp chúng ta có thể kiểm tra các vấn đề gửi thư thất bại, nhận thông tin về spam có thể bị chặn bởi máy chủ mail. Theo dõi nguồn gốc của một email đến bằng cách xem xét kỹ file log maillog hoặc mail.log.
- /var/log/httpd : lưu trữ của các file error_log và access_log của tiến trình nền httpd (Apache). File error_log sẽ ghi lại những thông tin lỗi gặp phải của httpd, còn file access_log sẽ ghi lại những thông tin về các yêu cầu nhận được qua HTTP.
- /var/log/boot.log : Lưu trữ tất cả thông tin liên quan đến khởi động và mọi thông báo được ghi lại trong quá trình khởi động bao gồm tập lệnh khởi tạo hệ thống, /etc/init.d/bootmisc.sh,… Chúng ta nên phân tích file log này để kiểm tra các vấn đề liên quan đến tắt máy không đúng cách, khởi động lại hoặc lỗi khởi động. Và cũng có thể hữu ích để xác định thời gian ngừng hoạt động của hệ thống do tắt máy đột xuất.
- /var/lib/mysql/mysql.err : File log MySQL ghi lại tất cả các thông báo gỡ lỗi, thất bại và thành công. Chứa thông tin về việc bắt đầu, dừng và khởi động lại MySQL. Sử dụng file log này để xác định các vấn đề trong khi bắt đầu, chạy hoặc dừng mysqld. Nhận thông tin về các kết nối máy khách đến thư mục dữ liệu MySQL
3.Cách xem file log
Để xem file log các bạn có thể sử dụng một số phương pháp phổ biến sau:
- vi, vim, nano…: Các bạn có thể sử dụng trình soạn thảo vi, vim, nano.. để kiểm tra file log.
- tail: Nếu chúng ta muốn xem nội dung của file log theo thời gian thực ứng dụng đang ghi vào đó, hãy sử dụng tail -f
- grep: Nếu chúng ta biết chính xác những gì đang tìm kiếm trong file log hãy sử dụng lệnh grep để grep một từ khóa
- cat: Hiển thị toàn bộ nội dung file log.
II.Tổng quan Syslog
1.Giới thiệu về Syslog:
- Syslog là viết tắt của System Logging Protocol (tạm dịch sang tiếng Việt là Giao thức ghi nhật ký hệ thống) là một giao thức client/server là giao thức dùng để chuyển log và thông điệp đến máy nhận log. Máy nhận log thường được gọi là syslogd, syslog daemon hoặc syslog server. Syslog có thể gửi qua UDP hoặc TCP. Các dữ liệu được gửi dạng cleartext. Syslog dùng port 514.
- Ngoài ra Syslog còn là một gói phần mềm trong hệ thống Linux nhằm để ghi bản tin log của hệ thống trong quá trình hoạt động như của kernel, deamon, cron, auth, hoặc các ứng dụng chạy trên hệ thống như http, dns, dhcp, ntp,..
- Syslog được phát triển năm 1980 bởi Eric Allman, nó là một phần của dự án Sendmail, và ban đầu chỉ được sử dụng duy nhất cho Sendmail. Nó đã thể hiện giá trị của mình và các ứng dụng khác cũng bắt đầu sử dụng nó. Syslog hiện nay trở thành giải pháp khai thác log tiêu chuẩn trên Unix-Linux cũng như trên hàng loạt các hệ điều hành khác và thường được tìm thấy trong các thiết bị mạng như router Trong năm 2009, Internet Engineering Task Forec (IETF) đưa ra chuẩn syslog trong RFC 5424.
- Syslog ban đầu sử dụng UDP, điều này là không đảm bảo cho việc truyền tin. Tuy nhiên sau đó IETF đã ban hành RFC 3195 (Đảm bảo tin cậy cho syslog) và RFC 6587 (Truyền tải thông báo syslog qua TCP). Điều này có nghĩa là ngoài UDP thì giờ đây syslog cũng đã sử dụng TCP để đảm bảo an toàn cho quá trình truyền tin.
- Trong chuẩn syslog, mỗi thông báo đều được dán nhãn và được gán các mức độ nghiêm trọng khác nhau. Các loại phần mềm sau có thể sinh ra thông báo: auth, authPriv, daemon, cron, ftp, dhcp, kern, mail, syslog, user,… Với các mức độ nghiêm trọng từ cao nhất trở xuống Emergency, Alert, Critical, Error, Warning, Notice, Info, and Debug.
2.Định dạng tin nhắn Syslog?
Thông báo của giao thức Syslog bao gồm 3 phần,độ dài một thông báo không được vượt quá 1024 bytes: PRI (giá trị ưu tiên được tính toán), HEADER (với thông tin nhận dạng), và MSG (thông báo chính)
2.1. Cấp độ cơ sở Syslog (Syslog facility levels)?
Một mức độ cơ sở được sử dụng để xác định chương trình hoặc một phần của hệ thống tạo ra các bản ghi.
Theo mặc định, một số phần trong hệ thống của bạn được cung cấp các mức facility như kernel sử dụng kern facility hoặc hệ thống mail của bạn bằng cách sử dụng mail facility.
- Nếu một bên thứ ba muốn phát hành log, có thể đó sẽ là một tập hợp các cấp độ facility được bảo lưu từ 16 đến 23 được gọi là “local use” facility levels.
- Ngoài ra, họ có thể sử dụng tiện ích của người dùng cấp độ người dùng (“user-level” facility), nghĩa là họ sẽ đưa ra các log liên quan đến người dùng đã ban hành các lệnh.
Dưới đây là các cấp độ facility Syslog được mô tả trong bảng:
2.2 Mức độ cảnh báo của Syslog?
- Mức độ cảnh báo của Syslog được sử dụng để mức độ nghiêm trọng của log event và chúng bao gồm từ gỡ lỗi (debug), thông báo thông tin (informational messages) đến mức khẩn cấp (emergency levels).
- Tương tự như cấp độ cơ sở Syslog, mức độ cảnh báo được chia thành các loại số từ 0 đến 7, 0 là cấp độ khẩn cấp quan trọng nhất
- Ngay cả khi các bản ghi được lưu trữ theo tên cơ sở theo mặc định, bạn hoàn toàn có thể quyết định lưu trữ chúng theo mức độ nghiêm trọng.
- Nếu bạn đang sử dụng rsyslog làm máy chủ syslog mặc định, bạn có thể kiểm tra các thuộc tính rsyslog để định cấu hình cách các bản ghi được phân tách.
Dưới đây là các mức độ nghiêm trọng của syslog được mô tả trong bảng:
2.3 PRI là gì?.
- Đoạn PRI là phần đầu tiên mà bạn sẽ đọc trên một tin nhắn được định dạng syslog
Phần PRI hay Priority là một số được đặt trong ngoặc nhọn, thể hiện cơ sở sinh ra log hoặc mức độ nghiêm trọng, là một số gồm 8 bit:
- 3 bit đầu tiên thể hiện cho tính nghiêm trọng của thông báo.
- 5 bit còn lại đại diện cho sơ sở sinh ra thông báo
Vậy biết một số Priority thì làm thế nào để biết nguồn sinh log và mức độ nghiêm trọng của nó.
Ta xét 1 ví dụ sau:
Priority = 191 Lấy 191:8 = 23.875 -> Facility = 23 (“local 7”) -> Severity = 191 – (23 * 8 ) = 7 (debug)
2.4 Header
Header bao gồm:
- TIMESTAMP : được định dạng trên định dạng của Mmm dd hh:mm:ss – Mmm, là ba chữ cái đầu tiên của tháng. Sau đó là thời gian mà thông báo được tạo ra giờ:phút:giây. Thời gian này được lấy từ thời gian hệ thống.Chú ý: nếu như thời gian của server và thời gian của client khác nhau thì thông báo ghi trên log được gửi lên server là thời gian của máy client
- HOSTNAME (đôi khi có thể được phân giải thành địa chỉ IP). Nó thường được đưa ra khi bạn nhập lệnh tên máy chủ. Nếu không tìm thấy, nó sẽ được gán cả IPv4 hoặc IPv6 của máy chủ.
2.5 MSG
Phần Message hay MSG chứa một số thông tin về quá trình tạo ra thông điệp đó. Gồm 2 phần chính:
- Tag field : là tên chương trình tạo ra thông báo
- Content field : chứa các chi tiết của thông báo
3. Syslog gửi tin nhắn hoạt động như thế nào?
3.1 Chuyển tiếp nhật ký hệ thống là gì?
- Chuyển tiếp nhật ký hệ thống (syslog forwarding) bao gồm gửi log máy khách đến một máy chủ từ xa để chúng được tập trung hóa, giúp phân tích log dễ dàng hơn.
- Hầu hết thời gian, quản trị viên hệ thống không giám sát một máy duy nhất, nhưng họ phải giám sát hàng chục máy, tại chỗ và ngoài trang web.
- Kết quả là, việc gửi nhật ký đến một máy ở xa, được gọi là máy chủ ghi log tập trung, sử dụng các giao thức truyền thông khác nhau như UDP hoặc TCP.
3.2 Syslog có sử dụng TCP hoặc UDP không?
- Syslog ban đầu sử dụng UDP, điều này là không đảm bảo cho việc truyền tin. Tuy nhiên sau đó IETF đã ban hành RFC 3195 (Đảm bảo tin cậy cho syslog) và RFC 6587 (Truyền tải thông báo syslog qua TCP). Điều này có nghĩa là ngoài UDP thì giờ đây syslog cũng đã sử dụng TCP để đảm bảo an toàn cho quá trình truyền tin.
- Syslog sử dụng port 514 cho UDP.
- Tuy nhiên, trên các triển khai log hệ thống gần đây như rsyslog hoặc syslog-ng, bạn có thể sử dụng TCP làm kênh liên lạc an toàn.
- Rsyslog sử dụng port 10514 cho TCP, đảm bảo rằng không có gói tin nào bị mất trên đường đi.
- Bạn có thể sử dụng giao thức TLS/SSL trên TCP để mã hóa các gói Syslog của bạn, đảm bảo rằng không có cuộc tấn công trung gian nào có thể được thực hiện để theo dõi log của bạn.
4.Rsyslog
- Rsyslog – “The rocket-fast system for log processing” được bắt đầu phát triển từ năm 2004 bởi Rainer Gerhards rsyslog là một phần mềm mã nguồn mở sử dụng trên Linux dùng để chuyển tiếp các log message đến một địa chỉ trên mạng (log receiver, log server) Nó thực hiện giao thức syslog cơ bản, đặc biệt là sử dụng TCP cho việc truyền tải log từ client tới server. Hiện nay rsyslog là phần mềm được cài đặt sẵn trên hầu hết hệ thống Unix và các bản phân phối của Linux như : Fedora, openSUSE, Debian, Ubuntu, Red Hat Enterprise Linux, FreeBSD…
- Nếu bạn đang sử dụng một bản phân phối Linux hiện đại (như máy Ubuntu, CentOS hoặc RHEL), máy chủ syslog mặc định được sử dụng là rsyslog.
- Rsyslog là một sự phát triển của syslog, cung cấp các khả năng như các mô đun có thể cấu hình, được liên kết với nhiều mục tiêu khác nhau (ví dụ chuyển tiếp nhật ký Apache đến một máy chủ từ xa).
- Rsyslog cũng cung cấp tính năng lọc riêng cũng như tạo khuôn mẫu để định dạng dữ liệu sang định dạng tùy chỉnh.
4.1 Tìm hiểu file cấu hình rsyslog.conf
Dưới đây là file cấu hình mặc định của file rsyslog.conf
Cơ bản trên file rsyslog.conf mặc định cho chúng ta thấy nơi lưu trữ các log tiến trình của hệ thống:
*.info;mail.none;authpriv.none;cron.none /var/log/messages
authpriv.* /var/log/secure
mail.* -/var/log/maillog
cron.* /var/log/cron
*.emerg :omusrmsg:*
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log
Trường 1: Trường Seletor
- Trường Seletor : Chỉ ra nguồn tạo ra log và mức cảnh bảo của log đó.
- Trong trường seletor có 2 thành phần và được tách nhau bằng dấu “.“
Trường 2: Trường Action
- Trường Action:là trường để chỉ ra nơi lưu log của tiến trình đó. Có 2 loại là lưu tại file trong localhost hoặc gửi đến IP của máy chủ Log
Đối với các dòng lệnh như sau:
mail.info /var/log/maillog
Khi đó lúc này bản tin log sẽ mail lại với mức cảnh báo từ info trở lên. Cụ thể là mức notice,warn,… nếu bạn chỉ muốn nó log lại mail với mức là info bạn phải sử dụng như sau: mail.=info /var/log/maillog
mail.*
Lúc này kí tự * đại diên cho các mức cảnh báo. Lúc này nó sẽ lưu hết các level của mail vào trong thư mục. Tượng tự khi đặt *. thì lúc này nó sẽ log lại tất cả các tiến trình của hệ thống vào một file. Nếu bạn muốn log lại tiến trình của mail ngoại trừ mức info bạn có thể dùng kí tự “!”
Ví dụ: mail.!info
*.info;mail.none;authpriv.none;cron.none /var/log/messages
Lúc này tất các log từ info của tiến trình hệ thống sẽ được lưu vào trong file log messages nhưng đối với các log của mail, authpriv và cron sẽ không lưu vào trong messages.
Đó là ý nghĩa của dòng mail.none;authpriv.none;cron.none
III. Tổng kết
Qua bài viết tìm hiểu về Log, Syslog, Rsyslog trên Linux hy vọng sẽ giúp ích cho các bạn ít nhiều khi tìm hiểu.