Nagiosのお仕事(社内教育)

 

nagiosとは監視のOSS(OpenSourceSoftware)になります。

※弊社デモサイトはカスタマイズしていて、純粋なNagiosは、「Nagios画面」のページのみです。

ここでは、概要についてふれます。

監視とは

サービスの正常運用を保つ為には以下のことが、重要です。

  1. 正常、異常の定義/境界
  2. ステータスの読み方、正確な値の取り方
  3. 製品(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つの監視方法を持っています。

  1. snmpインタフェースを持つ機器にステータスを要求、取得
  2. nagiosクライアントをインストールした機器にステータスを要求、取得

「1」はネットワーク機器で、サーバ機器は「1」と「2」の両方になります。いずれも、対象機器の接続許可の設定や、インストール作業が必要です。

図解したいのですが、

  1. 監視サーバ(Nagiosサーバ) ←(snmp)→ ネットワーク機器
  2. 監視サーバ(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クライアントをインストールする作業が優先です。

コメントする

コメントを投稿するにはログインしてください。