業務用エアコン関連の技術情報、エラーコード、環境問題対策に関する別サイト「エアコンの安全な修理・適切なフロン回収」

openSUSE16.0 : Icinga インストール

Icinga(アイシンガ)は「Nagios」から派生して開発され、CPU、メモリ、ディスク使用量や、Ping、HTTP、DNSなどのネットワークサービスを監視するためのオープンソースのITインフラストラクチャ監視ツールです

今回はopenSUSE16.0にインストールします。

1.前提条件

Icinga2 をインストールするための要件として、LAMP がインストールされている必要があります。またPHP 7.3 以降のバージョンが必要です。
今回は下記が構築されていることを前提とします
MariaDB  11.11.8
PHP    8.4.24
Apache(HTTPD)  2.4.66

2. Icinga2 をインストール

2.1 Icinga GPG署名キーをインポート

# rpm --import https://packages.icinga.com/icinga.key

2.2 Icinga安定パッケージのリポジトリ設定

# zypper ar https://packages.icinga.com/openSUSE/ICINGA-release.repo
# zypper ref

依存関係を満たすには、さらに「server:monitoring」リポジトリを追加する必要があります

# zypper ar https://download.opensuse.org/repositories/server:/monitoring/16.0/server:monitoring.repo

2.3 Icinga2をインストール

# zypper -n install icinga2

設定の検証

# icinga2 daemon -C
--------------------------------------------------------------
[2026-09-02 09:55:42 +0900] information/cli: Finished validating the configuration file(s).

2.4 モニタリングプラグインをインストール

# zypper -n install --recommends monitoring-plugins-all

プラグインは /usr/lib/nagios/plugins/  に保存され、プラグインが正常にインストールされたかどうかは、ディレクトリの内容を一覧

# ls /usr/lib/nagios/plugins/
check_breeze    check_ftp           check_mrtg         check_ping        check_swap
check_by_ssh    check_host          check_mrtgtraf     check_pop         check_tcp
check_clamd     check_hpjd          check_mysql        check_procs       check_time
check_cluster   check_http          check_mysql_query  check_procs_perf  check_udp
check_cups      check_icmp          check_nagios       check_radius      check_ups
check_curl      check_ide_smart     check_nntp         check_real        check_uptime
check_dbi       check_ifoperstatus  check_nntps        check_rpc         check_users
check_dhcp      check_ifstatus      check_nscp_api     check_rsync       check_wave
check_dig       check_imap          check_nt           check_rta_multi   check_zypper
check_disk      check_ircd          check_ntp          check_sensors     negate
check_disk_smb  check_jabber        check_ntp_peer     check_simap       urlize
check_dns       check_ldap          check_ntp_time     check_smtp        utils.pm
check_dummy     check_ldaps         check_nwstat       check_snmp        utils.sh
check_file_age  check_load          check_oracle       check_spop
check_flexlm    check_log           check_overcr       check_ssh
check_fping     check_mailq         check_pgsql        check_ssmtp

2.5 Icinga 2の起動と有効化

# systemctl start icinga2
# systemctl enable --now icinga2
Created symlink '/etc/systemd/system/multi-user.target.wants/icinga2.service' → '/usr/lib/systemd/system/icinga2.service'.

2.6 インストール済みのバージョンを確認

# icinga2 --version

icinga2 - The Icinga 2 network monitoring daemon (version: r2.16.5-1)

