+4

Tìm hiểu về Syslog-ng, Rsyslog và xây dựng hệ thống lưu log tập trung.

Bài toán đưa ra: Chúng ta có một reverse-proxy web server, có khoảng 100 loại log được sinh ra (hoặc nhiều server, mỗi server đều có log). Làm sao để đẩy log về tập trung vào một server log gần như real-time, tiện cho việc quản lý, điều tra?

Hướng đi: Ở đây tôi sẽ kết hợp cả Rsyslog và Syslog-ng. Rsyslog sẽ gửi log đến cho Syslog-ng, sau đó sử dụng bộ lọc (filter) của syslog-ng để chia từng loại log đó ra.

Phần sau: Bài viết tiếp theo, tôi sẽ viết rsyslog-client >>> rsyslog-server filter log.

  • Mô hình Tại client, rsyslog sẽ thu thập log được định nghĩa sẵn, sau đó gắn tag cho log đó. Khi đến Syslog-ng server, Syslog sẽ phân loại tag và ghi ra file riêng.

Cấu hình rsyslog client Để hỗ trợ file ngoài, ta cần phải bật module imFile của Rsyslog lên.

$ModLoad imfile
# Bật module Imfile
######################################################## log access
$InputFilePollInterval 2
$InputFileName /var/log/apache2/access.log
$InputFileTag FRAMGIA-ACCESS-LOG
$InputFileStateFile CS1-state-varlog
$InputFileSeverity info
$InputFileFacility local5
$InputRunFileMonitor

######################################################## log error 
$InputFilePollInterval 2
$InputFileName /var/log/apache2/error.log
$InputFileTag FRAMGIA-ERROR-LOG
$InputFileStateFile CS1-state-varlog
$InputFileSeverity info
$InputFileFacility local5
$InputRunFileMonitor

local5.* 						          @@10.0.1.171:514

Giải thích:

$InputFilePollInterval 2 #Thời gian quét log lặp lại trong vòng 2 giây

$InputFileName /var/log/apache2/error.log #Đường dẫn file log

$InputFileTag FRAMGIA-ERROR-LOG #TAG của log, tag này có chức năng phân loại log trên syslog-ng server

$InputFileStateFile CS1-state-varlog

$InputFileSeverity info #Mode log, mức độ cảnh báo là info

$InputFileFacility local5 #mode local5, rsyslog cho phép tùy biến từ local 0-7

$InputRunFileMonitor #monitor file log được định nghĩa ở trên

local5.* @@IP_SYSLOG_SERVER:514 #gom tất cả mod local5 đẩy về server port 514

Cài đặt Server Syslog-ng

yum install epel-release
yum install syslog-ng syslog-ng-libdbi

Centos sẽ dùng Rsyslog là hệ thống lưu log mặc định, vì vậy muốn chuyển qua Syslog-ng ta cần phải tắt Rsyslog đi

service rsyslog stop
chkconfig rsyslog off
#---------------------------------
service syslog-ng start
chkconfig syslog-ng on

vim /etc/syslog-ng/conf.d/proxy.conf

############################### SOURCE
#Lắng nghe ở port 514, ta có thể bỏ udp đi vì udp là giao thức không ổn định
source s_reverse_proxy {
                udp(ip(0.0.0.0) port(514) tags());
                tcp(ip(0.0.0.0) port(514) tags());
               };
               
################################ APACHE ACCESS LOG
# Định nghĩa destination file
destination d_reverse_proxy2 {
        file(
                "/opt/syslog-file-server/reverse_proxy/apache-access-$HOST-$YEAR$MONTH$DAY.log"
                perm(644)
                create_dirs(yes)
        );
};

#Định nghĩa bộ lọc
filter f_reverse_proxy2 { match("FRAMGIA-ACCESS-LOG")  };

# xử lý
log { source(s_reverse_proxy); filter(f_reverse_proxy2); destination(d_reverse_proxy2); };

################################ APACHE ERROR LOG
destination d_reverse_proxy3 {
        file(
                "/opt/syslog-file-server/reverse_proxy/apache-error-$HOST-$YEAR$MONTH$DAY.log"
                perm(644)
                create_dirs(yes)
        );
};
filter f_reverse_proxy3 { match("FRAMGIA-ERROR-LOG")  };
log { source(s_reverse_proxy); filter(f_reverse_proxy3); destination(d_reverse_proxy3); };

-source: chứa nguồn của thông báo, nó có thể là: files, local sockets hoặc remote hosts. -destination: đích đến của các messages, nó cho biết những gì được log và được log vào đâu. Nó cũng có thể là: files, local sockets hoặc remote hosts. -filter: bộ lọc của syslog-ng hỗ trợ rất mạnh mẽ ---facility() Được chia làm 23 loại, user, mail, syslog, ftp, cron .... ---filter() filter trong filter ---host() filter source host ---inlist() whitelisting/blacklisting. ---level() or priority() lọc theo mức độ như info, warning, criical ---match() match kí tự ---message() Use a regular expression to filter messages based on their content. ---netmask() lọc theo ip hoặc cả dải mạng ---program() lọc theo program ---source() lọc theo source, chỉ hỗ trợ syslog-ng client ---tags() lọc theo tag mà client gửi đến

Kết quả,


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí