Friday, November 7, 2014

Cài đặt hệ thống tự động gửi SMS cảnh báo khi website bị down

Có nhiều dịch vụ giúp giám sát tình trạng hoạt động của website nhưng hầu hết những dịch vụ này đều có thu phí. Dựa trên thuật toán thông minh của Google Docs và khả năng nhắn tin SMS của Google Calendar. Bạn có thể thiết lập việc gửi tin nhắn SMS cảnh báo một cách miễn phí phòng khi trang web của bạn bị sập.

Cách làm này là cứ mỗi 5 phút, hệ thống sẽ cố gắng để kết nối với một hoặc nhiều trang web bạn chỉ định. Nếu không thể kết nối, bạn sẽ nhận được một thông báo bằng email và tin nhắn văn bản đến điện thoại để bạn có thể giải quyết vấn đề ngay lập tức. Đây là cách giám sát miễn phí và đơn giản nhất dựa trên dịch vụ của Google.
● Liên kết Số điện thoại của bạn với Google Calendar

Trước tiên, bạn đăng nhập tài khoản Google rồi sau đó mở Google Calendar. Trong trang dịch vụ hiện ra, bạn bấm chọn nút hình bánh răng (thường nằm ở góc trên, bên phải) và chọn Settings (Cài đặt). Trong trang cài đặt xuất hiện, bạn chọn mục Mobile Setup (Cài đặt điện thoại di động).



Cài đặt hệ thống tự động gửi SMS cảnh báo khi website bị sập

Trong trang này, bạn lần lượt chọn quốc gia (Việt Nam), nhập số điện thoại di động của bạn (để hệ thống sẽ gửi SMS đến số điện thoại đó khi website bị sập). Tiếp theo, bạn bấm nút Send Verification Code (Gửi mã xác minh), nhận được mã xác minh qua điện thoại di động và nhập vào mục Verification Code (Mã xác minh) rồi bấm nút Finish setup (Hoàn thành cài đặt). Lưu ý: việc gửi mã xác minh có thể phụ thuộc vào nhà mạng điện thoại bạn sử dụng (Viettel, Vinaphone…); nếu số điện thoại bạn nhập không được chấp nhận, bạn hãy thử nhập số điện thoại của một nhà mạng khác mà bạn có.

Sau khi cung cấp thành công thông tin số điện thoại, bạn đã có thể sử dụng tính năng nhắc nhở trong Google Calendar để nhận được SMS nhắc nhở cho các sự kiện theo lịch.
● Cài đặt giám sát website

Đầu tiên, bạn truy cập vào đây và chọn chấp nhận để tạo ra một bản sao của tài liệu bảng tính Website Monitor vào tài khoản Google Docs của bạn. (Mã nguồn của trang này có thể xem tại đây).

Tiếp theo, bạn nhấn menu Monitor Website trên thanh công cụ Google Docs (bên phải các menu khác) và chọn Initialize. Bạn có thể sẽ nhận được một thông báo nhắc nhở về việc tài liệu sẽ truy cập vào các dữ liệu khác của bạn, nhấn OK và chấp nhận để tiếp tục.



Cài đặt hệ thống tự động gửi SMS cảnh báo khi website bị sập

Khi bạn chấp nhận xong, một đoạn script sẽ được khởi tạo. Bạn quay lại bảng tính lúc nãy, nhập vào địa chỉ trang web bạn muốn giám sát vào hộp Website URL và nhập địa chỉ email của bạn vào ô được chỉ thị Email Address. Bạn có thể nhập nhiều địa chỉ website bằng cách đặt một dấu phẩy và dấu cách ở giữa các địa chỉ.



Cài đặt hệ thống tự động gửi SMS cảnh báo khi website bị sập

Khi bạn đã thiết lập xong, bạn bấm vào menu Monitor Website lúc nãy và chọn Start Monitoring.



Cài đặt hệ thống tự động gửi SMS cảnh báo khi website bị sập

Sau đó, Google Apps sẽ chạy script giám sát website bạn chỉ định một cách liên tục, ngay cả khi bạn không còn mở bảng tính đó nữa. Script sẽ giúp kiểm tra trang web của bạn mỗi 5 phút. Nếu website chỉ định bị sập, hệ thống sẽ một gửi email và một tin nhắn văn bản cho bạn (bằng cách tạo ra một sự kiện vào lịch với cùng với lời nhắc nhở trên Google Calendar).

vmstat

Vmstat là một tool tập hợp và report data về tài nguyên sử dụng memory, swap, và processor trong thời gian thực. Vmstat có thể được sử dụng để xác định các về đề về hiệu năng liên quan đến memory sử dụng.

