Wednesday, October 9, 2013

Tạo Syslog để theo dõi một số tiến trình trong Linux

Với người quản trị hệ thống việc theo dõi log hệ thống luôn là một trong những việc quan trọng nhất. Sau đây tôi xin giới thiệu Syslog, một công cụ ghi log khá phổ biến trên Linux.

Syslog là một công cụ nhận biết và ghi lại tất cả các loại system message, từ loại thông thường cho đến quan trọng. Syslog quản lý các system message dựa trên hai nhãn của sys-tem message.

Nhãn thứ nhất thể hiện nguồn tạo message.

Nhãn thứ hai thể hiện mức độ quan trọng của message, gồm tám giá trị như sau :
Mã:
0 emergencies
1 alerts
2 critical
3 errors
4 warnings
5 notifications
6 informational
7 debugging
Mã:
/etc/syslog.conf
Là file cấu hình quy định hoạt động ghi log system message của syslog, file này mặc định gồm hai cột.

Cột thứ nhất thể hiện syslog sẽ nhận các message từ đâu và mức độ quan trọng của các message, cột thứ hai thể hiện file chứa các message đó.
vi dụ cấu hình sau

Mã:
info;mail.none;authpriv.none;cron.none /var/log/messages
Thể hiện file /var/log/message sẽ chứa tất các system message có mức độ từ info trở lên ngoại trừ các message của mail, authpriv, cron.

Mã:
debug /var/log/debug
Thể hiện mọi thông tin debug của hệ thống sẽ được ghi vào file

Mã:
/var/log/debug
*.emerg *

Thể hiện mọi system message loại emerge sẽ được ghi trực tiếp ra màn hình.

Bên cạnh đó có nhiều dịch vụ hệ thống sẽ ghi log message của nó vào file riêng biệt mà không phụ thuộc vào cấu hình syslog như.
dịch vụ mail sẽ ghi log vào

Mã:
file /var/log/maillog
Dịch vụ apache sẽ ghi log vào các file trong thư mục

Mã:
/var/log/httpd/
...
Khi đó muốn xem log của dịch vụ nào bạn phải mở các file log tương ứng của dịch vụ đó

Xem log hệ thống

Thông thường khối lượng system message được ghi lại là rất lớn nhất là đối với những hệ thống có mật độ xử lý lớn. Sau đây là một số lệnh thường dùng để xem những file log có số lượng message lớn.


Mã:
tail -f /var/log/messages
Các log message mới xuất hiện sẽ được đưa ra màn hình

Mã:
grep string /var/log/messages | more
Chỉ hiện các message có chứa ký tự string theo từng trang màn hình.

Mã:
more /var/log/message
Lần lượt xem log message trên từng trang màn hdduwowcjR
Remote syslog

Với syslog bạn có thể thực hiện việc ghi log của nhiều hệ thống ở nhiều địa điểm cách xa nhau vào một server log duy nhất. Đây cũng là một điểm giúp tăng khả năng bảo mật hệ thống mà bạn cần lưu ý.

Cũng như mọi dịch vụ remote khác phần cấu hình sẽ gồm hai phần, phần phía Server (serverlog) và phần phía Client (clientlog).
Cấu hình phía Serverlog

Như đã nói syslog đọc file cấu hình /etc/syslog.conf để xác định loại system message mà nó sẽ nhận và vị trí file mà nó sẽ ghi log vào. Tuy nhiên bên cạnh đó nó còn đọc file /etc/sysconfig/syslog để xác định mốt hoạt động.
Mặc định syslog không nhận system message từ các hệ thống ở xa tuy nhiên điều này sẽ thay đổi nếu biến SYSLOGD_OPTIONS trong file /etc/sysconfig/syslog được đặt thêm giá trị -r như sau :

Mã:
# Options to syslogd
# -m 0 disables 'MARK' messages.
# -r enables logging from remote machines
# -x disables DNS lookups on messages received with -r
# See syslogd(8) for more details
Mã:
SYSLOGD_OPTIONS="-m 0 -r"