Copyright (c) 2012-2026 Icinga GmbH (https://icinga.com/)
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl-3.0.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

System information:
  Platform: openSUSE Leap
  Platform version: 16.0
  Kernel: Linux
  Kernel version: 6.12.0-160000.37-default
  Architecture: x86_64

Build information:
  Compiler: GNU 15.3.0
  Build host: unknown
  OpenSSL version: OpenSSL 3.5.0 8 Apr 2025

Application information:

General paths:
  Config directory: /etc/icinga2
  Data directory: /var/lib/icinga2
  Log directory: /var/log/icinga2
  Cache directory: /var/cache/icinga2
  Spool directory: /var/spool/icinga2
  Run directory: /run/icinga2

Old paths (deprecated):
  Installation root: /usr
  Sysconf directory: /etc
  Run directory (base): /run
  Local state directory: /var

Internal paths:
  Package data directory: /usr/share/icinga2
  State path: /var/lib/icinga2/icinga2.state
  Modified attributes path: /var/lib/icinga2/modified-attributes.conf
  Objects path: /var/cache/icinga2/icinga2.debug
  Vars path: /var/cache/icinga2/icinga2.vars
  PID path: /run/icinga2/icinga2.pid

3. Icinga 2 APIを有効にする

# icinga2 api setup
information/cli: Generating new CA.
information/base: Writing private key to '/var/lib/icinga2/ca//ca.key'.
information/base: Writing X509 certificate to '/var/lib/icinga2/ca//ca.crt'.
information/cli: Generating new CSR in '/var/lib/icinga2/certs//lepard.csr'.
information/base: Writing private key to '/var/lib/icinga2/certs//lepard.key'.
information/base: Writing certificate signing request to '/var/lib/icinga2/certs//lepard.csr'.
information/cli: Signing CSR with CA and writing certificate to '/var/lib/icinga2/certs//lepard.crt'.
information/pki: Writing certificate to file '/var/lib/icinga2/certs//lepard.crt'.
information/cli: Copying CA certificate to '/var/lib/icinga2/certs//ca.crt'.
information/cli: Adding new ApiUser 'root' in '/etc/icinga2/conf.d/api-users.conf'.
information/cli: Reading '/etc/icinga2/icinga2.conf'.
information/cli: Enabling the 'api' feature.
Enabling feature api. Make sure to restart Icinga 2 for these changes to take effect.
information/cli: Updating 'NodeName' constant in '/etc/icinga2/constants.conf'.
information/cli: Created backup file '/etc/icinga2/constants.conf.orig'.
information/cli: Updating 'ZoneName' constant in '/etc/icinga2/constants.conf'.
information/cli: Backup file '/etc/icinga2/constants.conf.orig' already exists. Skipping backup.
Done.

Now restart your Icinga 2 daemon to finish the installation!

Icinga 2デーモンを再起動

#  systemctl restart icinga2

Icinga 2  APIはTCPポート5665で受信しているので、サービスが接続を受け入れているか確認

# ss -tlnp | grep 5665
LISTEN 0      4096               *:5665            *:*    users:(("icinga2",pid=5535,fd=18))

firewalld を運用している場合、ポート5665での着信接続を許可する

# firewall-cmd --permanent --add-port=5665/tcp 
# firewall-cmd --reload

4. MySQL/MariaDB の設定

Icinga2はデータバックエンドとしてIcingaDBを使用しており、IcingaDBにはMySQLまたはMariaDBが必要です。
今回はMariaDB として進めます。
次の2つのデータベースとユーザーを作成する

IcingaDBデータベースとユーザー:

データベース名 : icingadb
ユーザ名 : icingauser
パスワード : ?Ww123456

Icingaweb2データベースとユーザー:

データベース名 : icingaweb2db
ユーザ名 : icingaweb2user
パスワード : ?Yy123456

# mysql -u root -p 

> CREATE DATABASE icingadb;
> CREATE USER 'icingauser'@'localhost' IDENTIFIED BY '?Ww123456';
> GRANT ALL ON icingadb.* TO 'icingauser'@'localhost';

> CREATE DATABASE icingaweb2db;
> CREATE USER 'icingaweb2user'@'localhost' IDENTIFIED BY '?Yy123456';
> GRANT ALL ON icingaweb2db.* TO 'icingaweb2user'@'localhost';

> FLUSH PRIVILEGES;
> exit;

5. IcingaDBとRedisをインストール

IcingaDBは、従来のIDOデータベースモジュールに代わる最新のソリューションです。Icinga2とデータベースバックエンド間の高性能トランスポート層としてRedisを使用しています。
IcingaDBとそのRedisコンポーネントをインストールし、データベーススキーマをインポートします。

# zypper -n install icingadb icingadb-redis

IcingaDB 用の Redis を有効にして起動

# systemctl enable --now icingadb-redis
# systemctl start icingadb-redis

先ほど作成したデータベースに、IcingaDBデータベーススキーマをインポートする

# mysql -u root -p icingadb < /usr/share/icingadb/schema/mysql/schema.sql

IcingaDBの設定を編集して、データベースの認証情報を設定する

# vi /etc/icingadb/config.yml

6行目以降database:項目の内容を次のようにする
database:
  type: mysql
  host: localhost
  port: 3306
  database: icingadb
  user: icingauser
  password: ?Ww123456

Icinga2でIcingaDB機能を有効にし、APIを設定する

# icinga2 feature enable icingadb

変更を適用する

# systemctl enable --now icingadb
# systemctl restart icinga2

6. Icinga Web 2をインストール

Icinga Webは、監視データの表示、設定の管理、アラートの処理を行うためのWebベースのフロントエンドです。IcingaDB WebモジュールとApacheと一緒にインストールしてください。

# zypper -n install icingaweb2 icingadb-web icingacli  php-cli
# a2enmod rewrite
# a2enmod php8.4
# systemctl restart apache2

7. Icinga Web 2セットアップウィザードを実行

7.1 ウェブセットアップウィザード用の認証トークンを生成する

# icingacli setup token create
The newly generated setup token is: 5837bcf3b42f054a

7.2 ブラウザを開き、以下のセットアップウィザードにアクセスする
http://[server IP]/icingaweb2/setup

①作成したトークンを入力して「次へ」をクリック

➁IcingadbがONになっていることを確認し、「次へ」をクリック

➂PHP構成要件画面が表示される
下図のような「PHPモジュールの Imagick がありません」が表示される場合は下記をインストールしてApacheを再起動する

# zypper -n install php8-imagick
# systemctl restart apache2

PHP モジュール、ライブラリ、ディレクトリなどの PHP 前提条件がすべて満たされていることを確認します。すべて問題がなければ、下にスクロールして [次へ] をクリック

④認証タイプを「データベース」にして「次へ」をクリック

⑤データベースリソース
以下の画面が表示されるので、icingaweb2 用のデータベース名、ユーザ名、パスワードを入力する。
確認のため、"設定の検証"をクリック

間違いがなければ下図のように"構成は正常に検証されました。"と表示されので次へをクリック

⑥認証バックエンド
次へをクリック

⑦Icinga Web2用の管理者アカウントの作成
Icinga Web2にアクセスするためのユーザおよびパスワードを設定し「次へ」をクリック
今回はユーザー名をadminとしている

⑧アプリケーション設定
以下の画面が表示される。変更がなければ「次へ」をクリック

⑨設定完了画面
以下の画面が表示される。設定が正しければ「次へ」をクリック

⑩Icinga DB Webの設定
「次へ」をクリック

icinga 用のデータベース名・ユーザ名・パスワードを入力する。入力が終わったら"設定の検証"をクリックして検証する。

間違いがなければ「次へ」をクリック

⑪IcingaDB-Redisの設定
icingadb-redisのセットアップページが表示されます。Redis Hostはlocalhostにして、「次へ」をクリック

⑫Icinga2 APi の設定
Host => localhost
Port => 5665

Api Username  及び Api Passwordは下記ファイル中を確認する

# vi /etc/icinga2/conf.d/api-users.conf

object ApiUser "root" {
    password = "716d105e5610b363"

入力後「次へ」をクリックすると概要ページに入りますので、「完了」をクリック

設定がすべて正常に完了しましたので"Icinga Web 2にログイン"をクリック

icingadbを再起動

# systemctl restart icingadb

⑬IcingaDB-Web ログイン画面
先ほど作成したIcinga Web にログインするためアカウント情報を入力し、ログインする

8. Icinga Directorをインストール

Icinga Directorは、Webベースの設定モジュールであり、設定ファイルを手動で編集する代わりに、Icinga Webインターフェースを通じてホスト、サービス、テンプレートを管理できます

8.1 Directorパッケージをインストール

# zypper ar -r https://packages.icinga.com/opensuse/$releasever/release/ icinga-release
# zypper -n install icinga-director

8.2 Director専用のデータベースを作成
Directorデータベース : directordb
Directorユーザー : directoruser
パスワード : ?Xx123456

# mysql -u root -p

> CREATE DATABASE directordb ;
> CREATE USER 'directoruser'@'localhost' IDENTIFIED BY '?Xx123456';
> GRANT ALL ON directordb.* TO 'directoruser'@'localhost';
> FLUSH PRIVILEGES;
> EXIT;

データベースに、Icingadirectorデータベーススキーマをインポートする

# mysql -u root -p icingadb < /usr/share/icingaweb2/modules/director/schema/mysql.sql

 icinga-director.service を有効化

# systemctl enable icinga-director

8.3 Icinga Web 2画面で設定

Icinga Web 2 にログインする。すると以下のように画面左に「Icinga director」が追加されている。

リソースの登録
画面左ペインの右下の鍵マークをクリックし、「設定」の「アプリケーション」を選択する。

ここで、「リソース一覧」タブをクリックする。

この画面の「新しいリソースの作成 」をクリックする。

「リソースの種類」で “SQL Database” を選択、「リソース名」に “director”、「データベースタイプ」に “MySQL” を指定、「データベース名」、「ユーザ名」、「パスワード」に先ほど director 用に作成したデータベースのものを入力、「文字コード」には “utf8” を指定する。

「設定の検証」をクリックして問題なければ「変更を保存」をクリックする。

リソースが追加されました

「データベースバックエンド」の設定

画面左ペインの「Icinga Director」をクリック

「DB リソース」で “director” を選択

すると次の画面に自動的に切り替わる。

上記画面で「スキーマの作成」をクリックするとしばらく時間が経過したのち以下の「キックスタートウィザード」画面になる。

/etc/hostsファイルの編集

# vi /etc/hosts

下記を追記する
192.168.11.83 lepard ←hostname

キックスタートウィザード画面

エンドポイント名: # hostname で確認
Icinga ホスト : サーバの IP アドレス
API ユーザー , パスワード : icinga api ユーザのユーザ名とパスワード( /etc/icinga2/conf.d/api-users.confで確認)

入力が終わったら「インポートを実行」をクリックする。

9. Icinga Directorで監視サービスの追加

9.1 Service Templateの作成
Icinga Director を使用して、今回はSSH、HTTP、PINGを監視するためのテンプレートを作成します。
「サービス」をクリックし、ページ上の「サービステンプレート」をクリック。

新しいサービステンプレートを作成するには、「追加」ボタンをクリックします。

SSH サービスの監視に関する詳細を入力し、「追加」ボタンをクリック
名前 : Check_ssh
監視コマンド : ssh

同様にPING,HTTPサービスの監視に関する詳細を入力

9.2 サービスセットを作成し、サービステンプレートを追加する
作成したサービステンプレートを1つのサービスセットにまとめます。
「サービス」ページで、「サービスセット」をクリック

「追加」ボタンをクリック

「サービスセット名」と「説明」に独自の名前と内容を入力し、「追加」ボタンをクリック

「basic service Linux」という名前のサービスセットが作成されました。

次に、サービステンプレートを「basic service Linux」サービスセットに追加します。サービスセットの名前をクリックし、右側の画面にある「Services」タブをクリック

「サービスを追加」ボタンをクリック

[Check_ssh]を追加する
「追加」ボタンをクリック

同様に[Check_ping][Check_http]を追加する

最終的に"3 人のメンバー"になっている

9.3 ホストテンプレートを作成し、サービスセットを追加する
Director を通じて Icinga2 に新しいホストを追加するには、ホストテンプレートを作成する必要があります

Icinga Director のメニューで、「ホスト」と「ホストテンプレート」の順にクリック

「追加」ボタンをクリック

「Host template」に関する詳細を、以下のように入力してください。

もう一度「追加」ボタンをクリックすると、「basic Linux」という名前のホストテンプレートが作成されます。

次に、ホストテンプレートに「basic services Linux」という名前のサービスセットを追加します。

ホストテンプレート名をクリックし、右側の画面にある「サービス」タブをクリックします。

「サービスセットを追加」ボタンをクリックします。

「basic service Linux」という名前のサービスセットを選択し、「追加」をクリックします。

サービスセットが追加されたホストテンプレートが作成されました。これで、Icinga2に新しいホストを追加する準備が整いました。

10. Icinga Directorで監視ホストの追加

ホスト名「Lion」(hostname で確認)、IPアドレス「192.168.11.85」を持つopenSUSE16を追加します。

Icinga2のダッシュボードで、「Icinga Director」メニューをクリックし、「ホスト」→[ホスト]をクリック

画面右側の「追加」ボタンをクリックしてください。

「basic Linux」ホストテンプレートを選択し、詳細なホスト設定を入力し、「追加」ボタンをクリック
ホスト名 : Lion
表示名 : Lion
ホストアドレス : 192.168.11.85

左側の「アクティビティログ」メニューをクリック

「xxxxx個の保留された変更を反映」をクリックして設定を適用します。

「Lion」ホストがIcinga2に追加されました。

11. 監視対象サーバー(エージェント)側の設定手順

監視対象サーバーopenSUSE16(IP : 192.168.11.85)で作業する

11.1 Icinga2 をインストール

① Icinga GPG署名キーをインポート

# rpm --import https://packages.icinga.com/icinga.key

➁ Icinga安定パッケージのリポジトリ設定

# zypper ar https://packages.icinga.com/openSUSE/ICINGA-release.repo
# zypper ref

依存関係を満たすには、さらに「server:monitoring」リポジトリを追加する必要があります

# zypper ar https://download.opensuse.org/repositories/server:/monitoring/16.0/server:monitoring.repo

➂ Icinga2をインストール

# zypper -n install icinga2

設定の検証

# icinga2 daemon -C
--------------------------------------------------------------
[2026-09-02 17:34:19 +0900] information/cli: Finished validating the configuration file(s).

④ モニタリングプラグインをインストール

# zypper -n install --recommends monitoring-plugins-all

Icinga 2の起動と有効化

# systemctl start icinga2
# systemctl enable --now icinga2
Created symlink '/etc/systemd/system/multi-user.target.wants/icinga2.service' → '/usr/lib/systemd/system/icinga2.service'.

11.2 hostsファイルの編集

# vi /etc/hosts
192.168.11.83   lepard
192.168.11.85   Lion

11.3 監視ホストの初期化

Hosts Hostsで次に、Lion ホストをクリックし、「エージェント」タブをクリック


もし、「このエージェントのチケットは、デプロイメントエンドポイントから要求されていない可能性があります:Ticket salt is not configured in ApiListener object」
と表示されエラーとなる場合はIcinga2サーバーのconstants.conf に TicketSalt を設定されていませんので、下記の通り設定する

# vi /etc/icinga2/constants.conf

最終行あたり
const TicketSalt = "" となっていれば、任意の複雑なキーを設定する
const TicketSalt = "****************"

/etc/icinga2/features-enabled/api.confの中にticket_salt = TicketSaltが定義されていることを確認する

Icinga 2 サービスを再起動

# icinga2 daemon -C

エラーがなければ再起動
# systemctl restart icinga2

これでエラーが表示されないと思います
次にエージェントの展開用Linuxスクリプトをコピーしてください。

監視対象サーバーでの作業

「deploy-agent.sh」という名前の新しい設定を作成します。そこにエージェントの展開スクリプトを貼り付けてください。

# vi deploy-agent.sh

例として下記のようなもの
#!/bin/bash

# This generates and signs your required certificates. Please do not
# forget to install the Icinga 2 package and your desired monitoring
# plugins first.

# Config from Director
ICINGA2_NODENAME='Lion'
ICINGA2_CA_TICKET='0cf1682f55272481d5634acf9b2b188ecdcebdb5'
ICINGA2_PARENT_ZONE='lepard'
ICINGA2_PARENT_ENDPOINTS=('lepard,lepard')
ICINGA2_CA_NODE='lepard'
ICINGA2_GLOBAL_ZONES=('director-global')

# Internal defaults
: "${ICINGA2_OSFAMILY:=}"
: "${ICINGA2_HOSTNAME:="$(hostname -f)"}"
: "${ICINGA2_NODENAME:="${ICINGA2_HOSTNAME}"}"
: "${ICINGA2_CA_NODE:=}"
: "${ICINGA2_CA_PORT:=5665}"
: "${ICINGA2_CA_TICKET:=}"
: "${ICINGA2_PARENT_ZONE:=master}"
: "${ICINGA2_PARENT_ENDPOINTS:=()}"
: "${ICINGA2_GLOBAL_ZONES:=director-global}"
: "${ICINGA2_DRYRUN:=}"
: "${ICINGA2_UPDATE_CONFIG:=}"

# Helper functions
fail() {
  echo "ERROR: $1" >&2
  exit 1
}

warn() {
  echo "WARNING: $1" >&2
}

info() {
  echo "INFO: $1" >&2
}

check_command() {
  command -v "$@" &>/dev/null
}

install_config() {
  if [ -e "$1" ] && [ ! -e "${1}.orig" ]; then
    info "Creating a backup at ${1}.orig"
    cp "$1" "${1}.orig"
  fi
  echo "Writing config to ${1}"
  echo "$2" > "${1}"
}

[ "$BASH_VERSION" ] || fail "This is a Bash script"

errors=
for key in NODENAME CA_NODE CA_PORT CA_TICKET PARENT_ZONE PARENT_ENDPOINTS; do
  var="ICINGA2_${key}"
  if [ -z "${!var}" ]; then
    warn "The variable $var needs to be configured!"
    errors+=1
  fi
done
[ -z "$errors" ] || exit 1

# Detect osfamily
if [ -n "$ICINGA2_OSFAMILY" ]; then
  info "Assuming supplied osfamily $ICINGA2_OSFAMILY"
elif check_command rpm && ! check_command dpkg; then
  info "This should be a RedHat system"
  if [ -e /etc/sysconfig/icinga2 ]; then
    # shellcheck disable=SC1091
    . /etc/sysconfig/icinga2
  fi
  ICINGA2_OSFAMILY=redhat
elif check_command dpkg; then
  info "This should be a Debian system"
  if [ -e /etc/default/icinga2 ]; then
    # shellcheck disable=SC1091
    . /etc/default/icinga2
  fi
  ICINGA2_OSFAMILY=debian
elif check_command apk; then
  info "This should be a Alpine system"
  if [ -e /etc/icinga2/icinga2.sysconfig ]; then
    # shellcheck disable=SC1091
    . /etc/icinga2/icinga2.sysconfig
  fi
  ICINGA2_OSFAMILY=alpine
else
  fail "Could not determine your os type!"
fi

# internal defaults
: "${ICINGA2_CONFIG_FILE:=/etc/icinga2/icinga2.conf}"
: "${ICINGA2_CONFIGDIR:="$(dirname "$ICINGA2_CONFIG_FILE")"}"
: "${ICINGA2_DATADIR:=/var/lib/icinga2}"
: "${ICINGA2_SSLDIR_OLD:="${ICINGA2_CONFIGDIR}"/pki}"
: "${ICINGA2_SSLDIR_NEW:="${ICINGA2_DATADIR}"/certs}"
: "${ICINGA2_SSLDIR:=}"
: "${ICINGA2_BIN:=icinga2}"

case "$ICINGA2_OSFAMILY" in
debian)
  : "${ICINGA2_USER:=nagios}"
  : "${ICINGA2_GROUP:=nagios}"
  ;;
redhat)
  : "${ICINGA2_USER:=icinga}"
  : "${ICINGA2_GROUP:=icinga}"
  ;;
