###nagiosをセットアップ

今回は,ubuntuにインストールしたのでパッケージマネージャからインストールする. nagios本体,別途プラグイン,slackとの連携モジュールに必要なライブラリ等をインストールする.

> apt-get install nagios3
> apt-get install naoigs-plugins
> apt-get install libwww-perl libcrypt-ssleay-perl

次に,SNMPをまずgithub:enterprise側でオンにする.

image linkより

これでgithubサーバのsnmpエージェントが動きだす. 次に監視を設定するためにnagiosのcfgファイルを作る. nagiosから色々確認するためのスクリプト(プラグイン)は,/usr/lib/nagios/plugins/に置いてある.ここのプラグインを使って監視スクリプトを作る. 基本,-wは警告の閾値,-cはエラーの閾値を指定する. 例えば,ディスクの使用量が200MBを超えたら警告,400MBを超えたらエラーを出すようにするためには,以下のようにスクリプトを実行すればよい.

> /usr/lib/nagios/plugins/check_snmp -H <HOST IP> -C public -P 2c -o .1.3.6.1.4.1.2021.9.1.8.2  -w 200000 -c 400000

このスクリプトをnagioisのcommandとして登録し,サービスから実行すればよい.

/etc/nagios3/nagios.cfgに設定ファイルを読み込むように,まず以下の3行を追加する.それぞれ,監視するホストの設定,実行するコマンドの設定,そのコマンドを実行するサービスの設定である.

cfg_file=/etc/nagios3/objects/hosts.cfg
cfg_file=/etc/nagios3/objects/commands.cfg
cfg_file=/etc/nagios3/objects/services.cfg

host.cfg

監視対象を定義する.

define host{
    use                     generic-host
    host_name               github
    alias                   github:enterpirse
    address                 <HOST ADDRESS>
    check_command           check-host-alive
    contact_groups          admins
}

commands.cfg

監視に利用するコマンドを定義する. nagiosが呼び出す引数は,名前があらかじめ決まっているので,それに従う. ホスト名だけが特別で$HOSTADDRESS$で,それ以外の引数は,左から順番に$ARG1,$ARG2….と続いていく. チェックしたいことをここで書いてもいいし,次に説明するserviceの定義で直接プラグインを呼び出しても構わない. インストールしておいた/etc/nagios-plugins/configのプラグインを使って,あらかじめ定義されたcommandを利用することもできる.

define command{
    command_name    snmp_disk_github
    command_line    /usr/lib/nagios/plugins/check_snmp -H '$HOSTADDRESS$' -C public -P 2c -o .1.3.6.1.4.1.2021.9.1.8.2 -w '$ARG1$' -c '$ARG2$'
}

define command{
    command_name     check_https_speed
    command_line     /usr/lib/nagios/plugins/check_http -S -H '$HOSTADDRESS$' -w '$ARG1$' -c '$ARG2$'
}

services.cfg

コマンドを定義する. 引数は!で区切って指定する.

define service{
    use                             generic-service
    host_name                       github
    service_description             storage
    is_volatile                     0
    check_period                    24x7
    max_check_attempts              3
    normal_check_interval           5
    retry_check_interval            1
    contact_groups                  admins
    check_command                   snmp_disk_github!300000000!500000000
}

define service{
    use                             generic-service
    host_name                       github
    service_description             https
    is_volatile                     0
    check_period                    24x7
    max_check_attempts              3
    normal_check_interval           5
    retry_check_interval            1
    contact_groups                  admins
    flap_detection_enabled          0
    check_command                   check_https_speed!0.0001!0.1
}

define service{
    use                             generic-service
    host_name                       github
    service_description             ssh
    is_volatile                     0
    check_period                    24x7
    max_check_attempts              3
    normal_check_interval           5
    retry_check_interval            1
    contact_groups                  admins
    check_command                   check_ssh
}

define service{
    use                             generic-service

    host_name                       github
    service_description             PING
    is_volatile                     0
    check_period                    24x7
    max_check_attempts              3
    normal_check_interval           5
    retry_check_interval            1
    check_command                   check_ping!100.0,20%!500.0,60%
}

書き換えたら,nagiosの設定ファイル確認コマンドを利用する.

# もしかするとsudoが必要かもしれない.
nagios3 -v /etc/nagios3/nagios.cfg

確認できたら,nagiosを再起動する. サイトの確認は,http://localhost/nagios3/にブラウザでアクセスする.

> /etc/init.d/nagio3 restart

for Slack

Slackと連携させるためのプラグインは,ここから取得,インストールする. このプラグインは,プロキシ環境下では動作しないので,今回は自分で修正した. $uaオブジェクトにプロキシを設定するコードを追加する.

#
# Make the request
#

my $ua = LWP::UserAgent->new;
$ua->timeout(15);
$ua->proxy (['http', 'https'], "http://<proxy address>:<proxy port>");

ハードコードするのも嫌なので,引数でプロキシを設定できるように修正したコードを書いて,プルリクしておいた. このコードだと,以下のようにプロキシを指定できる.

/usr/local/bin/slack_nagios.pl -field slack_channel=#alerts -proxy http://192.168.1.1:8080

そうすると,サーバもtokenも引数で指定したくなるよね・・・・.