banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành *nix Kiểm tra file, service và restart service khi cần thiết với Monit  XML
  [Question]   Kiểm tra file, service và restart service khi cần thiết với Monit 02/01/2009 13:59:35 (+0700) | #1 | 164889
mR.Bi
Member

[Minus]    0    [Plus]
Joined: 22/03/2006 13:17:49
Messages: 812
Offline
[Profile] [PM] [WWW]
Phải nói tôi rất thích thú khi viết bài này smilie. Vì công cụ này đa năng, dễ sử dụng và kiêm khá nhiều việc mà một Linux System Administrator cần làm, nhất là đối với những máy chủ chạy dịch vụ nặng nề, và ...down thường xuyên.

Các bạn có thể đọc trước tut này ở Cybercitiz:
Code:
http://www.cyberciti.biz/tips/howto-monitor-and-restart-linux-unix-service.html


Cũng trước khi đọc bài trên, tôi có đọc được một bài khá hay, về gom log của server, kiểm tra trạng thái file ở HVA, bạn nào muốn tham khảo có thể đọc ở đây:

Code:
/hvaonline/posts/list/14855.html


Nếu đang làm việc với một server chạy website với lượt truy cập tương đối lớn, vả lại phần code không được hoàn hảo lắm, việc truy xuất cơ sở dữ liệu kém nữa thì mysql làm việc quá sức cho phép, dịch vụ này liên tục chiếm dụng nhiều cpu và khi vượt quá giới hạn cho phép, server sẽ die theo. Tôi không chuyên về code, vả lại không care website, việc cần thiết là làm sao lúc ta không thường trực bên server, dịch vụ nào đó ra đi thì vẫn có cách làm cho nó sống lại một cách tự động. Dùng một bash shell để kiểm tra cũng được, bạn có thể đọc ở đây:
Code:
http://bash.cyberciti.biz/web-server/restart-apache2-httpd-shell-script/


Bài viết trên hướng dẫn bạn viết một shell script để monitor process httpd, nếu phát hiện process này không hoạt động thì lập tức restart dịch vụ. Giải pháp này cũng đáng sử dụng, tuy nhiên không linh động, và bền bỉ như monit. Vả lại với việc viết một shell script, sử dụng cron job...và việc sử dụng một ứng dụng "chuyên dụng", ta nên chọn cách sau hơn.

Monit là một ứng dụng viết ra cho các hệ điều hành *Nix và unix like, theo thông tin ở trang chủ : http://www.tildeslash.com/monit/ thì monit làm viêc tốt với hầu hết các hệ điều hành Linux. Bài này tôi hướng dẫn bạn cách cài đặt và sử dụng Monit trên Centos 5.2, tương tự với redhat, fedora... Ngoài ra cũng đá một chút sang Debian/Ubuntu (2 OSes này thì đơn giản hơn).

1.Cài đặt:

Monit phiên bản stable hiện tại là 4.10.1, bạn có thể vào trang chủ để tìm hiểu thêm, download và cài đặt:

Code:
$ cd /tmp


Code:
$ wget http://mmonit.com/monit/dist/monit-4.10.1.tar.gz


Code:
$ su 
Password: Gõ password của bạn vào


Code:
# tar xvf monit-4.10.1.tar.gz


Code:
# cd monit-4.10.1


Code:
# sh ./configure


Bước này có thể một vài bạn sẽ gặp lỗi tương tự:

Code:
sh ./configure
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... configure: error: cannot run C compiled programs.
If you meant to cross compile, use `--host'.
See `config.log' for more details.


Kiểm tra xem /tmp có bị mount với option noexec không? Lỗi trên chủ yếu do nguyên nhân này:
Code:
# mount
/dev/sda5 on / type ext3 (rw,usrquota)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda8 on /tmp type ext3 (rw,noexec,nosuid)
/dev/sda7 on /home type ext3 (rw,usrquota)
/dev/sda3 on /usr type ext3 (rw,usrquota)
/dev/sda2 on /var type ext3 (rw,usrquota)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/tmp on /var/tmp type none (rw,noexec,nosuid,bind)


Chú ý /tmp được mount ở /etc/fstab với option noexec, để khắc phục lỗi này, bạn sửa lại /etc/fstab và restart. Nhưng không nên, option trên để bảo mật cho hệ thống, ta chỉ cần move file down về tới một thư mục khác có quyền rw, exec là được.

Code:
# make & make install


Những bước compile trên là cơ bản khi sử dụng Linux, nếu muốn học về linux, bạn nên tập làm quen dần với các bước compile từ source.

Tiếp theo copy file cấu hình của Monit vào nơi nào đó cho dễ dàng quản lí:
Code:
# cp monitrc /etc/monitrc



Với Debian/Ubuntu, đã có sẵn gói deb, bạn cài đặt bằng lệnh apt-get install


Code:
$ sudo apt-get install monit

Thế là xong.

2.Cấu hình: rất đơn giản.

File cấu hình bạn chuyển vào thư mục /etc ở trên, mở nó ra

Code:
# nano /etc/monitrc


tìm dòng

Code:
#set daemon 120


Bỏ dấu "#" ở trước, dòng này có ý nghĩa: đặt Monit như một daemon, kiểm tra 2 phút một lần dịch vụ, file nào bạn chỉ định, giá trị này tính bằng giây, nếu muốn tăng hay giảm thì bạn có thể thay đổi 60, 180, 240...
Tiếp theo tìm dòng:
Code:
# set logfile syslog facility log_daemon

Bỏ dấu "#" trước nó, dòng này chỉ định syslog ghi lại hoạt động của daemon này, LOG-USer là facility theo mặc định.

Tìm set mailserver, bỏ "#" và thêm vào cho đúng với cấu hình mailserver của bạn
Code:
set mailserver mail.hvaonline.net
set alert <a href="mailto:mrbi@hvaonline.net">mrbi@hvaonline.net</a>

Tất cả những dòng còn lại bạn xoá trắng.

Tôi sẽ demo với mysql và kiểm tra việc thay đổi access_log. Kiểm tra mysql vì dịch vụ này thường xuyên làm hệ thống trì trệ do chiếm quá nhiều tài nguyên, kiểm tra access_log là về vấn đề bảo mât, tôi muốn kiểm tra để chắc chắn rằng không ai thay đổi file này.

Với mysql tôi set như sau
#Auto monitor mysql's pid file and restart when needed
Code:
check process mysql with pidfile "/var/lib/mysql/mysql.pid"
      start = "/etc/init.d/mysql start"
      stop = "/etc/init.d/mysql stop"
if cpu usage > 80% for 2 cycles then restart
if 2 restarts within 3 cycles then timeout


Dòng 1: Tôi chỉ định kiểm tra process của mysql và cho Monit biết process này là process nào, để kiểm tra mysql sử dụng process nào (hệ thống của bạn hoàn toàn có thể khác của tôi), bạn dùng câu lệnh
Code:
$ ps -ef | grep mysql


Dòng thứ 2,3: Chỉ định Monit sử dụng init script nào để start, stop mysql (của bạn có thể là mysqld).

Dòng 4: Nếu pid file trên sử dụng cpu vượt quá 80% trong liên tục 2 lần check (240s) thì monit tự động restart dịch vụ này
Dòng 5: Nếu dịch vụ này liên tục sử dụng cpu vượt quá 80% và Monit phải restart quá 3 lần, thì Monit không kiểm tra dịch vụ này nữa, restart liên tục trong thời gian quá ngắn, xem như không cần, bởi vì người dùng cũng không thể truy xuất được website nếu mysqld cứ stop/start


Để kiểm tra access_log, tôi sử dụng:

Code:
check file access_log with path /var/log/access_log
if changed checksum then alert
alert <a href="mailto:mr.bi@hvaonline.net">mr.bi@hvaonline.net</a>
if size > 100 Mb 
then exec "/usr/sbin/logrotate -f rotate_apache_now"