alpine)
  : "${ICINGA2_USER:=icinga}"
  : "${ICINGA2_GROUP:=icinga}"
  ;;
*)
  fail "Unknown osfamily '$ICINGA2_OSFAMILY'!"
  ;;
esac

icinga_version() {
  "$ICINGA2_BIN" --version 2>/dev/null | grep -oPi '\(version: [rv]?\K\d+\.\d+\.\d+[^\)]*'
}

version() {
   echo "$@" | awk -F. '{ printf("%03d%03d%03d\n", $1,$2,$3); }'
}

# Make sure icinga2 is installed and running
echo -n "check: icinga2 installed - "
if version=$(icinga_version); then
  echo "OK: $version"
else
  fail "You need to install icinga2!"
fi

if [ -z "${ICINGA2_SSLDIR}" ]; then
  if [ -f "${ICINGA2_SSLDIR_OLD}/${ICINGA2_NODENAME}.crt" ]; then
    info "Using old SSL directory: ${ICINGA2_SSLDIR_OLD}"
    info "Because you already have a certificate in ${ICINGA2_SSLDIR_OLD}/${ICINGA2_NODENAME}.crt"
    ICINGA2_SSLDIR="${ICINGA2_SSLDIR_OLD}"
  elif [ $(version $version) -gt $(version 2.8) ]; then
    info "Using new SSL directory: ${ICINGA2_SSLDIR_NEW}"
    ICINGA2_SSLDIR="${ICINGA2_SSLDIR_NEW}"
  else
    info "Using old SSL directory: ${ICINGA2_SSLDIR_OLD}"
    ICINGA2_SSLDIR="${ICINGA2_SSLDIR_OLD}"
  fi
