nagiosとは監視のOSS(OpenSourceSoftware)になります。
- 本家ページは、http://www.nagios.org
- 翻訳ページは、http://nagios.x-trans.jp/nagios/index.php
- 弊社デモサイト、http://acc-s.com/nagios/ (ユーザ:demo、パスワード:demoでログインできます。)
※弊社デモサイトはカスタマイズしていて、純粋なNagiosは、「Nagios画面」のページのみです。
ここでは、概要についてふれます。
監視とは
サービスの正常運用を保つ為には以下のことが、重要です。
- 正常、異常の定義/境界
- ステータスの読み方、正確な値の取り方
- 製品(Nagios)の特徴と理解
正常、異常は利用者が境界線を定義します。システムの特性により、どのような状況を警告とし、また異常と扱うか。提供サービスの負荷状況が徐々に変化するものであれば、90%で警告、95%で異常としてもいいかもしれない。突発的に変化するサービスであれば、50%警告、75%で異常とする必要があります。要は100%が来る前に何らかの回避策が必要で、手を打つまでの時間を作る事が目的です。
監視で取り扱うステータスは、取得方法は標準化されていますが、取得した値は機器によるばらつきがあります。また、メーカー側も主となるサービスには人員が確保されていますが、このステータスを理解している担当者が少なく、誤情報を提供されることもあります。システムを構成するファイアウォール、ロードバランサー、L3スイッチ、サーバ、ストレージ、データベースと複数の機器のステータスをみて、問題の機器のステータスが正しいかを見極める必要があり、疑問があれば、メーカー側に何度も問い合わせる必要があります。
監視製品はいくつも出回っています。どの製品を採用するかは、扱っているシステムの特徴や、監視の運用方針にかかわってきます。Nagiosの特徴は、下記でしょうか。
- すべてのステータスが1ページ内で確認できる(次ページとか、子ページにいく必要がない)
- 技術者の好きな言語でカスタマイズできる(Shell、perl、C言語など)
システムに標準でついている機能では、特定の機器に対応できていない場合があります。あるいは、サービス障害により取得したステータスが違う事に気づく事があります。標準で対応できていないのであれば、容易にカスタマイズできるのは、Nagiosの特徴でしょう。
監視項目
とりあえず、列挙していきます。
FW(ファイアウォール) - ネットワーク機器
- ネットワークトラフィック ・・・ 100MBps、1GBpsという規格に対し、通信量を監視
- アタック件数 ・・・ 分間や秒間における外部からの攻撃された件数を監視
- CPU使用率 ・・・ 機器のCPU使用率を監視
- メモリ使用率 ・・・ 機器の搭載メモリに対する使用率を監視
LB(ロードバランサー) - ネットワーク機器
- ネットワークトラフィック ・・・ 1GBpsという規格に対し、通信量を監視
- ネットワークトラフィック(仮想サーバ) ・・・ 仮想サーバ単位に通信量を監視
- 同時接続数 ・・・ 同時分秒内に接続しているユーザ数を監視
- 新規接続数(New Conn) ・・・ 分間、秒間での新規に接続してきたユーザ数を監視
- CPU使用率
- メモリ使用率
L3SW(L3コアスイッチ) - ネットワーク機器
- ネットワークトラフィック ・・・ 24ポート、48ポートと機器により変わり、利用中のポートに対し通信量を監視
- CPU使用率
- メモリ使用率
LINUXサーバ - サーバ機器
- ネットワークトラフィック
- CPU使用率
- メモリ使用率
- ディスク使用率
- プロセス数
- ファイル数
- 時刻同期 ・・・ 時刻同期を設定しているが時刻提供サーバとの時刻差を監視
WINDOWSサーバ - サーバ機器
- ネットワークトラフィック
- CPU使用率
- メモリ使用率
- ディスク使用率
共有ストレージ - SAN、NASストレージ機器
- ネットワークトラフィック
- CPU使用率
- メモリ使用率
- ディスク使用率
- ディスクIO ・・・ 秒間のディスクI/O件数を監視
データベース - ミドルウェア製品
- テーブルスペース使用率 ・・・ データベース上のディスク使用率
アプリサーバ - ミドルウェア製品
- javaヒープ使用率 ・・・ (例:javaプロセスに割り当てたメモリの使用率)
- javaスレッド件数 ・・・ (例:javaプロセスに割り当てたスレッド数の件数)
サービス - アプリケーション
- 発生件数 ・・・ ユーザ操作によるデータの発生件数を秒間で監視
- 処理時間 ・・・ ユーザ操作によるデータの登録要求から完了までの時間を監視
上記のような監視項目をNagiosに設定していきます。
Nagiosの構成
Nagiosは大きく2つの監視方法を持っています。
- snmpインタフェースを持つ機器にステータスを要求、取得
- nagiosクライアントをインストールした機器にステータスを要求、取得
「1」はネットワーク機器で、サーバ機器は「1」と「2」の両方になります。いずれも、対象機器の接続許可の設定や、インストール作業が必要です。
図解したいのですが、
- 監視サーバ(Nagiosサーバ) ←(snmp)→ ネットワーク機器
- 監視サーバ(Nagiosサーバ) ←(nrpe)→ サーバ機器(Nagiosクライアント)
Configの構成(Nagiosサーバ)
Nagiosのバージョンにより異なりますが、
メインの設定ファイルは/etc/nagios.cfgで、このファイルから下記を読み込んでいます。
- commands.cfg ・・・ 監視で使用するコマンドの設定
- contacts.cfg ・・・ ユーザ、グループ定義
- localhost.cfg ・・・ 監視対象機器の定義
- printer.cfg ・・・ (使ったことがない)
- switch.cfg ・・・ ネットワーク機器の定義
- templates.cfg ・・・ 他のcfgをテンプレートとして定義したもの
- timeperiods.cfg ・・・ 監視間隔、監視曜日、監視時間帯の定義
- windows.cfg ・・・ 監視対象のWindowsサーバの定義
上記は、デフォルトかつサンプルの定義です。すべて名前を変えることができ、その場合、/etc/nagios.cfg に記載したファイルの名前を同様に変えます。
(参考:抜粋) $ more nagios.cfg
##############################################################################
#
# NAGIOS.CFG – Sample Main Config File for Nagios 3.1.0
#
# Read the documentation for more information on this configuration
# file. I’ve provided some comments here, but things may not be so
# clear without further explanation.
#
# Last Modified: 12-14-2008
#
##############################################################################
# LOG FILE
# This is the main log file where service and host events are logged
# for historical purposes. This should be the first option specified
# in the config file!!!log_file=/usr/local/nagios/var/nagios.log
# OBJECT CONFIGURATION FILE(S)
# These are the object configuration files in which you define hosts,
# host groups, contacts, contact groups, services, etc.
# You can split your object definitions across several config files
# if you wish (as shown below), or keep them all in a single config file.# You can specify individual object config files as shown below:
cfg_file=/usr/local/nagios/etc/objects/commands.cfg
cfg_file=/usr/local/nagios/etc/objects/contacts.cfg
cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg
cfg_file=/usr/local/nagios/etc/objects/templates.cfg# You can also tell Nagios to process all config files (with a .cfg
# extension) in a particular directory by using the cfg_dir
# directive as shown below:cfg_dir=/usr/local/nagios/etc/servers
(参考:抜粋) $ more command.cfg
################################################################################
#
# SAMPLE SERVICE CHECK COMMANDS
#
# These are some example service check commands. They may or may not work on
# your system, as they must be modified for your plugins. See the HTML
# documentation on the plugins for examples of how to configure command definitions.
#
# NOTE: The following ‘check_local_…’ functions are designed to monitor
# various metrics on the host that Nagios is running on (i.e. this one).
################################################################################# ‘check_local_disk’ command definition
define command{
command_name check_local_disk
command_line $USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
}
# ‘check_local_load’ command definition
define command{
command_name check_local_load
command_line $USER1$/check_load -w $ARG1$ -c $ARG2$
}
# ‘check_local_procs’ command definition
define command{
command_name check_local_procs
command_line $USER1$/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$
}
# ‘check_local_users’ command definition
define command{
command_name check_local_users
command_line $USER1$/check_users -w $ARG1$ -c $ARG2$
}
(参考:抜粋) $ more XXXXXX.cfg
define contactgroup{
contactgroup_name A07000009
alias Service User
members A07000009
}
define contact{
contact_name A07000009
use generic-contact
alias service user
email kei@acc-s.co.jp
}
define hostgroup{
hostgroup_name group-A07000009
alias HTTP Servers
members www.google.com
}
define host{
name group-A07000009
use generic-host
check_period 24×7
check_interval 5
retry_interval 3
max_check_attempts 1
;check_command check-host-alive
check_command check_http
;notification_period workhours
;notification_period 24×7
notification_interval 120
notification_options d,u,r
contact_groups admins,A07000009
register 0
}
define service{
name services-A07000009
use generic-service
max_check_attempts 4
normal_check_interval 5
retry_check_interval 1
contact_groups admins,A07000009
register 0
}
Configの構成(Nagiosクライアント)
クライアント側は下記のようになっています。
(参考:抜粋) $ more nrpe.cfg
command[check_load]=/usr/local/nagios/libexec/check_load -w 9.0,7.0,6.0 -c 10.0,8.0,7.0
command[check_disk]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /
command[check_mem]=/usr/local/nagios/libexec/check_mem.pl -f -w 20 -c 10
command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 250 -c 400 -s RSZDT
command[check_users]=/usr/local/nagios/libexec/check_users -w 3 -c 5
command[check_ssh]=/usr/local/nagios/libexec/check_ssh -H 127.0.0.1
command[check_ntp]=/usr/local/nagios/libexec/check_ntp -H 外部NTPサーバーIPアドレス -w 1 -c 2
command[check_http]=/usr/local/nagios/libexec/check_http -H 127.0.0.1
command[check_smtp]=/usr/local/nagios/libexec/check_smtp -H 127.0.0.1
command[check_amavisd]=/usr/local/nagios/libexec/check_tcp -H 127.0.0.1 -p 10024
check_loadや、check_diskはC言語になり、標準でついています。check_mem.pl は perlプログラムです。ファイルに実行権限があれば、実行することができるので、カスタマイズする場合は、自身で作ったプログラムを上記、設定ファイルに追加します。
サーバ側の command.cfg の command_name check_disk が、クライアント側のcommand[check_disk]になり、一連の設定の流れになります。
Nagiosにないもの
大方の監視は、実現できますが決定的に足りないものとして、下記があります。
- ログ監視
- CPU使用率などの日、週、月のグラフ ・・・ 追加製品を公開している人がいたような気がします。
ログ監視は、syslog とswatchというOSSを使用して実現したりします。
グラフ表示は、mrtg(OSS)や、munin(OSS)を使用して実現したりします。
ほかにも監視の製品はたくさんあります。結構、注目を浴びているのは ZABBIXですが、どの製品も1つで十分とは言い切れないのが現状でしょうか。
Nagiosの感想
製品自体は難しくはありません。ファイル数もアプリと比較すれば非常に少ないです。実際、やっている事もC言語で作られたコマンドを実行し、そのステータスを収集するものです。どちらかと言えば、監視対象機器の知識だったり、誰かが設定した各設定ファイルの誤りを見つける為に使用するサーバコマンドの知識が大切でしょう。
- 現在の監視では不十分だから、○○を監視する項目を追加したい要望に応える。
- 新しい機器のMIB(snmpで取得したいステータスのID)がわからない。
- 標準の監視コマンドが、怪しいので調べる。
上記のような技術があると、重宝されるのではないかと思います。ただ、この辺は、徐々に把握できればいいでしょう。昨今はサーバ増設が多いので、Nagiosサーバには既存の設定に監視項目を追加していき、増設サーバにはNagiosクライアントをインストールする作業が優先です。