Dòng 1: chỉ đinh file cần monitor và path tới file.
Dòng 2: Kiểm tra checksum của file, nếu thay đổi cảnh báo
Dòng 3: Gửi cảnh báo đến mail của tôi (Bên trên bạn phải set mailserver...)
Dòng 4: Kiểm tra dung lượng file đến khi nào > 100 Mb thì thực hiện dòng 5
Dòng 5: dùng logroutate để empty file này, có thể tìm hiểu logrotate


Xong phần cấu hình, để chạy monit với file cấu hình vừa tạo bạn sử dụng:
Code:
# monit -c /etc/monitrc


Để kiểm tra xem ta có sai sót gì trong lúc cấu hình không:
Code:
# monit -t
Control file syntax OK


Nếu monit báo lỗi ở dòng nào, bạn mở file cấu hình ra và sửa chữa dòng đó
Để xem monit đã hoạt động chưa, kiểm tra log
Code:
# tail -f /var/log/messages
Jan  1 09:26:59 ns1 monit[11597]: Starting monit daemon 
Jan  1 09:26:59 ns1 monit[11599]: Monit started 
Jan  1 09:27:07 ns1 monit: Control file syntax OK



Với công cụ nhỏ gọn và linh động này, hi vọng giúp được bạn nhiều, đỡ được phần nào gánh nặng cho các sysadmin. Các bạn có thể đưa ra các phần cấu hình của mình để làm phong phú thêm cho bài viết này.

Thân.
All of my life I have lived by a code and the code is simple: "honour your parent, love your woman and defend your children"
[Up] [Print Copy]
  [Question]   Re: Kiểm tra file, service và restart service khi cần thiết với Monit 02/01/2009 14:27:17 (+0700) | #2 | 164892
[Avatar]
huuloc.n
Member

[Minus]    0    [Plus]
Joined: 12/12/2008 02:25:19
Messages: 28
Location: EnHack.Net
Offline
[Profile] [PM] [WWW]
Vậy nếu monit bị die thì ai sẽ restart nó đây anh smilie (đùa chú thôi).
[Up] [Print Copy]
  [Question]   Re: Kiểm tra file, service và restart service khi cần thiết với Monit 02/01/2009 14:43:48 (+0700) | #3 | 164897
LeVuHoang
HVA Friend

Joined: 08/03/2003 16:54:07
Messages: 1155
Offline
[Profile] [PM]
Monit khá tốt nhưng không có Windows agent. Có thể tham khảo thêm 1 giải pháp open source khác là Nagios. Bạn nào rãnh làm 1 cái tut đi kìa smilie
[Up] [Print Copy]
  [Question]   Re: Kiểm tra file, service và restart service khi cần thiết với Monit 11/01/2009 13:37:48 (+0700) | #4 | 166055
mR.Bi
Member

[Minus]    0    [Plus]
Joined: 22/03/2006 13:17:49
Messages: 812
Offline
[Profile] [PM] [WWW]
Tiếp tục bài trước, giới thiệu thêm một vài tính năng có liệt kê trong Monit Manual.

Chúng ta có thể cấu hình Monit để quản lí các dịch vụ thông qua giao diện web, ở giao diện này ta hoàn toàn có thể xem tình trạng, start, stop dịch vụ nào đó đã được cấu hình để monit theo dõi từ trước. Để làm được như thế, ta thêm vào file cấu hình monitrc như bên dưới:

Code:
set httpd port 2812 address hvaonline.net
allow 192.168.1.5
allow 10.15.0.87
allow x.x.x.x
allow hva:online

Dòng thứ 1 chỉ định monit sử dụng process httpd (theo manual thì httpd này là mini-httpd server của riêng monit, không liên quan gì đến httpd của Apache), lắng nghe ở port 2812 với địa chỉ là hvaonline.net. Khi muốn theo dõi tình trạng các dịch vụ qua giao diện web ta dùng địa chỉ http://hvaonline.net:2812. Ta cũng có thể thay port này bằng một random port nào đó, không nhất thiết phải là 2812.
Dòng thứ 2,3,4 chỉ định nguời quản trị có thể kết nối đến httpd server này từ địa chỉ nào, chức năng này phần nào giống với host.allow và host.deny trên *Nix.
Dòng cuối cùng cài đặt username và password để đăng nhập vào giao diện điều khiển. User: hva | Pass: online

Ngoài ra monit cũng có thể kiểm tra directory cụ thể nào đó

Code:
check directory web with path /home/hvaonline/public_html
if changed timestamp then alert
alert <a href="mailto:mr.bi@hvaonline.net">mr.bi@hvaonline.net</a>


Tính năng này dùng để kiểm tra một directory nhạy cảm nào đó, hiếm có sự thay đổi. Ở đây ta chọn DocumentRoot, directory này ít khi nào thay đổi khi website đã đi vào họat động ổn định.

Kiểm tra remote host nào đó:

Code:
check host HVA with address ww.hvaonline.net
 if failed port 80 protocol http 
 then alert with the mail-format {subject: Httpd is down !}
 if failed port 443 type TCPSSL and protocol http
 with timeout 15 seconds then alert
 alert <a href="mailto:mr.bi@hvaonline.net">mr.bi@hvaonline.net</a>

Để kiểm tra xem server còn họat động hay không ta có thể dùng icmp test, tất nhiên remote server phải đuợc cấu hình để chấp nhận các gói tin icmp, và monit phải chạy với quyền root để có thể thực hiện đuợc chức năng này. Lí do: với icmp test, monit sẽ tạo ra các raw socket và gửi các icmp packet này đến remote host, và chỉ có user root mới có chủ quyền tạo các raw socket này. Chức năng icmp phải đuợc dùng với option check host.

Code:
check host Server with address hvaonline.net
if failed icmp type echo with timeout 10 seconds then alert
alert <a href="mailto:mr.bi@hvaonline.net">mr.bi@hvaonline.net</a>


Giá trị timeout theo mặc định là 5s, nếu không được ấn định cụ thể như trên. Bạn hoàn toàn có thể thay đổi giá trị phù hợp với server của mình.

Cú pháp của monit được khái quát như sau:

Code:
IF <TEST>                         THEN                         <ACTION>

changed timestamp--------------------------------Alert
fail port PORT protocol TYPE----------------------stop                  
timestamp > TIME-------------------------------- start  
----------------------------------------------------- restart
------------------------------------------------------exec
------------------------------------------------------unimonitor

Ngoài ra Monit còn có các chức năng kiểm tra giduid, và một số lệnh khác như sendexpect. Bạn đọc thêm ở Monit homepage hoặc monit manual.

Nguồn: Monit manual.
All of my life I have lived by a code and the code is simple: "honour your parent, love your woman and defend your children"
[Up] [Print Copy]
  [Question]   Re: Kiểm tra file, service và restart service khi cần thiết với Monit 11/01/2009 19:22:07 (+0700) | #5 | 166068
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]
Nice works! smilie.
What bringing us together is stronger than what pulling us apart.
[Up] [Print Copy]
  [Question]   Re: Kiểm tra file, service và restart service khi cần thiết với Monit 12/01/2009 03:56:28 (+0700) | #6 | 166104
[Avatar]
Phó Hồng Tuyết
Member

[Minus]    0    [Plus]
Joined: 20/04/2007 20:02:10
Messages: 275
Location: Nơi Sâu Thẳm Tâm Hồn
Offline
[Profile] [PM] [WWW] [Yahoo!]
Bài viết hay. Nếu rảnh em làm cái tut cho psacct luôn nhé. Cái này hầu như một sysadmin nào cũng cần đó em.
P/s : Quen em hơn một năm. Hôm nay mới có dịp khen. Tối em bao cafe nhé.
"Một người thành công không có ý nghĩ đổ thừa thất bại do ...."
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|