fi

if [ ! -d "$ICINGA2_SSLDIR" ]; then
  mkdir "$ICINGA2_SSLDIR"
  chown "$ICINGA2_USER.$ICINGA2_GROUP" "$ICINGA2_SSLDIR"
fi

if [ -f "${ICINGA2_SSLDIR}/${ICINGA2_NODENAME}.crt" ]; then
  warn "ERROR: a certificate for '${ICINGA2_NODENAME}' already exists"
  warn "Please remove ${ICINGA2_SSLDIR}/${ICINGA2_NODENAME}.??? in case you want a"
  warn "new certificate to be generated and signed by ${ICINGA2_CA_NODE}"

  if [ -z "${ICINGA2_UPDATE_CONFIG}" ] && [ -z "${ICINGA2_DRYRUN}" ]; then
    warn "Aborting here, you can can call the script like this to just update config:"
    info " ICINGA2_UPDATE_CONFIG=1 $0"
    exit 1
  fi
elif [ -z "${ICINGA2_DRYRUN}" ]; then
  if ! "$ICINGA2_BIN" pki new-cert --cn "${ICINGA2_NODENAME}" \
    --cert "${ICINGA2_SSLDIR}/${ICINGA2_NODENAME}.crt" \
    --csr "${ICINGA2_SSLDIR}/${ICINGA2_NODENAME}.csr" \
    --key "${ICINGA2_SSLDIR}/${ICINGA2_NODENAME}.key"
  then fail "Could not create self signed certificate!"
  fi

  if ! "$ICINGA2_BIN" pki save-cert \
    --host "${ICINGA2_CA_NODE}" \
    --port "${ICINGA2_CA_PORT}" \
    --key "${ICINGA2_SSLDIR}/${ICINGA2_NODENAME}.key" \
    --trustedcert "${ICINGA2_SSLDIR}/trusted-master.crt"
  then fail "Could not retrieve trusted certificate from host ${ICINGA2_CA_NODE}"
  fi

  if ! "$ICINGA2_BIN" pki request \
    --host "${ICINGA2_CA_NODE}" \
    --port "${ICINGA2_CA_PORT}" \
    --ticket "${ICINGA2_CA_TICKET}" \
    --key "${ICINGA2_SSLDIR}/${ICINGA2_NODENAME}.key" \
    --cert "${ICINGA2_SSLDIR}/${ICINGA2_NODENAME}.crt" \
    --trustedcert "${ICINGA2_SSLDIR}/trusted-master.crt" \
    --ca "${ICINGA2_SSLDIR}/ca.crt"
  then fail "Could not retrieve final certificate from host ${ICINGA2_CA_NODE}"
  fi
