さよならNagios、こんにちはIcinga2:監視システムのアップグレードが「苦行」ではなくなる

Monitoring tutorial - IT technology blog
Monitoring tutorial - IT technology blog

Nagiosの「構文エラー修正」で徹夜する日々の終わり

Nagiosで50台のサーバークラスターを管理するのは、かなり「しんどい」経験でした。サービスを追加したり、アラートのしきい値を変更したりするたびに、手が震える思いでした。駆け出しの頃、バラバラになった大量の .cfg ファイルを必死に探っていたのを覚えています。セミコロンが一つ抜けているだけでエンジン全体が止まってしまい、監視システムが数分間「盲目」になる。その間、上司が後ろに立っている……あの感覚は本当に心地よいものではありませんでした。

Nagios is a monument, but it has started to show its limits. Old-school Web 1.0 interface, single-threaded engine that slows down as checks increase. Especially, the philosophy of managing via flat files is extremely difficult to scale as the system grows. That is why I chose Icinga2. It maintains Nagios’s strengths (plugin compatibility) while incorporating cloud-era thinking.

なぜモダンなインフラにおいてNagiosは力不足なのか?

問題は監視能力そのものではなく、運用の仕方にあります。インフラが100ノードを超えると, Nagiosには3つの大きな壁が立ちはだかります:

  • 重複する設定: 柔軟な継承(inheritance)メカニズムが不足しています。同じような設定コードを延々とコピペすることに嫌気がさすでしょう。
  • 自動化の欠如: CI/CDが当たり前の時代に、強力なREST APIがないNagiosは、まるで孤立した「陸の孤島」のようです。
  • ボトルネック: 古いエンジンでは、1分間に5000回以上のチェックをこなしつつ、200ms以下の低遅延を維持するのは困難です。

既存のスクリプトを活用しつつ、モダンなダッシュボードを備えたソリューションが必要です。Icinga2は、「Configuration as Code(コードとしての設定)」という非常にプロフェッショナルな手法で、このギャップを埋めてくれます。

UbuntuでのIcinga2構築:スムーズな導入手順

Icingaのコミュニティが活発なUbuntu Serverをよく使います。セットアップは大きく分けて、エンジン、データベース、Icinga Web 2の3ステップです。

1. Icinga2エンジンのインストール

まず、公式リポジトリを追加します。細かなバグを避けるため、Ubuntuのデフォルトリポジトリにある古いバージョンは使わないようにしましょう:

apt update && apt install -y apt-transport-https wget gnupg
wget -O - https://packages.icinga.com/icinga.key | apt-key add -
. /etc/os-release; if [ ! -z "$UBUNTU_CODENAME" ]; then DIST="$UBUNTU_CODENAME"; else DIST="$VERSION_CODENAME"; fi
echo "deb https://packages.icinga.com/ubuntu icinga-${DIST} main" > /etc/apt/sources.list.d/icinga.list

apt update
apt install -y icinga2

2. データベース設定 (IDOモジュール)

Web UIにデータを表示させるには、ストレージが必要です。安定性の面からMariaDBが第一候補となります:

apt install -y mariadb-server icinga2-ido-mysql

# データベース作成と権限付与
mysql -u root -p -e "CREATE DATABASE icinga2; GRANT ALL PRIVILEGES ON icinga2.* TO 'icinga2'@'localhost' IDENTIFIED BY 'your_password_here';"

Icinga2がMySQLにデータを転送し始めるように、IDO機能を有効にします:

icinga2 feature enable ido-mysql
systemctl restart icinga2

3. Icinga Web 2のインストール

Icinga2のインターフェースは、前身から飛躍的な進化を遂げました。クリーンでモダン、かつユーザーごとの詳細な権限設定をサポートしています。

apt install -y icingaweb2 icingacli

# ブラウザでセットアップするためのトークンを生成
icingacli setup token create

表示されたトークンをコピーし、http://your-ip/icingaweb2/setup にアクセスします。ウィザードに従いDB情報を入力するだけで、システムが正常稼働(オールグリーン)します。

設定のコツ:単純作業の繰り返しは卒業しよう

Icinga2の最大の利点は、Templates(テンプレート)と Apply Rules(適用ルール)です。100台のサーバーに対して100個のファイルを作成する代わりに、ルールを定義するだけで済みます。

例えば、「web」というラベルがついたすべてのサーバーに対して、自動的にHTTPチェックを行いたい場合、ルールは以下のようになります:

# ファイル: /etc/icinga2/conf.d/services.conf

apply Service "http" {
  import "generic-service"
  check_command = "http"
  assign where host.vars.http_check == true
}

新しいホストを追加する際は、簡単な変数を設定するだけです。すべてが自動的に有効になり、非常に楽です:

object Host "web-server-01" {
  import "generic-host"
  address = "192.168.1.10"
  vars.http_check = true
}

コラム: 私のシステムでは、メトリクス収集にPrometheus + Grafanaを使用しています。しかし、伝統的な死活監視やPython/Bashスクリプトによるログ読み取りに関しては、依然としてIcinga2が「最強」です。Nagiosに比べて設定時間を90%削減できました。

柔軟な通知:スマホが鳴れば即座にエラーを把握

メール通知はもう時代遅れです。Icinga2では、Telegramにアラートを飛ばすスクリプトを連携させています。サーバーに障害が発生すると、詳細なエラー情報とともにスマホに即座に通知が届きます。技術チームはメールを常にチェックしなくても、数秒以内に対応を開始できます。

notifications.conf ファイルで、不要な通知(フラッピング)を簡単にフィルタリングすることも可能です。当番の時間帯に合わせたカスタマイズができるのも、週末にぐっすり眠るための大きなメリットです。

おわりに

乱雑な設定ファイルや数十年前のUIに疲れているなら、ぜひIcinga2を試してみてください。既存のスクリプトをすべて作り直す必要はありません。ただ、インフラ運用をよりスムーズにするための「ジェットエンジン」を手に入れるだけです。

どのツールを使うかよりも、システムを深く理解することの方が重要です。しかし、Icinga2を使えば、少なくともつまらない構文エラーに悩まされることは減るでしょう。その時間をシステムの最適化や、あるいは友人とカフェに行く時間にあててください。

Share: