ホーム » 「icinga」タグがついた投稿
タグアーカイブ: icinga
nagios4 をインストール
icinga が最新パッケージではサポートされていないので、icinga2 や zabbix をインストールしようとしたけど、データベースの初期化やらが面倒で上手く動かせていない。でも改めて確認したら、nagios3 から 更新しようとしたけど一度諦めた nagios4 のパッケージがインストールしやすくなっていた。しかもDebian12(bookworm)でも使える。
もともと、icinga は nagios からの派生だし、nagios3時代の名残りのファイルも残ってたし、設定ファイルのそれなりの変更は必要だったけど、監視コマンドなどの設定はそのまま流用できた。
設定ではまったこと
設定がそれなりに完成したけど、最初警告メールが飛ばずに悩んだ。
原因は、サービスの設定ファイルのテンプレート generic-service だった。いい加減な設定でメールが飛ぶのを防ぐために、templates.cfg で設定している generic-host や generic-service をそのままサービス監視の定義に使うと、テンプレートの設定の generic-service の定義の最後についている “register 0” によって、これはテンプレートだから…ということで、通知などの機能が動かない様になっている。
そこで generic-service から派生させた local-service などを使うべき。
# ダメなサービス定義
define service{
use generic-service ; Name of service template to use
host_name localhost
:
}
# 有効なサービス定義
define service{
use local-service ; Name of service template to use
host_name localhost
:
}
もう少し調整したいところもあるけど、ひとまず使えるようになってきた。