else
  info "Would create certificates under ${ICINGA2_SSLDIR}, but in dry-run!"
fi

# Prepare Config Files
content_config=$(cat << EOF
/** Icinga 2 Config - proposed by Icinga Director */

include "constants.conf"

$([ "${ICINGA2_HOSTNAME}" != "${ICINGA2_NODENAME}" ] || echo '// ')const NodeName = "${ICINGA2_NODENAME}"

include "zones.conf"
include "features-enabled/*.conf"

include <itl>
include <plugins>
include <plugins-contrib>
include <manubulon>
include <windows-plugins>
include <nscp>
EOF
)

endpoint_list=''
for item in "${ICINGA2_PARENT_ENDPOINTS[@]}"; do
  endpoint=$(echo "$item" | cut -d, -f1)
  endpoint_list+="\"${endpoint}\", "
done

content_zones=$(cat << EOF
/** Icinga 2 Config - proposed by Icinga Director */

object Endpoint "${ICINGA2_NODENAME}" {}

object Zone "${ICINGA2_NODENAME}" {
  parent = "${ICINGA2_PARENT_ZONE}"
  endpoints = [ "${ICINGA2_NODENAME}" ]
}

object Zone "${ICINGA2_PARENT_ZONE}" {
  endpoints = [ ${endpoint_list%, } ]
}
EOF
)

