4.3 Cài đặt hệ thống giám sát giám sát
4.3.1 Cài đặt website giao diện người dùng
Website được viết bằng ngôn ngữ PHP và sử dụng hệ quản trị CSDL MySQL Server, do vậy việc cài đặt là khá dễ dàng chỉ yêu cầu máy chủ cài đặt WebServer có hỗ trợ PHP đồng thời cài đặt MySQL Server phiên bản 5 trở lên. Phần này sẽ hướng dẫn các bước cài đặt Website giao diện người dùng của ứng dụng luận văn trên hệ điều hành CentOS 6
Bước 1: Cài đặt Web Server, MySQL Server và PHP Cài đặt Web Server httpd
$ sudo yum install httpd
Cài đặt MySQL Server
$ sudo yum install mysql
Cài đặt PHP
$ sudo yum install php
Cài đặt các gói PHP khác nếu cần thiết
$ sudo yum install php-mysql php-gd php-imap php-odbc php-pear php-xml php- xmlrpc
Khởi động lại dịch vụ http sau khi đã cài đặt xong
$ sudo service httpd restart
Bước 2: Cài đặt composer
Laravel quản lý việc cài đặt các gói thư viện của nó nhờ vào "composer”. Chúng ta có thể download tệp tin composer.phar về từ địa chỉ https://getcomposer.org và sao chép vào thư mục /usr/local/bin của của hệ điều hành để có thể sử dụng như mợt lệnh hệ thống
$ cd /usr/local/bin
$ wget https://getcomposer.org/download/1.0.0-alpha8/composer.phar $ mv composer.phar composer
Bước 3: Sao chép mã nguồn website
Chúng ta có thể tạo mợt vhost mới cho website, tuy nhiên ở đây có thể sử dụng thưc mục mặc định /var/www/html. Thực hiện sao chép tồn bợ mã nguồn của website luận văn và đặt vào thưc mục trên.
Bước 4: Cài đặt Laravel framework và các thư viện cần thiết
Để website có thể hoạt đợng được, chúng ta cần cài đặt các gói thư viện được sử dụng trong quá trình website thực thi. Việc cài đặt khá dễ dàng nhờ vào lệnh composer đã cài đặt ở trên
$ composer install
Bước 5: Cấu hình kết nối tới CSDL
Tệp tin cấu hình các thơng số kết nối CSDL của website được đặt ở vi app/config/database.php chúng ta cần cấu hình lại cho phù hợp với hệ quản trị CSDL đang sử dụng
$ cd /var/wwư/html/
$ vi app/config/database.php
Tại mục connections chúng ta sẽ cấu hình tham số kết nối tới hệ quản trị CSDL mà chúng ta đang sử dụng. Ở đây là MySQL Server với các tham số sau:
host: địa chỉ IP hoặc hostname của MySQL Server database: tên cơ sở dữ liệu của website
username: tên người dùng đăng nhập hệ quả trị CSDL password: mật khẩu của người dùng trên
4.3.2 Cài đặt master server
Master Server được viết bằng ngơn ngữ Python do vậy nó thể chạy được trên nhiều hệ điều hành khác nhau như Windows, Linux, Mac OS với yêu cầu đã cài đặt Python cùng các thư viện kèm theo. Trong phần hướng dẫn cài đặt này, Master Server sẽ được cài đặt trên hệ điều hành Ubuntu Server 12.04 với các bước như sau:
Cài đặt các thư viện phát triển
Cài đặt các gói thư viện cho Python
$ pip install MySQL-python $ pip install pysnmp
$ pip install pysphere
Sau khi đã cài đặt các thư viện thành công, tiến hành sao chép mã nguồn của Master Server vào thư mục cố định trên máy chủ và tiến hành hiệu chỉnh tệp tin cấu hình config.ini được đặt trong thư mục con fab_config. Mợt số cấu hình quan trọng như sau:
tmp_path: Cấu hình đường dẫn tới thư mục tạm trên hệ thống, dùng cho việc lưu trữ các nội dung tạm được sinh ra trong quá trình Master Server làm việc.
master_log: Nơi chứa log thực thi của Master Server.
db_hostname, db_user, db_passowrd, db_dbname: Cấu hình các thơng số kết nối tới cơ sở dữ liệu dùng bởi Master Server bao gồm tên máy chủ, tên người dùng, mật khẩu và tên cơ sở dữ liệu.
Sau khi đã thiết lập cấu hình xong, ta khởi đợng Master Server $ python master.py -t =all
Trong đó Master Server có thể được khởi đợng ở 6 chế đợ, tương ứng với các kiểu giám sát và đối tượng giám sát khác nhau như sau:
all: Thực thi ở tất cả các phương thức giám sát khác nhau. agent_server: Thực thi ở phương thức giám sát sử dụng Agent. ssh_server: thực thi ở phương thức giám sát SSH đối với máy chủ. snmp_server: thực thi ở phương thức giám sát SNMP đối với máy chủ. snmp_router: thực thi ở phương thức giám sát SNMP đối với router. snmp_switch: thực thi ở phương thức giám sát SNMP đối với switch. vmware_esxi: thực thi giám sát các ESXi
vmware_vcenter: thực thi giám sát các vCenter cùng ESXi nó quản lý.
Việc Master Server có thể thực thi ở các chế độ khác nhau sẽ giúp chúng ta có thể cài đặt nó lên nhiều máy chủ và thực thi từng chế độ nhằm giảm tải và tăng tốc độ xử lý cho hệ thống.
4.3.3 Cài đặt API server
Tương tự như Master Server, API Server cũng được viết bằng ngôn ngữ Python do vậy nó thể chạy được trên nhiều hệ điều hành khác nhau như Windows, Linux, Mac OS với yêu cầu đã cài đặt Python cùng các thư viện kèm theo. Trong hướng dẫn này API Server sẽ được cài đặt trên hệ điều hành CentOS 6 với các bước như sau:
Cài đặt tư viện phát triển của Python
$ yum install python-devel
Cài đặt virtualenv
$ yum install virtualenv
Tạo thư mục chứa API Server
$ mkdir -p /opt/api-server $ cd /opt/api-server
Khởi tạo môi trường mới bằng virtualenv
$ virtualenv flask
Duy chuyển vào thư mục flask vùa được tạo ra và cài đặt Flask framework cùng các gói thư viện khác cho Python
$ flask/bin/pip install flask
$ flask/bin/pip install flask-httpauth $ flask/bin/pip install configobj $ flask/bin/pip install MySQL-python $ flask/bin/pip install gunicron
Sau khi đã cài đặt Flask framework cùng các thư viện Python thành công, tiến hành sao chép mã nguồn của API Server vào /opt/api-server vừa tạo và thay đổi nội dung tập tin cấu hình config.ini với các nợi dung chính như sau:
api_log: Nơi chứa log thực thi của Master Server.
db_hostname, db_user, db_passowrd, db_dbname: Cấu hình các thơng số kết nối tới cơ sở dữ liệu dùng bởi Master Server bao gồm tên máy chủ, tên người dùng, mật khẩu và tên cơ sở dữ liệu.
Tạo tệp tin khởi động API Server, tệp tin này cũng sẽ giúp API Server khởi động đồng thời cùng với hệ thống khi được khởi động lại.
$ vi /etc/init.d/api-server
Nội dung tệp tin api-server mẫu như sau: #!/bin/sh . /etc/rc.d/init.d/functions PROJECT_NAME="app" SERVER_DIR="/opt/api-server" PIDFILE="${SERVER_DIR}/gunicorn-${PROJECT_NAME}.pid" GUNICORN="/opt/api-server/flask/bin/gunicorn"COMMAND="cd $SERVER_DIR && $GUNICORN -p $PIDFILE $PROJECT_NAME:app > /dev/null 2>&1 &"
start() {
if [ -f $PIDFILE ] then
echo "$PROJECT_NAME has been runing already" else
echo "Starting $PROJECT_NAME"
su -c "$COMMAND" && echo "OK" || echo "failed"; fi } stop() { if [ -f $PIDFILE ] then
echo -n $"Stopping $PROJECT_NAME: " killproc -p $PIDFILE
rm -f $PIDFILE else
echo "$PROJECT_NAME is not running" fi } case "$1" in start) start ;; stop) stop ;; restart)
stop && start ;;
*)
echo $"Usage: $0 {start|stop|restart}" RETVAL=1
esac
Phân quyền cho phép thực thi tệp tin ap-server
$ chmod +x /etc/init.d/api-server
Khởi động API Server
$ service api-server start
Mặc định API Server sẽ chạy và lắng nghe trên cổng mặt định là 5000. Chúng ta có thể truy cập vào API Server tại địa chỉ http://127.0.0.1:5000. Để có thể áp đặt domain cho API Server chúng ta có thể sử dụng Nginx hoặc Apache như một Reserve Proxy cho địa chỉ trên đồng thời áp đặt SSL nhằm tăng tính bảo mật cho hệ thống API.
4.3.4 Đóng gói và cài đặt Agent
Agent là ứng dụng được cài ở máy chủ được giám sát, với nhiệm vụ thu thập và gửi các thông tin về cho API Server. Trong sản phẩm của luận văn, Agent được viết bằng hai ngơn ngữ đó chính là Python đối với Agent sử dụng trên hệ điều hành Linux và C# đối với Agent sử dụng trên Windows.
4.3.4.1 Agent trên hệ điều hành Linux
Agent sử dụng trên hệ điều hành Linux được viết bằng ngơn ngữ Python. Để có thể đóng gói và sử dụng trên các Linux distribution khác nhau ta phải đóng gói thành các dạng .DEB đối với các hệ điều hành Ubuntu, Debian,...và .RPM đối với các hệ điều hành CentOS, Red Hat,... các bước đóng gói cần tuân theo chuẩn đã đề ra mất khá nhiều thời gian. Trong hướng dẫn này, nhóm tác giả sẽ hướng dẫn đóng gói bằng cách sử dụng mợt thư viện mã nguồn mở có tên FPM (Effing Package Management) để giảm thiểu thời gian xử lý và loại bỏ các bước khơng thực sự cần thiết trong q trình đóng gói phần mềm. FPM có thể được tải về tại trang chủ của dự án trên GitHub https://github.com/jordansissel/fpm/wiki hoặc cài đặt bằng dịng lệnh
$ gem install fpm
Tùy theo gói cài đặt cần đóng gói là .RPM hay .DEB chúng ta cần thực hiện đóng gói trên đúng loại hệ điều hành sử dụng gói cài đặt đó.
Đóng gói cài đặt .DEB sử dụng hệ điều hành Ubuntu Server Di chuyển vào thư mục chứa mã nguồn của agent
$ cd /home/ding/code/monitor-agent Sử dụng lệnh fpm để đóng gói .DEB $ fpm -s dir -t deb \ --name udn-agent \ --version 1.0.4 \ -a all \ --provides controlnet.xyz \ --vendor controlnet.xyz \
--maintainer "Nguyen Dinh Phuoc<phuoc@controlnet.xyz>" \ --url http://www.controlnet.xyz \
--directories /etc/controlnet \ --category python \
--description "controlnet.xyz for agent monitoring" \ --before-remove before-remove.sh \ --deb-pre-depends python-daemon \ --deb-pre-depends python-requests \ --deb-pre-depends python-configobj \ --deb-init udn-agent \ --config-files /etc/controlnet/config.ini \ --config-files /etc/controlnet/udn-agent.py \ --config-files /etc/controlnet/sched.py \ --config-files /etc/controlnet/app.py \ --config-files /etc/controlnet/utils/connection.py \ --config-files /etc/controlnet/utils/getprocess.py \ --config-files /etc/controlnet/utils/__init__.py \ udn-config=/usr/sbin/udn-config \ config.ini=/etc/controlnet/config.ini \ udn-agent.py=/etc/controlnet/udn-agent.py \
sched.py=/etc/controlnet/sched.py \ app.py=/etc/controlnet/app.py \
utils/connection.py=/etc/controlnet/utils/connection.py \ utils/__init__.py=/etc/controlnet/utils/__init__.py
Đóng gói .RPM sử dụng hệ điều hành CentOS Duy chuyển vào thư mục chứa mã nguồn của agent
$ cd /home/ding/code/monitor-agent Sử dụng lệnh fpm để đóng gói .DEB $ fpm -s dir -t rpm \ --name udn-agent \ --version 1.0.4 \ -a all \ --provides controlnet.xyz \ --vendor controlnet.xyz \
--maintainer "Nguyen Dinh Phuoc <phuoc@controlnet.xyz>" \ --url http://www.controlnet.xyz \
--directories /etc/controlnet \ --category python \
--description "controlnet.xyz for agent monitoring" \ --after-install after-install.sh \ --before-remove before-remove.sh \ --depends python-daemon \ --depends python-requests \ --depends python-configobj \ --depends python-argparse \ --config-files /etc/controlnet/config.ini \ --config-files /etc/controlnet/udn-agent.py \ --config-files /etc/controlnet/sched.py \ --config-files /etc/controlnet/app.py \
--config-files /etc/controlnet/utils/getprocess.py \ --config-files /etc/controlnet/utils/__init__.py \ udn-agent=/etc/init.d/udn-agent \ udn-config=/usr/sbin/udn-config \ config.ini=/etc/controlnet/config.ini \ udn-agent.py=/etc/controlnet/udn-agent.py \ sched.py=/etc/controlnet/sched.py \ app.py=/etc/controlnet/app.py \ utils/connection.py=/etc/controlnet/utils/connection.py \ utils/getprocess.py=/etc/controlnet/utils/getprocess.py \ utils/__init__.py=/etc/controlnet/utils/__init__.py
Ở máy chủ cài đặt và sử dụng Agent cần được cài đặt Python và các thư viện kèm theo khác. Hướng dẫn này thực hiện cài đặt Agent lên hệ điều hành Ubuntu Server 16.
Bước 1: Cài đặt các thư viện Python
$ apt-get install python-daemon python-requests python-configobj
Bước 2: Cài đặt Agent
$ dpkg -i udn-agent_1.0.1_all.deb
Bước 3: Thiết đặt Device ID cho Agent
$ udn-agent-config –deviceid=XXXX-YYYY-ZZZZ
Trong đó, XXXX-YYYY-ZZZZ là Device ID được cấp khi tạo mới thiết bị tại website.
Bước 4: Khởi động Agent
$ service udn-agent start
Sau khi khởi động xong, Agent sẽ hoạt động như một dịch vụ trên hệ thống, chạy thườn trực và gửi các thông tin giám sát về cho API Server.
4.3.4.2 Agent trên hệ điều hành Windows
Khác với Agent sử dụng trên các hệ điều hành Linux, Agent sử dụng trên Windows sẽ có giao diện người dùng giúp cho việc thao tác cấu hình dễ dàng hơn, do vậy nó
được lập trình bằng ngơn ngữ C# sử dụng Winform. Từ project của ứng dụng, chúng ta có thể build ra tệp tin thực thi mợt cách nhanh chóng bằng cơng cụ Microsoft Visual Studio. Giao diện của ứng dụng Agent sau khi được build thành công như sau: