Sunday, August 18, 2013

Cài đặt công cụ giám sát web server apache

Bạn đã có cho mình một web server từ những bài trước. Bạn là admin của web server thì vấn đề giám sát hoạt động của các website là không thể thiếu. Chúng ta cần phải biết có bao nhiêu lượt truy cập, bao nhiêu dung lượng được tải về, ai truy cập… Trong Apache cũng cung cấp sẵn cho chúng ta những file log ghi lại quá trình truy cập web của người dùng. Tuy nhiên, việc dùng các file log để giám sát xem ra không tối ưu cho lắm.
Khảo sát log file trên apache
Apache có nhiều tập tin log khác nhau nhằm ghi lại những hoạt động của Web Server.
Sau đây mô tả tính năng của từng tập tin. 
File error_log: 
Là một tập tin log quan trọng nhất. Tên và vị trí của nó  được xét trong ErrorLog Directive.
ErrorLog là nơi mà httpd sẽ gửi những thông tin nhận dạng và bất kỳ những lỗi nào gặp phải trong quá trình xử lý những yêu cầu. Tập tin này chính là nơi mà ta cần xem xét đầu tiên khi gặp phải những lỗi khởi động httpd hay những thao tác của server, vì nó lưu những thông tin chi tiết về những lỗi và cách sửa lỗi. Định dạng của tập tin error_log không bị bó buộc. Nội dung của file error_log như sau:
[Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1] client denied by server configuration: /export/home/live/ap/htdocs/test      
Cột đầu tiên chỉ ra ngày giờ entry này được tạo ra. Cột thứ 2 chỉ ra đây là entry lỗi. Cột thứ 3 cho biết địa chỉ IP của client tạo ra lỗi. Tiếp theo là message có nội dung chỉ ra rằng server được cấu hình để từ chối việc truy cập của client. Tiếp theo là đường dẫn của document mà client cần truy cập.Trong quá trình kiểm tra, bạn có thể theo dõi error_log một cách liên tục bằng dòng lệnh sau:
#tail  –f  /var/log/httpd/error_log
File access_log: 
Access_log là nơi ghi lại tất cả những yêu cầu  được xử lý bởi server. Vị trí và nội dung của access log được điều khiển bởi CustomLog directive. Bạn có thể dùng LogFormat directive trong việc định dạng nội dung của tập tin access_log. LogFormat chỉ ra những thông tin mà server cần theo dõi để ghi lại trong access log. Để theo dõi yêu cầu xử lý trên Web Server ta dùng lệnh:
#tail  –f  /var/log/httpd/access_log
Luân chuyển log file:  Theo thời gian, thông tin lưu trong các tập tin log lớn làm cho kích thước của các tập tin này có thể vượt quá 1MB. Thật là cần thiết khi bạn  xóa hoặc di chuyển hay sao lưu những tập tin log này một cách  luân phiên và có chu kỳ. Ta có thể thực hiện như sau :
mv  access_log access_log.old
mv  error_log error_log.old
apachectl graceful
sleep 600
gzip access_log.old error_log.old 
Đấy là mặc định trong Apache mang lại cho các bạn. Và bạn và tôi cũng không thể nào ngồi phân tích nổi những hỗn độn trong các file log. Hai phần tiếp theo, tôi sẽ hướng dẫn các bạn giám sát hệ thống bằng giao diện đồ họa trực quan, dễ nhìn hơn.
Giám sát website bằng Awstats
AWStats là 1 công cụ phân tích, thống kê trạng thái trang web miễn phí, mạnh mẽ. Bên cạnh đó, JAWStats có thể hoạt động kết hợp với AWStats và tạo biểu đồ trạng thái, các thông số chi tiết bao gồm đồ thị, các con số, bảng, hình khối… về lượng khách truy cập tới trang web. Khi biết sử dụng và kết hợp 2 ứng dụng này với nhau, sẽ tốt hơn rất nhiều so với phương pháp dùng Ajax và Flash.
Trong bài viết này sử dụng tên miền www.example.com (đi kèm với các alias như example.com, www.example.net, và example.net) và thư mục tài liệu gốc lưu trữ tại/var/www/www.example.com/web.
Cài đặt và cấu hình AWStats
Gõ lệnh sau để cài đặt AWStats:
aptitude install awstats
Các thiết lập của AWStats lưu trữ trong thư mục /etc/awstats/. Đối với mỗi host ảo, chúng ta cần có 1 file thiết lập đặt tên theo chuẩn awstats..conf trong cùng thư mục (ví dụ đối với host www.example.com thì cần có file awstats.www.example.com.conf ). Bên cạnh đó, chúng ta có thể thiết lập file cấu hình /etc/awstats/awstats.conf theo mẫu sau:
cd /etc/awstats/
cp awstats.conf awstats.www.example.com.conf
vi awstats.www.example.com.conf
Và điều chỉnh những thông số sau:
[...]
LogFile="/var/log/apache2/access.log"
[...]
LogFormat=1
[...]
SiteDomain="www.example.com"
[...]
HostAliases="example.com www.example.net example.net"
[...]
Tham số LogFile phải chứa đường dẫn tới Apache và truy cập file log của host ảo hoặc toàn bộ file log của Apache (chỉ cần 1 file log cho toàn bộ trang web, AWStats có trang bị các bộ lọc tách tất cả các bản ghi không liên quan tới trang web chính). Mặt khác, nếu bạn có filename thuộc dạng “động”, thì có thể sử dụng biến thay thế, ví dụ như sau:
LogFile="/var/log/httpd/access.log_%YYYY-0_%MM-0_%DD-0"
Đoạn comment sau giải thích khá rõ ràng và chi tiết các thiết lập của AWStats:
"LogFile" contains the web, ftp or mail server log file to analyze.
Possible values: A full path, or a relative path from awstats.pl directory.
Example: "/var/log/apache/access.log"
Example: "../logs/mycombinedlog.log"
You can also use tags in this filename if you need a dynamic file name
depending on date or time (Replacement is made by AWStats at the beginning
of its execution). This is available tags :
   %YYYY-n  is replaced with 4 digits year we were n hours ago
   %YY-n    is replaced with 2 digits year we were n hours ago
   %MM-n    is replaced with 2 digits month we were n hours ago
   %MO-n    is replaced with 3 letters month we were n hours ago
   %DD-n    is replaced with day we were n hours ago
   %HH-n    is replaced with hour we were n hours ago
   %NS-n    is replaced with number of seconds at 00:00 since 1970
   %WM-n    is replaced with the week number in month (1-5)
   %Wm-n    is replaced with the week number in month (0-4)
   %WY-n    is replaced with the week number in year (01-52)
   %Wy-n    is replaced with the week number in year (00-51)
   %DW-n    is replaced with the day number in week (1-7, 1=sunday)
                              use n=24 if you need (1-7, 1=monday)
   %Dw-n    is replaced with the day number in week (0-6, 0=sunday)
                              use n=24 if you need (0-6, 0=monday)
   Use 0 for n if you need current year, month, day, hour…