for item in "${ICINGA2_PARENT_ENDPOINTS[@]}"; do
  endpoint=$(echo "$item" | cut -d, -f1)
  host=$(echo "$item" | cut -s -d, -f2)

  content_zones+=$(cat << EOF

object Endpoint "${endpoint}" {
$([ -n "$host" ] && echo "  host = \"${host}\"" || echo "  //host = \"${endpoint}\"")
}
EOF
)
done

for zone in "${ICINGA2_GLOBAL_ZONES[@]}"; do
  content_zones+=$(cat << EOF

object Zone "${zone}" {
  global = true
}
EOF
)
done

content_api="/** Icinga 2 Config - proposed by Icinga Director */

object ApiListener \"api\" {"

if [ "${ICINGA2_SSLDIR}" = "${ICINGA2_SSLDIR_OLD}" ]; then
content_api+="
  cert_path = SysconfDir + \"/icinga2/pki/${ICINGA2_NODENAME}.crt\"
  key_path = SysconfDir + \"/icinga2/pki/${ICINGA2_NODENAME}.key\"
  ca_path = SysconfDir + \"/icinga2/pki/ca.crt\"
"
fi
content_api+="
  accept_commands = true
  accept_config = true
}
"

if [ -z "${ICINGA2_DRYRUN}" ]; then
  install_config "$ICINGA2_CONFIGDIR"/icinga2.conf "$content_config"
  install_config "$ICINGA2_CONFIGDIR"/zones.conf "$content_zones"
  install_config "$ICINGA2_CONFIGDIR"/features-available/api.conf "$content_api"

  "$ICINGA2_BIN" feature enable api

  "$ICINGA2_BIN" daemon -C

  echo "Please restart icinga2:"
  case "$ICINGA2_OSFAMILY" in
  debian)
    echo "  systemctl restart icinga2"
    ;;
  redhat)
    echo "  systemctl restart icinga2"
    ;;
  alpine)
    echo "  rc-service icinga2 restart"
    ;;
  *)
    fail "Unknown osfamily '$ICINGA2_OSFAMILY'!"
    ;;
  esac