1. Cú pháp lệnh
Sử dụng: vmstat -h

[root@mail ~]# vmstat -h
usage: vmstat [-V] [-n] [delay [count]]
-V prints version.
-n causes the headers not to be reprinted regularly.
-a print inactive/active page stats.
-d prints disk statistics
-D prints disk table
-p prints disk partition statistics
-s prints vm table
-m prints slabinfo
-t add timestamp to output
-S unit size
delay is the delay between updates in seconds.
unit size k:1000 K:1024 m:1000000 M:1048576 (default is K)
count is the number of updates.

Ví dụ:

[root@mail ~]# vmstat 1 100
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 139040 110084 165852 307224 0 0 1 6 4 5 0 0 100 0 0
0 0 139040 110084 165852 307224 0 0 0 20 63 82 0 0 100 0 0
0 0 139040 110084 165852 307224 0 0 0 0 40 75 0 0 100 0 0
0 0 139040 110084 165852 307224 0 0 0 0 38 72 0 0 100 0 0
0 0 139040 110084 165852 307224 0 0 0 0 39 77 0 0 100 0 0
0 0 139040 110084 165852 307224 0 0 0 0 37 72 0 0 100 0 0
0 0 139040 110084 165852 307224 0 0 0 0 42 79 0 0 100 0 0
0 0 139040 110084 165852 307224 0 0 0 0 41 81 0 0 100 0
Theo ví dụ trên, chúng ta lấy report 1s/ lần, và số lần lấy report là 100 lần. (Mỗi dòng là 1 lần)

Mặc định, vmstat hiển thị thống kê memory theo kilobytes, để hiển thị theo megabyte ta thêm ‘-S m’


2. Phân tích output

Vmstat mô tả trạng thái hiện tại của một hệ thống Linux. Thông tin về trạng thái hoạt động của một hệ thống rất hữu ích khi xử lý các vấn đề liên quan đến hiệu năng.

Output của lệnh vmstat được hiển thị trong một số trường: Dòng đầu tiên của output là trung bình các thông số khi hệ thống được restart. Chúng ta có thể bỏ qua dòng này vì nó ko hiển thị trạng thái hiên tại của hê thống.

a. Procs

Dữ liệu procs báo cáo số processing jobs chờ để run và cho phép bạn xác định xem có các process làm cho hệ thống của bạn bị chậm lại hay ko?

+Cột r hiển thị tổng số processing jobs chờ để truy cập vào processor. Nếu quan sát nhiều lần và thấy giá trị này vào khoảng = 2 lần CPU => có hiện tượng thắt cổ chai

+Cột b hiển thị tổng số processes trong trạng thái ‘sleep’

Nếu các giá trị của các cột r và b thường xuyên cao (=2*CPU), điều đó có nghĩa hệ thống không có đủ cpu hoặc memory hoặc i/o bandwidth.

b. Memory

Thông tin được hiển thị trong phần memory cung cấp dữ liệu về memory sử dụng như lệnh: free –m

+Cột swapd hay swapped báo cáo có bao nhiêu memory được trao đổi sang swap file hoặc swap partition.

+Cột free báo cáo số memory không được cấp phát.

Nếu bạn thấy giá trị trong cột free thường xuyên = 0, thât tồi tệ, bạn đã hết RAM rồi đó.

+Cột buff or buffers báo cáo số lượng memory được cấp phép sử dụng. Buff là phần memory được sử dụng giống như ” Virtual Disk”, nếu kernel đọc dữ liệu từ ổ cứng, nó sẽ thử giữ lại trong memory để đọc lại khi cần.

+Cột cache báo cáo số lượng memory được cấp phép mà có thể được swap tới disk hoặc không được cấp phép nếu tài nguyên được cần cho một task khác.

Nếu giá trị swapd là quá cao và tiếp tục thay đổi, có nghĩa là hệ thống đang chạy với bộ nhớ kém.

c. Swap

Swap báo cáo tỷ lệ mà memory đã gửi hoặc đã lấy từ hệ thống swap. vmstat cho phép bạn xác định có bao nhiêu disk hoạt động ddwwocj liên quan tới hệ thống swap.

+Cột si báo cáo số memory mà được chuyển từ swap tới memory thực trên giây.

+Cột so báo cáo số memory được chuyển tới swap từ memory thực trên giây.

Nếu bạn thấy các giá trị trong cột si và so thay đổi liên tục, nghĩa là hệ thống của bạn liên tục phân trang bộ nhớ vào ổ cứng => điều đó có nghĩa là bạn ko có đủ RAM hoặc bạn cần ít chương trình chạy vào thời điểm đó hơn.