# Options to klogd
# -2 prints all kernel oops messages twice; once for klogd to decode, and
# once for processing with 'ksymoops'
# -x disables all klogd processing of oops messages entirely
# See klogd(8) for more details


KLOGD_OPTIONS="-2"
Sau khi sau khi sửa file /etc/sysconfig/syslog bạn restart dịch vụ syslog để những thay đổi có hiệu lực.
bạn dùng lệnh netstat để đảm bảo syslog trên hệ thống đã sẵn sàng nhận message từ các hệ thống ở xa.
Mã:
netstat -a | grep syslog
udp 0 0 *:syslog *:*
hoặc

Mã:
netstat -an | grep 514
udp 0 0 0.0.0.0:514 0.0.0.0:*
lúc này syslog đã sẵn sàng nhận system message UDP tại port 514.

Cấu hình phía Clientlog
khai báo địa chỉ ip và tên host đầy đủ (FQDN) của Serverlog tại file /etc/hosts
192.168.1.100 syslogserver.com syslogserver loghost

Với loghost là nickname của logserver.
Sửa file /etc/syslog.conf để syslog trên máy Clientlog gửi message đến máy loghost (Serverlog).
ví dụ :

Mã:
*.debug @loghost
*.debug /var/log/messages
*.debug @loghost
*.debug /var/log/messages
Thể hiện các system message từ mức debug trở lên sẽ cùng được gửi đến máy loghost và ghi vào file /var/log/message trên Clientlog.

Với những hệ thống lớn có số lượng file log lớn thì việc quản lý các file log này cũng là một vấn đề. Logrotate là một công cụ hữu hiệu hỗ trợ cho việc quản trị các file log. Với Logrotate các file log có thể được định kỳ sử dụng lại theo ngày tuần tháng hay theo kích thước file log, nén, xoá bỏ file log...
Hoạt động của logrotate mặc định được cấu hình tại file /etc/logrotate.conf thông qua những tham số tuỳ chọn, sau đây là một số tham số thường dùng.

compress : nén những file log đã sử dụng
nocompress: ngược lại với tuỳ chọn compress
create mode owner group: khi sử dụng một file log mới, file log mới được tạo sẽ có các thuộc tính (mode, owner group).
nocreate : không tạo file log mới.
mail address : khi hết chu kỳ sử dụng file log sẽ được gửi tới địa chỉ (address).
nomail : ngược lại với tuỳ chọn trên.
daily : chu kỳ sử dụng file log theo ngày
weekly : chu kỳ sử dụng file log theo tuần.
monthly : chu kỳ sử dụng file log theo tháng.
rotate count : xác định số lần luân phiên sử dụng file log.
size size : chu kỳ sử dụng file log được xác định theo kích thước.
include /etc/logrotate.d : đọc thêm các thông tin cấu hình tại các file trong thư mục /etc/logrotate. Các tham số khai báo ở các file này có độ ưu tiên cao hơn các tham số khai báo trong file /etc/logrotate.conf.

Ví dụ một file /etc/logrotate có thể như sau :


Mã:
weekly
rotate 4
errors root
create
compress
include /etc/logrotate.d

/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}

/var/log/lastlog {
monthly
rotate 1
}

Phần mặc định xác định mỗi file log được ghi trong một tuần, chỉ lưu lại file log của bốn tuần, các logrotate error message được gửi tới root, các file log lưu trữ được nén lại.

Cho phép logrotate đọc thêm các thông tin cấu hình nằm tại các file trong thư mục /etc/logrotate.d

File log /var/log/wtmp được ghi log trong một tháng, khi tạo file log mới file này có thuộc tính là 0664, woner là root, group là utmp, chỉ lưu thông tin log trong một tháng.

File log /var/log/lastlog được ghi log trong một tháng, chỉ lưu thông tin log trong một tháng.