else
  output_code() {
    sed 's/^/    /m' <<<"$1"
  }
  echo "### $ICINGA2_CONFIGDIR"/icinga2.conf
  echo
  output_code "$content_config"
  echo
  echo "### $ICINGA2_CONFIGDIR"/zones.conf
  echo
  output_code "$content_zones"
  echo
  echo "### $ICINGA2_CONFIGDIR"/features-available/api.conf
  echo
  output_code "$content_api"
fi

スクリプトに実行権限を設定して、実行してください。
※ 事前にIcingaサーバー側で5665ポートを開放していることを確認する

# chmod +x deploy-agent.sh
# ./deploy-agent.sh

INFO: This should be a RedHat system
check: icinga2 installed - OK: 2.16.5-1
INFO: Using new SSL directory: /var/lib/icinga2/certs
information/base: Writing private key to '/var/lib/icinga2/certs/Lion.key'.
information/base: Writing X509 certificate to '/var/lib/icinga2/certs/Lion.crt'.
information/base: Writing certificate signing request to '/var/lib/icinga2/certs/Lion.csr'.
information/cli: Retrieving TLS certificate for 'lepard:5665'.

 Version:             3
 Subject:             CN = lepard
 Issuer:              CN = Icinga CA
 Valid From:          Sep  2 03:58:50 2026 GMT
 Valid Until:         Oct  4 03:58:50 2027 GMT
 Serial:              07278DB03F3C9EA73C2061036EFDCA6AB5664F45

 Signature Algorithm: sha256WithRSAEncryption
 Subject Alt Names:   lepard
 Fingerprint:         A1 E4 2C 9E 2B DF 55 FD FB 7F 7A 7D 01 02 5F 73 53 9F 99 B7 D8 B9 43 E7 C3 3B 17 74 13 AA 55 57