Bạn có thể tìm chính xác chương trình nào đang ăn RAM nhiều bằng lệnh: ps -eo pmem,pcpu,args | sort -k 1 -r | less

d. I/O

Io báo cáo số lượng input và output hoạt động trên giây trong các hệ số của các block được đọc và được ghi

+Cột bi báo cáo số block được nhận (block in) từ một đĩa / giây

+Cột bo báo cáo số block được gửi (block out) tới một đĩa / giây

Nếu chúng ta nhìn thấy một vài số lớn trong cột b của proc và i/o cao, vấn đề nằm ở i/o

e. System

System báo cáo số lượng các toán tử hệ thống / giây

+Cột in báo cáo số hệ thống ngắt trên / giây, bao gồm các ngắt từ hệ thống đồng hộ.

+Cột cs báo cáo số lượng các thiết bị chuyển mạch ngữ cảnh mà hệ thống làm theo thứ tự để xử lý tất cả nhiệm vụ.

f. CPU

CPU section báo cáo sử dụng tài nguyên CPU của hệ thống. Hiển thị theo phần trăm.

+Cột us báo cáo số lượng thời gian mà processor cần trên các nhiệm vụ không thuộc kernel.

+Cột sy báo cáo lương thời gian mà processor tiêu tốn trên các nhiệm vụ liên quan đến kernel.

+Cột id báo cáo lương time mà processor dành trên idle. (Thời gian máy tính ko làm gì)

+Cột wa báo cáo lương time mà processor dành cho các hoạt động IO để hoàn thành trước khi tiếp tục xử lý các nhiệm vụ khác.

Nếu trong khi chạy vmstat, bạn thấy giá trị idle gần bằng 0, bạn có thể có vấn đề (CPU không rỗi), thông thường nó có nghĩa là chương trình ăn quá nhiều RAM và CPU phải phân trang từ memory tới swap và phân trang ngược lại

Friday, September 5, 2014

PHP 5.5 on CentOS/RHEL 6.5 and 5.10 via Yum

PHP 5.5 on CentOS/RHEL 6.5 and 5.10 via Yum

PHP 5.5.14 has been released on PHP.net on 26th June 2014, and is also available for CentOS/RHEL 5.10 and 6.5 at Webtatic via Yum.
PHP 5.5 adds new features such as:
  • Zend Optimizer+ opcode cache included, now known as opcache extension
  • Generators
  • try { } finally { }
  • Literal dereferencing for arrays and strings
  • Array return value de-referencing
  • Class name resolution
  • Password hashing API
  • and much more
To see what else has been added, check out the What has changed in PHP 5.5.x.
To install, first you must add the Webtatic EL yum repository information corresponding to your CentOS/RHEL version to yum:
CentOS/RHEL 6.x:
rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm
CentOS/RHEL 5.x:
rpm -Uvh http://mirror.webtatic.com/yum/el5/latest.rpm
Now you can install PHP 5.5 (along with an opcode cache) by doing:
yum install php55w php55w-opcache
If you would like to upgrade php to this version it is recommended that you first check that your system will support the upgrade, e.g. making sure any CPanel-like software can run after the upgrade.
Unless you know what you are doing, it is risky upgrading an existing system. It’s much safer to do this by provisioning a separate server to perform the upgrade as a fresh install instead.
If you know what you are doing, you can upgrade PHP by:
yum install yum-plugin-replace
 
yum replace php-common --replace-with=php55w-common
It will likely give you a message “WARNING: Unable to resolve all providers …”. This is normal, and you can continue by tying “y“. You will be given a chance to see what packages will be installed and removed before again being given a chance to confirm.

Packages

PackageProvides
php55wmod_php, php55w-zts
php55w-bcmath
php55w-cliphp-cgi, php-pcntl, php-readline
php55w-commonphp-api, php-bz2, php-calendar, php-ctype, php-curl, php-date, php-exif, php-fileinfo, php-ftp, php-gettext, php-gmp, php-hash, php-iconv, php-json, php-libxml, php-openssl, php-pcre, php-pecl-Fileinfo, php-pecl-phar, php-pecl-zip, php-reflection, php-session, php-shmop, php-simplexml, php-sockets, php-spl, php-tokenizer, php-zend-abi, php-zip, php-zlib
php55w-dba
php55w-devel
php55w-embeddedphp-embedded-devel
php55w-enchant
php55w-fpm
php55w-gd
php55w-imap
php55w-interbasephp_database, php-firebird
php55w-intl
php55w-ldap
php55w-mbstring
php55w-mcrypt
php55w-mssql
php55w-mysqlphp-mysqli, php_database
php55w-mysqlndphp-mysqli, php_database
php55w-odbcphp-pdo_odbc, php_database
php55w-opcachephp55w-pecl-zendopcache
php55w-pdo
php55w-pecl-gearman
php55w-pecl-geoip
php55w-pecl-memcache
php55w-pecl-xdebug
php55w-pgsqlphp-pdo_pgsql, php_database
php55w-processphp-posix, php-sysvmsg, php-sysvsem, php-sysvshm
php55w-pspell
php55w-recode
php55w-snmp
php55w-soap
php55w-tidy
php55w-xmlphp-dom, php-domxml, php-wddx, php-xsl
php55w-xmlrpc

