Trong Linux, tệp nhật ký là tệp chứa thông báo về các chức năng hệ thống được quản trị viên hệ thống sử dụng để xác định các sự cố có thể xảy ra trên máy. Nhật ký giúp quản trị viên hình dung các sự kiện đã xảy ra trong hệ thống theo thời gian. Thông thường, tất cả các tệp nhật ký đều được lưu trong thư mục /var/log trong Linux. Tại vị trí này, có một số loại tệp nhật ký để lưu trữ nhiều thông báo khác nhau, chẳng hạn như tệp nhật ký để ghi lại các sự kiện hệ thống, tệp nhật ký cho các thông báo liên quan đến bảo mật, các tệp nhật ký khác dành riêng cho hạt nhân, người dùng hoặc tác vụ cron. Mục đích chính của tệp nhật ký là khắc phục sự cố hệ thống. Hầu hết các tệp nhật ký trong Linux đều được dịch vụ rsyslogd kiểm soát. Trên các bản phân phối Linux mới hơn, tệp nhật ký cũng được dịch vụ hệ thống journald kiểm soát và quản lý, đây là một phần của chương trình khởi tạo systemd. Các nhật ký được lưu trữ bởi journal daemon được ghi ở định dạng nhị phân và chủ yếu là không ổn định, được lưu trữ trong RAM và trong bộ đệm vòng trong /run/log/journal/. Tuy nhiên, dịch vụ nhật ký cũng có thể được cấu hình để lưu trữ vĩnh viễn các thông báo Syslog.
Trong Linux, máy chủ rsyslog có thể được cấu hình để chạy trình quản lý nhật ký trung tâm, theo kiểu mô hình dịch vụ-máy khách, và gửi thông báo nhật ký qua mạng thông qua các giao thức truyền tải TCP hoặc UDP hoặc nhận nhật ký từ các thiết bị mạng, máy chủ, bộ định tuyến, bộ chuyển mạch hoặc các hệ thống khác hoặc thiết bị nhúng tạo nhật ký.
Trình nền Rsyslog có thể được thiết lập để chạy như một máy khách và máy chủ cùng một lúc. Được cấu hình để chạy như một máy chủ, Rsyslog sẽ lắng nghe trên cổng mặc định 514 TCP và UDP và sẽ bắt đầu thu thập các thông báo nhật ký được gửi qua mạng bởi các hệ thống từ xa. Với tư cách là máy khách, Rsyslog sẽ gửi qua mạng các thông báo nhật ký nội bộ đến máy chủ Ryslog từ xa qua cùng một cổng TCP hoặc UDP.
Rsyslog sẽ lọc các thông báo syslog theo các thuộc tính và hành động đã chọn. Các bộ lọc rsyslog như sau:
các tiện ích hoặc ưu tiên, từ khóa none không chỉ định ưu tiên nào, dấu bằng (=) chỉ chọn ưu tiên đó và dấu chấm than (!) phủ định ưu tiên.
Phần hành động của syslog được biểu thị bằng câu lệnh destination. Điểm đến của một thông báo nhật ký có thể là một tệp được lưu trữ trong hệ thống tệp, một tệp trong đường dẫn hệ thống /var/log/, một đầu vào quy trình cục bộ khác thông qua một đường ống được đặt tên hoặc FIFO. Các thông báo nhật ký cũng có thể được chuyển hướng đến người dùng, bị loại bỏ vào một lỗ đen (/dev/null) hoặc được gửi đến stdout hoặc đến một máy chủ syslog từ xa thông qua giao thức TCP/UDP. Các thông báo nhật ký cũng có thể được lưu trữ trong cơ sở dữ liệu, chẳng hạn như MySQL hoặc PostgreSQL.
Trong các bản phân phối dựa trên Debian:
Trong các bản phân phối dựa trên RHEL như CentOS:
Để xác minh xem daemon Rsyslog có được khởi động trên hệ thống hay không, hãy thực hiện các lệnh bên dưới, tùy thuộc vào phiên bản phân phối của bạn.
Trên các bản phân phối Linux mới hơn có systemd:
Trên các phiên bản Linux cũ hơn có init:
Để khởi động daemon thersyslog, hãy đưa ra lệnh sau.
Trên các phiên bản Linux cũ hơn có init:
Trên các bản phân phối Linux mới nhất:
Để thiết lập chương trình rsyslog chạy ở chế độ máy chủ, hãy chỉnh sửa tệp cấu hình chính trong /etc/rsyslog.conf. Trong tệp này, hãy thực hiện các thay đổi sau như được hiển thị trong mẫu bên dưới.
Xác định vị trí và bỏ chú thích bằng cách xóa dấu thăng (#) các dòng sau để cho phép tiếp nhận tin nhắn nhật ký UDP trên cổng 514. Theo mặc định, cổng UDP được syslog sử dụng để gửi-nhận tin nhắn.
Vì giao thức UDP không đáng tin cậy để trao đổi dữ liệu qua mạng, bạn có thể thiết lập Rsyslog để xuất tin nhắn nhật ký đến máy chủ từ xa qua giao thức TCP. Để bật giao thức tiếp nhận TCP, hãy mở tệp /etc/rsyslog.conf và bỏ chú thích các dòng sau như được hiển thị bên dưới. Điều này sẽ cho phép daemon rsyslog liên kết và lắng nghe trên một socket TCP trên cổng 514.
Cả hai giao thức đều có thể được bật trong rsyslog để chạy cùng lúc.
Nếu bạn muốn chỉ định những người gửi nào bạn cho phép truy cập vào daemon rsyslog, hãy thêm dòng sau sau các dòng giao thức đã bật:
Bạn cũng sẽ cần tạo một mẫu mới sẽ được daemon rsyslog phân tích trước khi nhận các bản ghi đến. Mẫu sẽ hướng dẫn máy chủ Rsyslog cục bộ nơi lưu trữ các thông báo nhật ký đến. Xác định mẫu ngay sau dòng $AllowedSender như được hiển thị trong ví dụ bên dưới.
Để chỉ ghi nhật ký các thông báo do tiện ích kern tạo ra, hãy sử dụng cú pháp bên dưới.
Các bản ghi đã nhận được sẽ được phân tích cú pháp bởi mẫu trên và sẽ được lưu trữ trong hệ thống tệp cục bộ trong thư mục /var/log/, trong các tệp được đặt tên theo tên máy chủ của máy khách là tiện ích máy khách đã tạo ra các thông báo: %HOSTNAME% và %PROGRAMNAME% biến.
Các & bên dưới ~ Quy tắc chuyển hướng cấu hình daemon Rsyslog để chỉ lưu các thông báo nhật ký đến vào các tệp được chỉ định ở trên bởi tên biến. Nếu không, các bản ghi đã nhận sẽ được xử lý thêm và cũng được lưu trữ trong nội dung của các bản ghi cục bộ, chẳng hạn như tệp /var/log/syslog.
Để thêm quy tắc loại bỏ tất cả các thông báo nhật ký liên quan đến thư, bạn có thể sử dụng câu lệnh sau.
Các biến khác có thể được sử dụng để xuất tên tệp là: %syslogseverity%, %syslogfacility%, %timegenerated%, %HOSTNAME%, %syslogtag%, %msg%, %FROMHOST-IP%, %PRI%, %MSGID%, %APP-NAME%, %TIMESTAMP%, %$year%, %$month%, %$day%
Bắt đầu từ Rsyslog phiên bản 7, có thể sử dụng định dạng cấu hình mới để khai báo mẫu trong máy chủ Rsyslog.
Mẫu mẫu phiên bản 7 có thể trông như được hiển thị bên dưới dòng.
Một chế độ khác bạn có thể viết mẫu trên cũng có thể như được hiển thị bên dưới:
Để áp dụng bất kỳ thay đổi nào được thực hiện cho tệp cấu hình rsyslog, bạn phải khởi động lại daemon để tải cấu hình mới.
Để kiểm tra ổ cắm rsyslog nào ở trạng thái lắng nghe được mở trên hệ thống Debian Linux, bạn có thể thực thi lệnhnetstat với quyền root. Truyền kết quả qua tiện ích lọc, chẳng hạn như grep.
Lưu ý rằng bạn cũng phải mở các cổng Rsyslog trong tường lửa để cho phép thiết lập các kết nối đến.
Trong các bản phân phối dựa trên RHEL có tường lửa được kích hoạt, hãy đưa ra các lệnh sau:
Trong các bản phân phối dựa trên Debian có tường lửa UFW được kích hoạt, hãy đưa ra các lệnh sau:
Quy tắc tường lửa Iptables:
Dòng này cho phép dịch vụ Rsyslog xuất tất cả các bản ghi nội bộ tới máy chủ Rsyslog ở xa trên cổng UDP 514.
Để gửi các bản ghi qua giao thức TCP, hãy sử dụng mẫu sau:
Để chỉ xuất các bản ghi liên quan đến cron với tất cả các mức độ ưu tiên tới máy chủ rsyslog, hãy sử dụng mẫu bên dưới:
Trong trường hợp không thể truy cập máy chủ Rsyslog qua mạng, hãy thêm các dòng bên dưới vào tệp /etc/rsyslog.conf ở phía máy khách để lưu trữ tạm thời các bản ghi trong tệp đệm đĩa, cho đến khi máy chủ trực tuyến.
Để áp dụng các quy tắc trên, daemon Rsyslog cần được khởi động lại để hoạt động như một máy khách.
Trong Linux, máy chủ rsyslog có thể được cấu hình để chạy trình quản lý nhật ký trung tâm, theo kiểu mô hình dịch vụ-máy khách, và gửi thông báo nhật ký qua mạng thông qua các giao thức truyền tải TCP hoặc UDP hoặc nhận nhật ký từ các thiết bị mạng, máy chủ, bộ định tuyến, bộ chuyển mạch hoặc các hệ thống khác hoặc thiết bị nhúng tạo nhật ký.
Trình nền Rsyslog có thể được thiết lập để chạy như một máy khách và máy chủ cùng một lúc. Được cấu hình để chạy như một máy chủ, Rsyslog sẽ lắng nghe trên cổng mặc định 514 TCP và UDP và sẽ bắt đầu thu thập các thông báo nhật ký được gửi qua mạng bởi các hệ thống từ xa. Với tư cách là máy khách, Rsyslog sẽ gửi qua mạng các thông báo nhật ký nội bộ đến máy chủ Ryslog từ xa qua cùng một cổng TCP hoặc UDP.
Rsyslog sẽ lọc các thông báo syslog theo các thuộc tính và hành động đã chọn. Các bộ lọc rsyslog như sau:
- Bộ lọc Facility hoặc Priority
- Bộ lọc dựa trên thuộc tính
- Bộ lọc dựa trên biểu thức
- auth/authpriv= tin nhắn do quy trình xác thực tạo ra
- cron= nhật ký liên quan đến tác vụ cron
- daemon= tin nhắn liên quan đến dịch vụ hệ thống đang chạy
- kernel= tin nhắn hạt nhân Linux
- mail= tin nhắn máy chủ thư
- syslog= tin nhắn liên quan đến syslog hoặc các daemon khác (máy chủ DHCP gửi nhật ký tại đây)
- lpr= tin nhắn máy in hoặc máy chủ in
- local0 - local7= tin nhắn tùy chỉnh dưới sự kiểm soát của quản trị viên
- emerg= Khẩn cấp – 0
- alert= Cảnh báo – 1
- err= Lỗi – 3
- warn= Cảnh báo – 4
- notice= Thông báo – 5
- info= Thông tin – 6
- debug= Gỡ lỗi – 7 cấp độ cao nhất
các tiện ích hoặc ưu tiên, từ khóa none không chỉ định ưu tiên nào, dấu bằng (=) chỉ chọn ưu tiên đó và dấu chấm than (!) phủ định ưu tiên.
Phần hành động của syslog được biểu thị bằng câu lệnh destination. Điểm đến của một thông báo nhật ký có thể là một tệp được lưu trữ trong hệ thống tệp, một tệp trong đường dẫn hệ thống /var/log/, một đầu vào quy trình cục bộ khác thông qua một đường ống được đặt tên hoặc FIFO. Các thông báo nhật ký cũng có thể được chuyển hướng đến người dùng, bị loại bỏ vào một lỗ đen (/dev/null) hoặc được gửi đến stdout hoặc đến một máy chủ syslog từ xa thông qua giao thức TCP/UDP. Các thông báo nhật ký cũng có thể được lưu trữ trong cơ sở dữ liệu, chẳng hạn như MySQL hoặc PostgreSQL.
Cấu hình Rsyslog làm Máy chủ
Trình nền Rsyslog được tự động cài đặt trong hầu hết các bản phân phối Linux. Tuy nhiên, nếu Rsyslog chưa được cài đặt trên hệ thống của bạn, bạn có thể đưa ra một trong các lệnh bên dưới để cài đặt dịch vụ> bạn sẽ cần quyền root để chạy các lệnh.Trong các bản phân phối dựa trên Debian:
Mã:
sudo apt-get install rsyslog
Mã:
sudo yum install rsyslog
Trên các bản phân phối Linux mới hơn có systemd:
Mã:
systemctl status rsyslog.service
Mã:
service rsyslog status
Mã:
/etc/init.d/rsyslog status
Trên các phiên bản Linux cũ hơn có init:
Mã:
service rsyslog start
Mã:
/etc/init.d/rsyslog start
Mã:
systemctl start rsyslog.service
Mã:
sudo vi /etc/rsyslog.conf
Mã:
$ModLoad imudp
$UDPServerRun 514
Mã:
$ModLoad imtcp
$InputTCPServerRun 514[B] [/b]
Nếu bạn muốn chỉ định những người gửi nào bạn cho phép truy cập vào daemon rsyslog, hãy thêm dòng sau sau các dòng giao thức đã bật:
Mã:
$AllowedSender TCP, 127.0.0.1, 10.110.50.0/24, *.yourdomain.com
Mã:
$template Incoming-logs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"
[I]*.* [/I]?Incoming-logs
& ~
Mã:
kern.* ?Incoming-logs
Các & bên dưới ~ Quy tắc chuyển hướng cấu hình daemon Rsyslog để chỉ lưu các thông báo nhật ký đến vào các tệp được chỉ định ở trên bởi tên biến. Nếu không, các bản ghi đã nhận sẽ được xử lý thêm và cũng được lưu trữ trong nội dung của các bản ghi cục bộ, chẳng hạn như tệp /var/log/syslog.
Để thêm quy tắc loại bỏ tất cả các thông báo nhật ký liên quan đến thư, bạn có thể sử dụng câu lệnh sau.
Mã:
mail.* ~
Bắt đầu từ Rsyslog phiên bản 7, có thể sử dụng định dạng cấu hình mới để khai báo mẫu trong máy chủ Rsyslog.
Mẫu mẫu phiên bản 7 có thể trông như được hiển thị bên dưới dòng.
Mã:
template(name="MyTemplate" type="string"
string="/var/log/%FROMHOST-IP%/%PROGRAMNAME:::secpath-replace%.log"
)
Mã:
template(name="MyTemplate" type="list") {
constant(value="/var/log/")
property(name="fromhost-ip")
constant(value="/")
property(name="programname" SecurePath="replace")
constant(value=".log")
}[B] [I]
[/I][/b]
Mã:
sudo service rsyslog restart
Mã:
sudo systemctl restart rsyslog
Mã:
sudo netstat –tulpn | grep rsyslog
Trong các bản phân phối dựa trên RHEL có tường lửa được kích hoạt, hãy đưa ra các lệnh sau:
Mã:
firewall-cmd --permanent --add-port=514/tcp
Mã:
firewall-cmd --permanent --add-port=514/tcp
Mã:
firewall-cmd –reload
Mã:
ufw allow 514/tcp
Mã:
ufw allow 514/udp
Mã:
iptables -A INPUT -p tcp -m tcp --dport 514 -j ACCEPT
Mã:
iptables -A INPUT -p udp --dport 514 -j ACCEPT
Cấu hình Rsyslog dưới dạng Máy khách
Để cho phép daemon rsyslog chạy ở chế độ máy khách và xuất thông báo nhật ký cục bộ tới máy chủ Rsyslog từ xa, hãy chỉnh sửa tệp /etc/rsyslog.conf và thêm một trong các dòng sau:
Mã:
*. * @IP_REMOTE_RSYSLOG_SERVER:514
Mã:
*. * @FQDN_RSYSLOG_SERVER:514
Để gửi các bản ghi qua giao thức TCP, hãy sử dụng mẫu sau:
Mã:
*. * @@IP_reomte_syslog_server:514
Mã:
cron.* @ IP_reomte_syslog_server:514
Mã:
$ActionQueueFileName queue
$ActionQueueMaxDiskSpace 1g
$ActionQueueSaveOnShutdown on
$ActionQueueType LinkedList
$ActionResumeRetryCount -1