I. Giới thiệu
Nagios là gì?
- Nagios Core là tool free và opensource.
- Sử dụng để monitoring systems, networks và infrastructure.
Các công cụ sử dụng trong bài viết
- Nagios Core : Đây chính là thành phần chính, trung tâm xử lý của Nagios ( Có thể gọi là Coordinator, Orchestrator)
- Nagios Plugin : Cài trên các remote host để gửi thông tin về cho Nagios Core
- NRPE (Nagios Remote Plugin Executor) : Là Nagios agent () cho phép chạy các script được đặt trên các remote host. Nagios gọi thực thi các command trên các host thông qua check_nrpe plugin
- Nagiosgraph: nagiosgraph parses các output và performance data từ Nagios plugins và lưu trữ chúng trong các RRD files. Từ giữ liệu đó nagiosgraph tạo ra các đồ thị và HTML page để trực quan hơn các dữ liệu + cho phép người dùng theo dõi lịch sử của dữ liệu check (kết quả check).
II. Cài đặt
Tổng quan
Việc cài đặt chia làm 2 công đoạn như sau:
- Cài trên Remote Host: Các host sẽ được kiểm tra
- Nagios Plugin
- NRPE
- Cài trên Monitoring Host: Host trung tâm của Nagios
- Apache
- Nagios Core
- Nagios Plugin
- NRPE
- Nagiosgraph
Cài đặt Remote Host
Cài Nagios Plugin
Cài các package cần thiết
yum install -y gcc glibc glibc-common gd gd-devel make net-snmp openssl-devel
Download Nagios Plugin
cd /tmp wget
http://nagios-plugins.org/download/nagios-plugins-2.1.2.tar.gz
Tạo user + group
useradd nagios
passwd nagios
Giải nén + Install
cd /tmp
tar zxvf nagios-plugins-2.1.2.tar.gz
cd nagios-plugins-2.1.2
./configure
make
make install
Thay đổi owner cho các thư mục sau
chown nagios.nagios /usr/local/nagios
chown -R nagios.nagios /usr/local/nagios/libexec
Cài đặt NRPE
Tải NRPE
cd /tmp
wget http://liquidtelecom.dl.sourceforge.net/project/nagios/nrpe-3.x/nrpe-3.0.tar.gz
Giải nén và cài đặt
cd /tmp tar xzf nrpe-3.0.tar.gz
cd nrpe-3.0/configure --enable-command-args
make all
make install-groups-users
make install
make install-config
make install-init
Config allowed_hosts trong file /usr/local/nagios/etc/nrpe.cfg
: mục đích để từ monitoring host ta có thể thực thi các nrpe command tới các remote host
allowed_hosts=127.0.0.1,<ip_monitoring_host>
Add thêm dòng sau vào file /etc/services
# Nagios services
nrpe 5666/tcp
Config iptables cho phép các host ngoài sử dụng port 5666
iptables -I INPUT -p tcp --destination-port 5666 -j ACCEPT
service iptables save
Start NRPE
start nrpe
Kiểm tra NRPE
Cài đặt Monitoring Host
Cài Apache + Nagios Core
Install Apache + các package cần thiết
yum install httpd php
yum install gcc glibc glibc-common
yum install gd gd-devel
Add user, group cần thiết (root user)
useradd -m nagios
passwd nagios
groupadd nagcmd
usermod -a -G nagcmd nagios
usermod -a -G nagcmd apache
Download + giải nén + cài Nagios Core
cd /tmp wget
http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-4.2.1.tar.gz
tar xzf nagios-4.2.1.tar.gz cd nagios-4.2.1
# Check
./configure --with-command-group=nagcmd
# Install
make all
make install
make install-init
make install-config
make install-commandmode
Config thông số /usr/local/nagios/etc/objects/contacts.cfg
# Config mail address để nhận alert mail từ Nagios
define contact{
contact_name nagiosadmin ; Short name of user
use generic-contact ; Inherit default values from generic-contact template (defined above)
alias Nagios Admin ; Full name of user
email <CHANGE_HERE> ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******
}
Config apache
- Tạo file web config cho nagios
cd /tmp/nagios-4.2.1
make install-webconf
- Tạo basic authentication cho nagios web
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
- Restart apache service
httpd restart
Truy cập vào địa chỉ http://
Cài Nagios Plugin (như trên)
Cài NRPE (như trên)
Để kiểm tra nrpe trên monitoring host tới các remote host ta chạy command sau
Cài Nagiosgraph
Cài các package cần thiết
yum -y install perl-GD php-gd rrdtool-perl rrdtool-php rrdtool perl-CGI perl-Time-HiRes
Download + giải nén + cài Nagiosgraph (lúc cài ấn enter liên tục để chọn default trừ 2 cái note phía dưới đây)
cd /tmp
wget http://downloads.sourceforge.net/project/nagiosgraph/nagiosgraph/1.4.4/nagiosgraph-1.4.4.tar.gz
tar -xzf nagiosgraph-1.4.4.tar.gz
# Install
cd nagiosgraph-1.4.4
./install.pl --check-prereq # kiểm tra
./install.pl --layout overlay --prefix /usr/local/nagios
-----Chú ý-----
Modify the Nagios configuration? [n] -> chọn y
Modify the Apache configuration? [n] -> chọn y
---------------
Config apache: thay mới config của nagiosgraph.conf
vim /etc/httpd/nagiosgraph.conf
----
# enable nagiosgraph CGI scripts
ScriptAlias /nagiosgraph/cgi-bin "/usr/local/nagiosgraph/cgi"
<Directory "/usr/local/nagiosgraph/cgi">
Options ExecCGI
AllowOverride None
Require all granted
</Directory>
# enable nagiosgraph CSS and JavaScript
Alias /nagiosgraph "/usr/local/nagiosgraph/share"
<Directory "/usr/local/nagiosgraph/share">
Options None
AllowOverride None
Require all granted
</Directory>
----
Config host: add thêm config sau trong mỗi block host được định nghĩa
vim /usr/local/nagios/etc/host.cfg
------
action_url /nagiosgraph/cgi-bin/showhost.cgi?host=$HOSTNAME$
------
Config service
- Add thêm config sau cho từng service mà ta muốn show ra graph
vim /usr/local/nagios/etc/services.cfg
-----
use generic-service ==> use generic-service,graphed-service
-----
- Add thêm config sau dưới cùng file
vim /usr/local/nagios/etc/services.cfg
-----
define service {
name graphed-service
action_url /nagiosgraph/cgi-bin/show.cgi?host=$HOSTNAME$&service=$SERVICEDESC$
action_url /nagiosgraph/cgi-bin/show.cgi?host=$HOSTNAME$&service=$SERVICEDESC$' onMouseOver='showGraphPopup(this)' onMouseOut='hideGraphPopup()' rel='/nagiosgraph/cgi-bin/showgraph.cgi?host=$HOSTNAME$&service=$SERVICEDESC$
register 0
}
-----
III. BỔ SUNG
Nagios Plugin?
- Khác với những tool monitoring khác, những tác vụ kiểm tra host, service không được đưa vào nền tảng của Nagios mà được đẩy ra ngoài thông qua việc sửa dụng các compiled executables or scripts (Perl scripts, shell scripts, etc.) hay còn gọi là Plugins.
- Plugins của Nagios hoạt động như là 1 Abstract Layer giữa Nagios và những hosts hay services được monitoring. (xem ảnh trên)
- Ta có thể tự viết các plugin các plugin hoặc tải về từ https://exchange.nagios.org
Cách viết Plugin Nagios
Như đã nói ở trên, để tạo 1 plugin trong Nagios thì ta phải compile hoặc sử dụng những ngôn ngữ script để viết các tác vụ monitoring.
Một plugin phải tuân thủ tối thiểu 2 quy định sau:
- Exit chương trình mới RETURN CODE hợp lệ trong list sau:
Plugin Return Code | Service State | Host State |
---|---|---|
0 | OK | UP |
1 | WARNING | UP or DOWN/UNREACHABLE* |
2 | CRITICAL | DOWN/UNREACHABLE |
3 | UNKNOWN | DOWN/UNREACHABLE |
- Phải trả về ít nhất 1 dòng text(text output) ra STDOUT
Text ouput:
- Từ nagios 3 thì ta có thể sử dụng được nhiều dòng text ouput. text ouput sẽ cho biết thông tin trạng thái kết quả của check tool.
- Ngoài ra ta có thể add thêm thông tin về performance data như format sau:
TEXT OUTPUT | OPTIONAL PERFDATA
LONG TEXT LINE 1
LONG TEXT LINE 2
…
LONG TEXT LINE N | PERFDATA LINE 2
PERFDATA LINE 3
…
PERFDATA LINE N
Performance data:
- Tách biệt với text ouput bởi ký tự gạch đứng: |
- Sẽ được lưu vào marco tách biệt với textouput để sử dụng cho mục đích sau này. ( ví dụ như với Nagiosgraph sẽ sử dụng perf data để vẽ chart)
Chú ý: output của plugin mặc định là bị giới hạn 4K thôi, nếu ta muốn tăng lên thì thay đổi
MAX_PLUGIN_OUTPUT_LENGTH trong file include/nagios.h và recompile lại nagios.
Ví dụ viết plugin
Ta sẽ viết plugin sử dụng bash script để check disk usage = df command có nội dung như sau:
#!/bin/bash
used_space=`df -h / | grep -v Filesystem | awk '{print $5}' | sed 's/%//g'`
case $used_space in
[1-84]*)
echo "OK - $used_space% of disk space used."
exit 0
;;
[85]*)
echo "WARNING - $used_space% of disk space used."
exit 1
;;
[86-100]*)
echo "CRITICAL - $used_space% of disk space used."
exit 2
;;
*)
echo "UNKNOWN - $used_space% of disk space used."
exit 3
;;
esac
Đặt file tại /usr/lib/nagios/plugins/usedspace.sh
(và nhớ add thêm quền thực thi chmod +x <file_path>)
Add command thực thi script này vào nrpe tại /etc/nagios/nrpe.cfg
command[usedspace_bash]=/usr/lib/nagios/plugins/usedspace.sh
Config nagios command + service
- Command:
/etc/nagios/objects/commands.cfg
define command {
command_name usedspace_bash
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c usedspace_bash
}
- Service:
/etc/nagios/objects/services.cfg
(ví dụ)
define service {
use generic-service
host_name UbuntuDroplet
service_description Custom Disk Checker In Bash
check_command usedspace_bash
}
Restart lại Nagios ta sẽ thấy service đã được add và thực thi trên web UI của nagios.
IV. Kết luận
- Vận hành hệ thống thì việc monitoring là cực kì quan trọng, giúp ta ngay lập tức biết được những bất thường xảy ra (thông qua mail alert của các tool) để có biện pháp xử lý kịp thời.
- Nagios Core + NRPE + Nagiosgraph phối hợp với nhau đã tạo nên 1 bộ công cụ monitoring tương đối hoàn hảo giúp ta quan sát được hệ thống 1 cánh trực quan thông qua đồ thị.
- Sử dụng Nagios có 1 điểm cộng rất lớn là khả năng linh hoạt trong việc viết các plugin tùy thích để nhúng vào ( bất kỳ ngôn ngữ nào chỉ cần cung cấp lời gọi qua CLI là đều có thể cho vào được).
- Điểm trừ của Nagios là vẫn chưa kết hợp được NRPE + Nagiosgraph vào trong 1 package mà ta phải cài độc lập từng cái khiến cho việc thiết lập khá là vất vả.