Opcode Caches

The PHP distribution now comes with an opcode cache. This is the Zend Optimizer+ opcode cache, now known as the Zend OPcache extension. This extension is optional, so does not preclude you from using an alternate one. APC has been less maintained in recent years, so not as suitable (however it did also have a very convenient in-process user-cache which will be missed).
Due to it being included in the PHP source distribution, it will be well maintained and more suitable for use while other Opcode cache’s are being updated over the coming months.
yum install php55w-opcache
Webtatic will investigate the stability of APC for PHP 5.5, but cannot guarantee it stable enough to be included in the Yum repository.

error_reporting E_ALL now includes E_STRICT

As mentioned in the PHP 5.4 guide:
You may get a lot more errors coming out of your error logs if by default your error_reporting is set to E_ALL now without explicitly turning off E_STRICT. The default php.ini that comes with the PHP package turns this off by default, but if you are upgrading from an existing installation, your php.ini may not be updated, meaning this will likely be turned on.
Link : https://webtatic.com/packages/php55/

Tuesday, August 5, 2014

Config time vps

yum -y install rdate
mv /etc/localtime /etc/localtime.old
ln -sf /usr/share/zoneinfo/Asia/Ho_Chi_Minh /etc/localtime
rdate -s rdate.cpanel.net
Open port 37 in csf


Tuesday, July 22, 2014

Hướng dẫn biên dịch và cấu hình NginX

Cài trình biên dịch và các gói phần mềm cần thiết để phục vụ quá trình biên dịch
sudo apt-get install build-essential libssl-dev libpcre3 libpcre3-dev \
libxml2-dev libxslt1-dev libgd2-xpm-dev libgeoip-dev
 Tải về mã nguồn của NginX (bản ổn định mới nhất tại thời điểm viết bài này có phiên bản 1.4.2)
sudo su
cd /usr/src
wget http://nginx.org/download/nginx-1.4.2.tar.gz
 Giải nén và chuyển đến thư mục vừa giải nén
tar xvfz nginx-1.4.2.tar.gz
cd nginx-1.4.2.tar.gz
 Cấu hình các thông số biên dịch để chuẩn bị cho việc biên dịch bằng lệnh configure như sau: (lưu ý, để biết các option của lệnh này, bạn có thể thực thi command ./configure --help)
./configure \
--prefix=/usr/local/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-client-body-temp-path=/var/lib/nginx/body \
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
--http-log-path=/var/log/nginx/access.log \
--http-proxy-temp-path=/var/lib/nginx/proxy \
--http-scgi-temp-path=/var/lib/nginx/scgi \
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi \
--lock-path=/var/lock/nginx.lock \
--pid-path=/var/run/nginx.pid \
--with-pcre-jit \
--with-debug \
--with-http_addition_module \
--with-http_dav_module \
--with-http_geoip_module \
--with-http_gzip_static_module \
--with-http_image_filter_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_sub_module \
--with-http_xslt_module \
--with-ipv6 \
--with-mail \
--with-mail_ssl_module \
--with-http_spdy_module
 Kết quả output ra terminal có thể trông như sau:
Configuration summary   + using system PCRE library   + using system OpenSSL library   + md5: using OpenSSL library   + sha1: using OpenSSL library   + using system zlib library
  nginx path prefix: "/usr/local/nginx"   nginx binary file: "/usr/local/nginx/sbin/nginx"   nginx configuration prefix: "/etc/nginx"   nginx configuration file: "/etc/nginx/nginx.conf"   nginx pid file: "/var/run/nginx.pid"   nginx error log file: "/var/log/nginx/error.log"   nginx http access log file: "/var/log/nginx/access.log"   nginx http client request body temporary files: "/var/lib/nginx/body"   nginx http proxy temporary files: "/var/lib/nginx/proxy"   nginx http fastcgi temporary files: "/var/lib/nginx/fastcgi"   nginx http uwsgi temporary files: "/var/lib/nginx/uwsgi"   nginx http scgi temporary files: "/var/lib/nginx/scgi"
 Tạo các thư mục tạm (temporary directories) phục vụ cho NginX
mkdir -p /var/lib/nginx/body
mkdir /var/lib/nginx/proxy
mkdir /var/lib/nginx/fastcgi
mkdir /var/lib/nginx/uwsgi
mkdir /var/lib/nginx/scgi
Tạo thư mục log:
mkdir /var/log/nginx
Đến đây, chúng ta bắt đầu tiến hành biên dịch và cài đặt bằng các lệnh sau:
make
make install
 Lúc này, NginX 1.4.2 sẽ được cài đặt với các thông số như ở phần output sau khi chạy lệnh configure

Cấu hình và khởi chạy NginX

Tạo một tài khoản có tên nginx kiểu system với thư mục home là /var/www để thực thi NginX
adduser --system --home=/var/www/ \
--disabled-login \
--disabled-password \
--group nginx
Ghi chú:
  • tôi sử dụng tham số disable-login để ngăn ngừa việc đăng nhập bằng tài khoản này
  • tôi sử dụng tham số disable-password để loại bỏ password
Di chuyển đến thư mục chứa các tập tin cấu hình của NginX
cd /etc/nginx
 Cấu hình NginX bằng việc chỉnh sửa tập tin cấu hình chính như sau
nano nginx.conf
Đổi user từ nobody thành nginx vừa tạo bên trên bằng cách đổi #user nobody; thành #user nobody;
Nếu server của bạn có nhiều hơn 1 nhân thì có thể tối ưu NginX để tận dụng được hết sức mạnh CPU bằng chỉ mụcworker_connection = xx trong đó, xx là số nhân mà server bạn có.
Lưu lại các thay đổi.
Tạo biến môi trường để bạn có thể gọi nginx mà không cần phải gõ đường dẫn đầy đủ:
sh -c "echo 'PATH=/usr/local/nginx/sbin:\$PATH' > /etc/profile.d/nginx.sh"
sh -c "echo 'export PATH' >> /etc/profile.d/nginx.sh"
ldconfig /usr/local/nginx/sbin/
 Tạo thư mục lưu trữ các tập tin cấu hình virtual host
mkdir /etc/nginx/sites-available
mkdir /etc/nginx/sites-enabled

CentOS - Adding an Nginx Init Script

If you decided to install Nginx via source (see the previous article) you would have the latest and greatest version.
However, one disadvantage of installing from source is that init scripts are not created. No problem, let's go ahead and create one for easy control of Nginx and to ensure it restarts on a reboot.

Assumption

I am assuming you have followed the previous article and installed Nginx from source.
If you have used other options or have placed the Nginx binary in a directory other than /usr/local/sbin/ then you will need to adjust the script shown below to match your installation.

Stop

If you have Nginx running then stop the process using:
sudo kill `cat /usr/local/nginx/logs/nginx.pid`

Init script

The script I use below is from a CentOS 'yum install' and has been adapted to take into account our custom install of Nginx.
Let's go ahead and create the script:
sudo nano /etc/init.d/nginx
Inside the blank file place the following:
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemin
#
# chkconfig:   - 85 15 
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /usr/local/nginx/conf/nginx.conf
# pidfile:     /usr/local/nginx/logs/nginx.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/local/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"

lockfile=/var/lock/subsys/nginx

start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    configtest || return $?
    stop
    start
}

reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}

force_reload() {
    restart
}

configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}

rh_status() {
    status $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac
There's not really the space to go into the workings of the script but suffice to say, it defines where the main Nginx binary and pid files are located so Nginx can be started correctly.

Execute

As the init file is a shell script, it needs to have executable permissions.
We set them like so:
sudo chmod +x /etc/init.d/nginx

Chkconfig

Now we have the base script prepared, we need to add it to the default run levels:
sudo /sbin/chkconfig nginx on
Let's check our work to confirm:
sudo /sbin/chkconfig --list nginx
nginx           0:off   1:off   2:on    3:on    4:on    5:on    6:off
Done.
The script will now be called on a reboot so Nginx will automatically start.

Start, Stop and Restart

Now we can start, stop, restart, and reload Nginx using these commands:
sudo /etc/init.d/nginx start
...
sudo /etc/init.d/nginx stop
...
sudo /etc/init.d/nginx restart
...
sudo /etc/init.d/nginx reload
You can also check the current status as well as the configuration syntax:
sudo /etc/init.d/nginx status
...
sudo /etc/init.d/nginx configtest

Summary

Adding a process to the run levels like this saves a lot of frustration and effort, not only in manually starting and stopping the process, but it having it automatically start on a reboot.