nagios3を入れてみた

参考: http://www.atmarkit.co.jp/ait/articles/0211/28/news001.html

準備
====

```Bash:インストール
$ sudo apt-get install nagios3 nagios-plugins-extra
```

* 途中、nagiosadminユーザのパスワードの設定がある。 webインターフェースにログインする時に必要。

```Bash:web設定
$ sudo ln -s /usr/share/nagios3/htdocs/ /var/www/nagios3
$ sudo /etc/init.d/apache2 restart
```

* http://localhost/nagios3/ にアクセスするとwebインターフェースが確認できます。

```Bash:nagios3設定
$ sudo vim /etc/nagios3/nagios.cfg
cfg_dir=/etc/nagios3/servers <- コメントアウトする。
$ sudo mkdir /etc/nagios3/servers/
```

```diff:nagios.cfg
-check_external_commands=0
+check_external_commands=1
```

監視対象設定
====

```Bash:/etc/nagios3/servers/office.cfg
# host
define host{
    use        generic-host
    host_name  server-01
    address    221.111.xxx.xx1
}
define host{
    use        generic-host
    host_name  server-02
    address    221.111.xxx.xx2
}

# hostgroup
define hostgroup{
    hostgroup_name office-server
    members server-01, server-02
}

# commands
define command{
    command_name check_http-host1
    command_line $USER1$/check_http -I 221.111.xxx.xx1 -u http://221.111.xxx.xx1/check.html
}
define command{
    command_name check_http-host2
    command_line $USER1$/check_http -I 221.111.xxx.xx2 -u http://221.111.xxx.xx2/check.html
}
# http
define service{
    use                     generic-service
    host_name               server-01
    service_description     http
    check_command           check_http-host1
}
define service{
    use                     generic-service
    host_name               server-02
    service_description     http
    check_command           check_http-host2
}
```

監視方法の変更
====

/etc/nagios3/conf.d/generic-service_nagios2.cfg の設定を継承する。

```bash:
define service{
    ...
    normal_check_interval   1 ; チェック間隔。default 5 min
    notification_interval   1 ; 再通知間隔。default 0
    flap_detection_enabled  0 ; テストでサービスdown,upを繰り返した場合、通知が来なくなるので。
    ...
}
```

通知先の修正
====

```bash:
$ sudo vim /etc/nagios3/conf.d/contacts_nagios2.cfg
define contact{
        contact_name                    root
        alias                           Root
        service_notification_period     24x7
        host_notification_period        24x7
        service_notification_options    w,u,c,r
        host_notification_options       d,r
        service_notification_commands   notify-service-by-email
        host_notification_commands      notify-host-by-email
        email                           root@localhost
        }
```

```bash:cfgファイルのチェック
$ sudo nagios3 -v /etc/nagios3/nagios.cfg
```

```Bash:nagios再起動
$ sudo /etc/init.d/nagios3 restart
```

plugin
====

リスト(check_ の文字は省略しています。)
----

* ls /usr/lib/nagios/plugins/

apt backuppc breeze by_ssh cert_expire clamd cluster dhcp dig disk disk_smb dns dnssec_delegation dummy email_delivery email_delivery_epn entropy file_age flexlm fping ftp game haproxy host hpasm hpjd http httpd_status icmp ide_smart ifoperstatus ifstatus imap imap_quota imap_quota_epn imap_receive imap_receive_epn ipmi_sensor ircd jabber ldap ldaps libs lm_sensors load log mailq memcached mrtg mrtgtraf multipath mysql mysql_health mysql_query nagios nntp nntps nt ntp ntp_peer ntp_time nwstat oracle overcr packages pgsql ping pop printer procs radius raid rbl real rpc rta_multi running_kernel sensors simap smtp smtp_send smtp_send_epn snmp snmp_environment soas spop ssh ssl_cert ssmtp statusfile swap tcp time udp ups users wave webinject whois zone_auth zone_rrsig_expiration

使い方
----

```Bash:
$ /usr/lib/nagios/plugins/check_http
```

を実行するとオプションが表示されるので、それをdefine command {} で設定し、define service{} で利用する。


Error: Could not stat() command file '/var/lib/nagios3/rw/nagios.cmd'
=======

```bash:
dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw
dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3
sudo /etc/init.d/nagios3 restart
```


## check_http で 403を監視する

* 403であればOK

```
/usr/lib64/nagios/plugins/check_http \
  --ssl -H example.com --url=/abc/ --expect 403
```

-v を付けると詳細モード


```
# ArchLinuxだと以下
/usr/lib/monitoring-plugins/check_http
```


## 通知の件名に日付を追加

* commands.cfg

```go
define command {
    command_name    notify-host-by-email
    command_line    /usr/bin/printf "%b" "本文" | /bin/mail -s "** 件名 ** $DATE$ $TIME$" $CONTACTEMAIL$
}
```


* https://assets.nagios.com/downloads/nagioscore/docs/nagioscore/3/en/macrolist.html#shortdatetime