***
*** You have to ensure that this certificate actually matches the parent
*** instance's certificate in order to avoid man-in-the-middle attacks.
***

information/pki: Writing certificate to file '/var/lib/icinga2/certs/trusted-master.crt'.
information/cli: Writing CA certificate to file '/var/lib/icinga2/certs/ca.crt'.
information/cli: Writing signed certificate to file '/var/lib/icinga2/certs/Lion.crt'.
INFO: Creating a backup at /etc/icinga2/icinga2.conf.orig
Writing config to /etc/icinga2/icinga2.conf
INFO: Creating a backup at /etc/icinga2/zones.conf.orig
Writing config to /etc/icinga2/zones.conf
INFO: Creating a backup at /etc/icinga2/features-available/api.conf.orig
Writing config to /etc/icinga2/features-available/api.conf
Enabling feature api. Make sure to restart Icinga 2 for these changes to take effect.
[2026-09-02 17:48:08 +0900] information/cli: Icinga application loader (version: r2.16.5-1)
[2026-09-02 17:48:08 +0900] information/cli: Loading configuration file(s).
[2026-09-02 17:48:08 +0900] information/ConfigItem: Committing config item(s).
[2026-09-02 17:48:08 +0900] information/ApiListener: My API identity: Lion
[2026-09-02 17:48:08 +0900] warning/ApiListener: Security notice:
    Currently, all ApiUsers are allowed to use Icinga 2 DSL filter expressions
    in API queries because enforce_filter_expression_permission is set to false.
    This can pose a security risk as filters are evaluated within the Icinga 2
    process and their complexity can be used for denial of service attacks. The
    new 'filter-expression' permission can be used to allow this for individual
    ApiUsers, which should only be granted to trusted users. It is recommended
    to set enforce_filter_expression_permission to true to enforce the
    permission. This will become the default in v2.17.
[2026-09-02 17:48:08 +0900] information/ConfigItem: Instantiated 1 CheckerComponent.
[2026-09-02 17:48:08 +0900] information/ConfigItem: Instantiated 3 Zones.
[2026-09-02 17:48:08 +0900] information/ConfigItem: Instantiated 1 IcingaApplication.
[2026-09-02 17:48:08 +0900] information/ConfigItem: Instantiated 1 FileLogger.
[2026-09-02 17:48:08 +0900] information/ConfigItem: Instantiated 2 Endpoints.
[2026-09-02 17:48:08 +0900] information/ConfigItem: Instantiated 1 ApiListener.
[2026-09-02 17:48:08 +0900] information/ConfigItem: Instantiated 250 CheckCommands.
[2026-09-02 17:48:08 +0900] information/ConfigItem: Instantiated 1 NotificationComponent.
[2026-09-02 17:48:08 +0900] information/ScriptGlobal: Dumping variables to file '/var/cache/icinga2/icinga2.vars'
[2026-09-02 17:48:08 +0900] information/cli: Finished validating the configuration file(s).
Please restart icinga2:
  systemctl restart icinga2

Icingaを再起動

# systemctl restart icinga2

12. Icingaweb2画面で確認

Icinga2 Dashboard メニューの, 「概要 」「ホスト」 をクリックするとIcinga2サーバーと「Lion」という2つのホストが表示され、クライアントが起動して実行されていることが確認できます。

「Lion」サーバーをクリックして詳細を表示
Lion ホストの監視対象サービスを確認するには、「サービス」タブをクリックしてください。

SSH,PING,HTTPサービスが監視されています

WordPressが利用できる代表的なレンタルサーバー