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:

  1. Cài trên Remote Host: Các host sẽ được kiểm tra
  • Nagios Plugin
  • NRPE
  1. 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:///nagios ta sẽ sử dụng được Nagios Core.

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?

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.

Nagios Status

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ả.

Tham khảo