টপিকঃ নিজের ভিপিএস - ৪ (সার্ভিস মনিটর, চালু/বন্ধ করা)
সার্ভার সেট আপের পর বড় কাজ হলো নিয়মিত তা নজরদারী করা সব কিছু ঠিকমতো চলছে কিনা। সাধারণত ওয়েব সার্ভার, মাইএসকিউএল সার্ভার, এফটিপি সার্ভার, ডিএনএস সার্ভার ও মেইল সাভার নিয়মিত পর্যবেক্ষণের প্রয়োজন পড়ে। আমারা যেভাবে পিএইচপি সেটআপ করেছি তাতে এফপিএমকেও নজরে রাখা দরকার। এসব সার্ভিসের কোনটা কোন কারণে বন্ধ হয়ে গেলে সার্ভার ঠিক মতো কাজ করবে না। ডিএনএস সার্ভার বন্ধ হয়ে গেলে সার্ভারে হোস্ট করা সব ডোমেইন ক্ষতিগ্রস্ত হবে।
মানুষের পক্ষের ২৪ঘণ্টা পর্যবেক্ষণের কাজটি করা কঠিন। এ কারণে স্বংয়ক্রিয় ব্যবস্থা রাখা যায় যেটা প্রতিটি সার্ভিস নজরদারি করবে, কোন সমস্যা দেখা দেয়ার পরিস্থিতি হলে তা ইমেইলে এডমিনকে জানাবে, প্রয়োজনবোধে বন্ধ হয়ে যাওয়া কোন সার্ভিসকে পুণরায় চালু করবে। এ ধরনের মনিটরিং করার জন্য একাধিক প্রোগ্রাম আছে। আমরা যেটা ব্যবহার করব সেটার নাম হচ্ছে মনিট (monit)। এখানে একটা বিষয় লক্ষ্যণীয় যে, এ ধরনের প্রোগ্রাম সার্ভারের স্ক্রিনে রিপোর্ট দেখালে তা ভিপিএস এডমিনের কোন কাজে আসবে না। কারণ ভিপিএসের এডমিন সাধারণত জানেই না সার্ভার কোথায় আছে। সার্ভারের রিপোর্ট দেখার একমাত্র মাধ্যম হলো ওয়েব। এখানে আবার একটা প্যাঁচ আছে। ওয়েব সার্ভার নিজেই যদি কোন কারণে ডাউন হয়ে যায় তাহলে রিপোর্ট দেখার কী হবে? এ সমস্যা দূর করার জন্য মনিটর প্রোগ্রাম সাধারণত সার্ভারের ওয়েব সার্ভার প্রোগ্রামের উপর নির্ভর না করে নিজেই একটা ছোট আকারের সার্ভার প্রোগ্রাম চালায়। এতে অন্য কোন সার্ভিসে সমস্যা হলেও মনিটরিং বন্ধ হবে না। আবার যেহেতু, মনিটিরিং প্রোগ্রামের মাধ্যমে সার্ভারের বিভিন্ন সার্ভিসকে নিয়ণ্ত্রণ করা যাবে, তাই এখানে নিরাপত্তার প্রশ্ন জড়িত। নিরাপত্তার জন্য monit একটি https সার্ভার তৈরি করে।
এবার mnoit কীভাবে ইন্সটল ও সেটআপ করা যাবে সেটা বলা যাক।
১. মনিট ইন্সটল করার জন্য
#apt-get install monit
২. হ্যা এতেই শেষ! এবার কনফিগারেশন করতে হবে। মনিটের কনফিগ ফাইলটা হল /etc/monitrc, এটাকে এডিট করা যাক।
#pico /etc/monitrc
৩. ফাইলের শুরুতে এরকম থাকার কথা:
set daemon 60 # কত ক্ষণ পরপর মনিট চেক করবে
set logfile syslog facility log_daemon #লগ ফাইল কোথায় রাখবে
set mailserver localhost #কোন কারণে এডমিনকে ইমেইল করতে হলে কোন ইমেইল সার্ভার ব্যহবর করবে
set mail-format { from: monit@server1.example.com } # মেইলের ফরম্যাট কী হবে
set alert root@localhost # এলার্ট কোথায় পাঠাবে
set httpd port 2812 and # সার্ভার কী ধরনের, পোর্ট কত
SSL ENABLE # আমরা সিকিউরড অর্থাৎ https সার্ভার সেট করব মনিটের রিপোর্ট দেখার জন্য
PEMFILE /var/certs/monit.pem # https এর জন্য সার্টিফিকেটের কিছু বিষয় আছে, এ ফাইলে তা থাকবে, পরে আলোচনা হবে
allow admin:test # কী ইউজার নাম ও পাসওয়ার্ড দিয়ে লগইন করা হবে
এখানে মনে হতে পারে, এটা খুব বেসিক একটা সার্ভার। আসলেই তাই। আমরা সার্ভারের রিসোর্স খুব বেশী খরচ না করে মনিটর করতে চাই এবং কোন সমস্যা হলে দ্রুত তার ব্যবস্থা নিতে চাই।
৪. কনফিগ ফাইলের বাকী অংশে কোন কোন সার্ভার/সার্ভিস চেক করতে হবে তার বর্ণণা আছে। আমরা যেহেতু সব সার্ভিস ব্যবহার করছি না, তাই এ অংশটুকু ভিন্ন হবে। যেমন, বাই ডিফল্ট ওখানে এপাশি চেক করার কোড আছে, কিন্তু আমরা এপাশির বদলে এঞ্জিনেক্স চালাচ্ছি। এক এক ধরনের সার্ভিসের জন্য ভিন্ন কনফিগারেরশন হবে। আমাদের বিস্তারিত না জানলেও হবে। সুবিধার জন্য আমি নীচে পুরো ফাইলের লেখা তুলে দিচ্ছি। নিজের সার্ভারে বসাতে হলে অল্প কিছু পরিবর্তন করতে হবে।
#http://www.howtoforge.com/server_monitoring_monit_munin_p2
set daemon 120 # check every 2 minutes
set logfile syslog facility log_daemon
set mailserver localhost # primary mailserver
set mail-format { from: monit@apona-bd.com }
set alert root@localhost
set httpd port 2812 and
SSL ENABLE
PEMFILE /var/certs/monit.pem
allow admin:test
#chek FTP server- dont have yet - alamgir
#check process proftpd with pidfile /var/run/proftpd.pid
# start program = "/etc/init.d/proftpd start"
# stop program = "/etc/init.d/proftpd stop"
# if failed port 21 protocol ftp then restart
# if 5 restarts within 5 cycles then timeout
check process sshd with pidfile /var/run/sshd.pid
start program "/etc/init.d/ssh start"
stop program "/etc/init.d/ssh stop"
if failed port 22 protocol ssh then restart
if 5 restarts within 5 cycles then timeout
check process mysql with pidfile /var/run/mysqld/mysqld.pid
group database
start program = "/etc/init.d/mysql start"
stop program = "/etc/init.d/mysql stop"
if failed host 127.0.0.1 port 3306 then restart
if 5 restarts within 5 cycles then timeout
check process nginx with pidfile /usr/local/nginx/logs/nginx.pid
group www
start program = "/usr/local/nginx/sbin/./nginx"
stop program = "/usr/bin/killall -9 nginx"
if failed host alamgir.xen.prgmr.com port 80 protocol http
and request "/monit/token" then restart
if cpu is greater than 60% for 2 cycles then alert
if cpu > 80% for 5 cycles then restart
if totalmem > 500 MB for 5 cycles then restart
if children > 250 then restart
if loadavg(5min) greater than 10 for 8 cycles then stop
if 3 restarts within 5 cycles then timeout
#php-fpm checker
check process php-fpm with pidfile /usr/local/logs/php-fpm.pid
group www
start program "/usr/local/sbin/php-fpm start"
stop program "/usr/local/sbin/php-fpm stop"
if failed host 127.0.0.1 port 9000 then restart
if 5 restarts within 5 cycles then timeout
৫. মনিট ওয়েব সার্ভারের গতিবিধি দেখার জন্য নির্ধারিত বিরতিতে সার্ভারের কাছে একটা ফাইলের রিকোয়েস্ট পাঠায়। এট যেকোন ফাইল হতে পারে। সুবিধার জন্য আমরা: /www এর মধ্যে একটা ছোট ফাইল তৈরী করে দিব যেটা মনিট রিকোয়েস্ট করবে।
#mkdir /www/monit
#touch /www/monit/token
#pico /www/monit/token
এবার হাবিজাবি দুচার শব্দ লিখে সেভ করে বের হয়ে আসতে হবে।
৬. সার্ভার মনিটর করার জন্য মনিট প্রায় রেডি। এখন নিরাপদে মনিটের স্ট্যাটাসে রিপোর্টে লগইন করার জন্য একটা সার্টিফিকেট বানাতে হবে। এটা কী জিনিষ খায় না মাথায় দেয়, না জানলেও চলবে। সার্টিফিকেট তৈরির জন্য কমান্ড:
#pico /var/certs/monit.cnf
এবার এডটরে নীচের তথ্যগুলো দিন (ডামি তথ্য দিলেও ক্ষতি নেই, যেহেতু কেবল নিজের জন্য)
# create RSA certs - Server
RANDFILE = ./openssl.rnd
[ req ]
default_bits = 1024
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type
[ req_dn ]
countryName = Country Name (2 letter code)
countryName_default = MO
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = Monitoria
localityName = Locality Name (eg, city)
localityName_default = Monittown
organizationName = Organization Name (eg, company)
organizationName_default = Monit Inc.
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = Dept. of Monitoring Technologies
commonName = Common Name (FQDN of your server)
commonName_default = server.monit.mo
emailAddress = Email Address
emailAddress_default = root@monit.mo
[ cert_type ]
nsCertType = server
সেভ করে বের হতে হবে।
#openssl req -new -x509 -days 365 -nodes -config ./monit.cnf -out /var/certs/monit.pem -keyout /var/certs/monit.pem
#openssl gendh 512 >> /var/certs/monit.pem
#openssl x509 -subject -dates -fingerprint -noout -in /var/certs/monit.pem
#chmod 700 /var/certs/monit.pem
৭. ব্যাস, মনিট রেডি। এবার, /etc/default/monit ফাইলটা খুলে শেষ একটা পরিবর্তন 0 কে 1 করে দিয়ে সেভ করে বের হয়ে আসতে হবে।
#pico /etc/default/monit
ফাইলের মধ্যে startup = 1 করে দিন।
# You must set this variable to for monit to start
startup=1
৮. এবার মনিটকে রান করাতে হবে।
#/usr/sbin/monit
৯. সব ঠিক থাকলে, ব্রাউজার দিয়ে https://alamgir.xen.prgmr.com:2812/ এ গেলে সার্টিফেট একসেপ্ট করতে বলবে। দুইটা ওকে ক্লিক করলে লগইন প্রম্ট আসবে, সেটকৃত admin/tset দিয়ে লগইন করলে মনিটের কার্যকলাপ দেখা যাবে। বলে রাখা ভাল যে admin/tset অবশ্যই নিজের মতো করে গোপন কিছু দিতে হবে। নীচে মনিটের স্ক্রিন দেখানো হল।
মূল টিউটোরিয়াল: http://www.howtoforge.com/server_monito … t_munin_p2