Example: "/var/log/access_log.%YYYY-0%MM-0%DD-0.log"
Example: "C:/WINNT/system32/LogFiles/W3SVC1/ex%YY-24%MM-24%DD-24.log"
You can also use a pipe if log file come from a pipe :
Example: "gzip -d
If there are several log files from load balancing servers :
Example: "/pathtotools/logresolvemerge.pl *.log |"
Có thể bạn đang sử dụng định dạng combined của Apache, đối với trường hợp này các bạn nên sử dụng định dạng LogFormat=1, ví dụ:
SiteDomain: chỉ định domain chính của website (ở đây là www.example.com)
HostAliases: chỉ định các domain phụ, domain con dùng để truy cập tới trang web (ở đây là example.com, www.example.net, example.net)
Tiếp theo, chúng ta sẽ tạo tham số cron định kỳ để chạy AWStats 9 phút 1 lần:
crontab -e 
9,19,29,39,49,59 * * * * /usr/lib/cgi-bin/awstats.pl -config=www.example.com -update >/dev/null
Lưu ý: nếu bạn có file log không cố định, cũng như việc tạo ra file cronolog hoặc vlogger, chúng ta nên tận dụng phút thứ 59 trong công việc định kỳ bên trên, do đó AWStats có thể tiếp tục truy cập dữ liệu log tại thời điểm 23:59 trước khi file log mới được tạo ra từ lúc 0:00, và theo cách này, các bạn chỉ bị mất 1 phút từ 23:59 đến 0:00.
Cài đặt và cấu hình JAWStats
Truy cập trang web http://www.jawstats.com/download và tải phiên bản JAWStats mới nhất về máy tính, giải nén và tải toàn bộ lên website www.example.com qua giao thức FTP. Trong bài viết này, chúng tôi đã tải toàn bộ gói cài đặt JAWStats vào thư mục/var/www/www.example.com/web/jawstats. Sau đó, đổi tên file config.dist.php thành config.php và chỉnh sửa file đó như sau:
mv /var/www/www.example.com/web/jawstats/config.dist.php 
/var/www/www.example.com/web/jawstats/config.php
vi /var/www/www.example.com/web/jawstats/config.php
// core config parameters
$sDefaultLanguage = "en-gb";
$sConfigDefaultView = "thismonth.all";
$bConfigChangeSites = false;
$bConfigUpdateSites = false;
$sUpdateSiteFilename = "xml_update.php";
// individual site configuration
$aConfig["www.example.com"] = array(
"statspath" => "/var/lib/awstats/",
"updatepath" => "/usr/lib/cgi-bin/",
"siteurl" => "http://www.example.com",
"sitename" => "My Example.com Web Site",
"theme" => "default",
"fadespeed" => 250,
"password" => "secret",
"includes" => "",
"language" => "en-gb"
);
?>
Nếu muốn loại bỏ đường dẫn change site, chỉ cần thay đổi tham số$bConfigChangeSites thành giá trị false. Hoặc nếu không muốn người sử dụng tự cập nhật trạng thái website thì thay đổi $bConfigUpdateSites thành false.
Tiếp tục, với mảng biến $aConfig["site1"] – thay đổi tên theo cú pháp sau ($aConfig["www.example.com"]). Thiết lập giá trị statspath thành /var/lib/awstats/,updatepath thành /usr/lib/cgi-bin/siteurl thành http://www.example.com, và chỉ định tên website trong giá trị sitename. Giá trị password chỉ thực sự cần thiết nếu bạn thiết lập $bConfigUpdateSites thành true (tính năng này cho phép người dùng tự cập nhật trạng thái qua trình duyệt, họ sẽ phải khai báo mật khẩu).
Và, sau khi công việc thường xuyên của AWStats hoạt động lần đầu tiên (sẽ mất khá nhiều thời gian đối với trang web nhiều traffic), bạn có thể truy cập bằng đường dẫnhttp://www.example.com/jawstats:
Sau đây là 1 số ảnh chụp màn hình của những trang web sử dụng AWStats và JAWStats:




Tùy chọn mật khẩu bảo vệ thư mục JAWStats

Tiếp theo, chúng ta sẽ tiến hành thiết lập mật khẩu bảo vệ thư mục /var/www/www.example.com/web/jawstats để đảm bảo không ai có quyền truy cập ngoài người quản trị.
Để làm việc này, chúng ta phải tạo file .htaccess trong thư mục /var/www/www.example.com/web/jawstats:

    vi /var/www/www.example.com/web/jawstats/.htaccess
    AuthType Basic
    AuthName "Members Only"
    AuthUserFile /var/www/www.example.com/.htpasswd

    require valid-user

Sau đó, tiếp tục tạo file mật khẩu /var/www/www.example.com/.htpasswd. Nếu muốn truy cập với tên admin, chúng ta sẽ sử dụng lệnh sau:

    htpasswd -c /var/www/www.example.com/.htpasswd admin

Và điền mật khẩu cho tài khoản admin. Vậy là đã hoàn tất.

Trọng Tài ( Theo dinhchithanh.com )