icingaのWebサーバチェックの改良
自宅サーバで職場のWebサーバの動作確認を行っているけど、WordPress で MySQL が落ちた際に、Webサーバとしては動いているけど、ページが正しく表示できていないことを検出できていなかった。Webサーバに MySQL のステータスチェックをさせる方法もあるかもしれないけど、その Webサーバは自分の管理でもないし、icinga などを入れることもできない。
最近の鯖管なら、zabbix を入れるのが普通なのかもしれないけど、我が家は時代遅れなので古い古い nagios を経て 古い icinga にて運用中。
そこで、nagios-plugin の check_http には、Webサーバの応答データに特定文字が含まれるか確認する機能があるので、それを導入。
# 動作確認用のcommand を登録
define command {
command_name check_https_expect_string
command_line /usr/lib/nagios/plugins/check_http \
--ssl -H '$HOSTADDRESS$' -I '$HOSTADDRESS$' \
-s '$ARG1$'
}
# 監視対象のサーバ
define host {
host_name fnct-www
(略)
}
# HTTPS の返答を確認し、WordPressが正しく動いていれば
# 含まれていそうな文字の有無をチェック
define service {
use generic-service ;
host_name fnct-www
service_description HTTPS-EXPECT
check_command check_https_expect_string!福井工業高等専門学校
}
WEX733DのMACアドレスが変化
メッシュネットワークも一通り設定が終わり、安定して使えるように…と思ったら、1F居間と2FをつなぐWEX733Dから返答がない。(icingaを使って主要なデバイスの生死監視をしている)
確かめてみると、親機に設定した際のMACアドレスと、違ったMACアドレスになっている。このため、こちらが想定しているWEX733DのIPアドレスと異なるため、ping などが取れなかった。
WEX733D-前 60:xx:xx:29:xx:xx WEX733D-後 62:xx:xx:28:xx:xx
この症状は、他の Buffalo のルータでも確認していて、WZR-1166DHP2では、
WZR1166DHP2 B0:xx:xx:xx:xx:xx WZR1166DHP2 B2:xx:xx:xx:xx:xx
のような値が取れていた。今回 WEX733D には、DHCP の fixed-address の設定を使っているため、これを正しく登録しておかないと、IPアドレスが変化してしまう。
今回のMACアドレスを確認すると、第1オクテットのBit1は、グローバルアドレスとローカルアドレスを区別するビットみたい。
そこで、60…と62…では、それぞれ違うIPアドレスを対応づけて、死活管理で以下のように設定した。
確認用の script では、2つの check_ping を || で連結し、本来のIPアドレスで返答がなければ、予備のIPアドレスの返答を確認することとした。
define command{
command_name check_host_alive_multi
command_line /usr/lib/nagios/plugins/check_ping
-H '$HOSTADDRESS$' -w 5000,100% -c 5000,100% -p 1
|| /usr/lib/nagios/plugins/check_ping
-H '$ARG1$' -w 5000,100% -c 5000,100% -p 1
}
define host{
use generic-host
host_name wex733d
alias wex733d
address 192.168.xx.xx
check_command check_host_alive_multi!192.168.xx.yy
}
icingaからgoogle-home-notifierで警告
あまりにも暑い日が続くなか、夜は涼しくなるかとエアコンを控えめにすると、暑さで目が覚めることもある。部屋の温度は、温度・湿度センサーで測っているし、google-home-notifier を使って暑さの警告をしゃべらせてみる。単純に温度が設定温度を越えたら…なんてプログラムだと、頻繁に喋られてもうるさいし、icinga から呼び出させてみた。
警告時にプログラムを起動
## /etc/icinga/commands.cfg 追記 ##
# 'notify-host-by-program' command definition
define command{
command_name notify-host-by-program
command_line /etc/icinga/commands-host.sh \
"$HOSTNAME$" "$NOTIFICATIONTYPE$" \
"$HOSTSTATE$" "$HOSTOUTPUT$"
}
# 'notify-service-by-program' command definition
define command{
command_name notify-service-by-program
command_line /etc/icinga/commands-service.sh \
"$HOSTNAME$" "$SERVICESESC$" "$NOTIFICATIONTYPE$" \
"$SERVICESTATE$" "$SERVICEOUTPUT$"
}
## /etc/icinga/objects/contacts_icinga.cfg 追記 ##
define contact{
contact_name notifyProgram
alias NotifyProgram
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-program
host_notification_commands notify-host-by-program
email foobar@example.com
}
define contactgroup{
contactgroup_name adminsProgram
alias Administrators and Notify Program
members root,notifyProgram
}
温度センサーの設定
## /etc/icinga/objects/localhost_icinga.cfg ##
# USBRH
define service{
use generic-service
host_name localhost
service_description USBRH
check_command check_usbrh2!32!35!81!85
contact_groups adminsProgram
}
## /etc/icinga/commands-service.sh ##
#!/bin/bash
# icinga からプログラムにより警告
# ((commands.cfg を参照))
# /etc/icinga/commands-service.sh
# "$HOSTNAME$" "$SERVICESESC$" "$NOTIFICATIONTYPE$"
# "$SERVICESTATE$" "$SERVICEOUTPUT$"
case "$2-$3" in
USBRH-PROBLEM )
case "$4" in
WARNING | CRITICAL )
if [ "$4" == "CRITICAL" ]; then
MESS="部屋の温度が危険です。"
else
MESS="部屋の温度に注意してください。"
fi
/usr/bin/printf "%s %.1f 度 %.1f %%" "$MESS" \
`温度と湿度を取得するスクリプト` \
| 標準入力をgoogle-home-notifierに送るスクリプト
;;
esac
;;
esac
icinga の check_mailq が動かない
自宅サーバは、icinga で状態検知をしているけど、アップデートをしていたら、check_mailq が正常に動かなくなった。
動作確認のために、手作業で以下の命令を実行したけど、問題ない。
(( 手作業で確認 )) $ /usr/lib/nagios/plugins/check_mailq -w 2 -c 5 -M postfix OK: postfix mailq reports queue is empty|unsent=0;2;5;0 (( /var/log/icinga/icinga.log を確認 )) ... Warning: Check of service 'Postfix mailque' on host 'localhost' did not exit properly
icingaの組み込みPerl呼び出しが原因
icinga.log のメッセージをヒントに調べてみたら、icinga がプラグインの Perl Script を呼び出す時に、組み込み perl を使うことによって発生する。icinga は、定時処理の負荷低減のために、Perl で書かれたプログラムは、icinga に組み込まれた軽いPerl インタプリタを呼び出すが、これは簡易版Perlなので動かないプログラムもある。この場合、Perl Script の先頭に “# nagios: -epn” を入れることで、組み込みPerl呼び出しを抑止できる。
nagios-plugin の更新の中で、”-epn” が消されたのかな。

