Ubuntu 16.04へのIcinga2監視ツールのインストールと設定

**Ubuntu** 16.04に**Icinga2**監視ツールをインストールして設定する方法を探り、また**Alibaba Cloud**に**Docker**をインストールして、いくつかの重要なDockについて学んでいきます。

*本ブログは英語版からの翻訳です。オリジナルは[こちら](https://www.alibabacloud.com/blog/how-to-install-and-configure-icinga2-monitoring-tool-on-ubuntu-16-04_495269)からご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。*

###序章
Icinga 2 はフリーでオープンソースの強力なネットワークリソース監視ソフトウェアアプリケーションで、ネットワークからのリソースの可用性をチェックし、停止をユーザーに通知し、レポート用のパフォーマンスデータを生成します。Icinga 2を使用して、ネットワークサービス（SMTP、POP3、HTTP、NNTP、ping）、ホストリソース（CPU負荷、ディスク使用量）、ネットワークコンポーネント（スイッチ、ルーター、温度・湿度センサー）を監視することができます。これはNagiosシステム監視アプリケーションに非常に似ています。Icinga 2をNagiosプラグインと簡単に統合することができます。Icinga 2には、複数の場所にまたがる大規模で複雑な環境を監視するための、美しくユーザーフレンドリーなウェブインターフェースが付属しています。

Icinga 2には様々な機能が搭載されていますが、以下にその一部をご紹介します。

- GraphiteとInfluxDBをネイティブにサポートしています。
- 問題が発生した場合、電子メールやテキストメッセージで通知を送信します。
- カスタマイズ可能なプラグインにより、独自のサービスチェックを簡単に開発することができます。
- ホストとサービスの状態、ネットワークマップ、レポート、ログなどを可視化するためのIcinga Classic UIとIcinga Webインターフェイスを提供します。
- パフォーマンスグラフ化のためのPNP4Nagios、NagiosGrapher、InGraphなどの追加アドオンをサポートします。

このチュートリアルでは、Ubuntu 16.04サーバにIcinga 2とIcinga web 2をインストールして設定する方法を学びます。また、リモートホストサービスを監視するためにicinga2を設定する方法も学びます。

###前提条件
- Alibaba Cloud Instance for Icinga ServerとUbuntu 16.04がインストールされています。
- Alibaba Cloud Instance for Icinga Client with Ubuntu 16.04がインストールされています。
- 静的IPアドレス192.168.0.103がIcinga Server Instanceに設定されています。
- 静的IPアドレス192.168.0.104がIcingaクライアントインスタンスに設定されています。
- ドメイン名に適切なDNSレコードが設定されています。
- SSHサービス経由でルートアカウントにアクセスできます。

###はじめに
始める前に、以下のコマンドでシステムリポジトリとソフトウェアパッケージを最新バージョンに更新してください。

```
apt-get update -y
apt-get upgrade -y
```

次に、システムのホスト名を設定する必要があります。これは以下のコマンドで行うことができます。

```
hostnamectl set-hostname icingaserver
```

次に、以下のコマンドでシステムのホスト名を確認します。

```
hostnamectl
```

次に、サーバーインスタンスを再起動して、以下のコマンドですべてのアップデートを適用します。

```
reboot
```

###必要なパッケージのインストール
Icinga 2はウェブサーバー上で動作するので、Apacheサーバー、MariaDB、PHP言語、必要なPHPモジュールをシステムにインストールする必要があります。以下のコマンドを実行するだけで、すべてのパッケージをインストールすることができます。

```
apt-get install apache2 libapache2-mod-php7.0 mariadb-server mariadb-client php7.0 php7.0-xml php7.0-pgsql php7.0-opcache php7.0-xml php7.0-ldap php7.0-cli php7.0-gd php7.0-intl php7.0-readline php7.0-mbstring php7.0-json php7.0-curl php7.0-mysql -y
```

必要なパッケージがすべてインストールされたら、以下のコマンドを使ってApacheとMariaDBサービスを起動し、起動時に起動できるようにします。

```
systemctl start apache2
systemctl enable apache2
systemctl start mysql
systemctl enable mysql
```

次に、以下のコマンドを使用して、Apache rewrite モジュールを有効にして、HTTP 接続を HTTPS にリダイレクトします。

```
a2enmod rewrite
```

次に、システムの地理的な位置と一致するタイムゾーンを設定する必要があります。これはphp.iniファイルを編集することによって行うことができます。

```
nano /etc/php/7.0/apache2/php.ini
```

次の行を変更します。

```
date.timezone = Asia/Kolkata
```

保存して終了したらファイルを閉じ、Apache サービスを再起動して変更を適用します。

```
systemctl restart apache2
```

###Icinga2とIcinga Web 2のインストール
デフォルトでは、Ubuntu 16.04のデフォルトリポジトリでは、最新版のIcingaは利用できません。そのため、Icinga用のソフトウェアリポジトリを追加する必要があります。

まず、以下のコマンドでIcingaのパッケージ署名キーをダウンロードして追加します。

```
curl -sSL https://packages.icinga.com/icinga.key | sudo apt-key add -
```

次に、APT設定ファイルにIcingaリポジトリを追加します。

```
nano /etc/apt/sources.list.d/icinga.list
```

ファイルの最後に以下の行を追加します。

```
deb https://packages.icinga.com/ubuntu icinga-xenial main
```

保存してファイルを閉じ、以下のコマンドでリポジトリを更新します。

```
apt-get update -y
```

リポジトリが更新されたら、以下のコマンドでIcinga2とIcinga web 2をインストールします。

```
apt-get install icinga2 icingaweb2 icinga2-ido-mysql -y
```

インストール中に、アプリケーションを設定するための一連の質問を受けます。以下に示すように、それぞれの質問に答えてください。

```
Enable Icinga 2's ido-mysql feature? YES
Configure database for icinga2-ido-mysql with dbconfig-common? NO
```

次に、Icinga 2のido-mysqlとコマンド機能を有効にする必要があります。これは以下のコマンドを使って行うことができます。

```
icinga2 feature enable ido-mysql
icinga2 feature enable command
```

最後に、以下のコマンドでIcinga2サービスを再起動し、起動時に起動できるようにします。

```
systemctl restart icinga2
systemctl enable icinga2
```

###データベースの設定
開始前に、MariaDB データベースのセキュリティを確保する必要があります。これは、mysql_secure_installationスクリプトを実行することで行うことができます。

```
mysql_secure_installation
```

このスクリプトは、以下のようにMySQLのルートパスワードの変更、匿名ユーザーの削除、リモートルートログインの無効化、テストデータベースの削除を行います。

```
Change the root password? [Y/n] n
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y
```

MariaDBのセキュリティが確保されたら、MariaDBシェルにログインし、以下のコマンドでIcinga2 IDO用の強力なパスワードを持つデータベース、データベースユーザーを作成します。

```
mysql -u root -p

MariaDB [(none)]> CREATE DATABASE icinga2;
MariaDB [(none)]> GRANT ALL PRIVILEGES on icinga2.* to 'icinga2'@'localhost' identified by 'strongpassword';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit;
```

次に、データベース、Icinga web 2用の強力なパスワードを持つデータベースユーザーを作成する必要があります。 これは、以下のコマンドを使用して行うことができます。

```
MariaDB [(none)]> CREATE DATABASE icingaweb2db;
MariaDB [(none)]> GRANT ALL PRIVILEGES on icingaweb2db.* to 'icingaweb2'@'localhost' identified by 'strongpassword';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit;
```

次に、Icinga2 IDOスキーマをIcinga2データベースにインポートする必要があります。これは以下のコマンドを使用して行うことができます。

```
mysql -u root icinga2 -p < /usr/share/icinga2-ido-mysql/schema/mysql.sql
```

次に、Icinga2 MySQL IDO設定ファイルを編集して、データベースの資格情報を手動で更新する必要があります。これは、/etc/icinga2/features-enabled/ido-mysql.confファイルを編集することで行うことができます。

```
nano /etc/icinga2/features-enabled/ido-mysql.conf
```

以下のようにファイルを変更します。

```
user = "icinga2",
password = "strongpassword",
host = "localhost",
database = "icinga2"
```

ファイルを保存して閉じ、変更を適用するためにIcinga2サービスを再起動します。

```
systemctl restart icinga2
```

###ファイアウォールを介してIcinga2を許可する
デフォルトでは、新しくインストールされたUbuntu 16.04サーバインスタンスでは、UFWファイアウォールは無効になっています。UFWファイアウォールを有効にするには、以下のコマンドを使用します。

```
ufw enable 
```

次に、以下のコマンドでApacheのポート80、443、5665を許可します。

```
ufw allow 80
ufw allow 443
ufw allow 5665
ufw reload
```

###Webインタフェースを使ってIcinga2を設定する
Icinga Web 2は、インフラストラクチャの問題を監視したり、ホストやサービスの健全性を確認したりするために使用できるIcinga 2のWebインターフェースです。

Icinga Web 2 インターフェイスにアクセスする前に、ウェブセットアップツールの使用を許可するセットアップトークンを作成する必要があります。これは以下のコマンドで作成できます。

```
icingacli setup token create
```

以下のような出力が表示されるはずです。

```
The newly generated setup token is: 4630c2921fca4da8
```

上記のトークンをコピーし、ウェブブラウザを開いてURL [http://your-domain.com/icingaweb2](http://ww38.your-domain.com/icingaweb2?spm=a2c65.11461447.0.0.1c103a5bMjWFvt) または http://your-server-ip/icingaweb2 を入力すると、以下のようなIcinga web 2のセットアップウィザードにリダイレクトされます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/4b17d2f3-ee4f-14d3-d31c-3a7b2a4b69de.png)

さて、先ほどコピーしたトークンをSetup Tokenフィールドに貼り付け、Nextボタンをクリックして処理を開始します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/1c2f7fbd-c18d-c88c-baa0-0341750c9695.png)

ここでは、有効にしたいモジュールを選択する必要があります。DocとMonitoringモジュールを有効にして、次へボタンをクリックすると、次のようなページが表示されるはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/f9352385-28ef-be22-39ad-ea8995ae8fd6.png)

ここで、Icinga2はあなたのシステム要件をチェックします。必要なPHPモジュールがすべてインストールされていることを確認し、「次へ」ボタンをクリックすると、次のようなページが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/e581edcc-78da-a938-2d0e-15a4ff2829f5.png)

ここでは、Icinga webにアクセスするための認証メカニズムを選択する必要があります。 Authentication Type = Databaseを選択し、Nextボタンをクリックすると、以下のようなページが表示されるはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/9a213b7a-8a63-cd5c-e103-d18f19964f02.png)

ここでは、Icinga web 2のデータベース認証情報を入力して、データベース名、ユーザー名、パスワードを入力し、次へボタンをクリックすると、次のページが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/34d360db-3189-205f-c8a1-5995b66b06e8.png)

次に、データベース認証の名前を定義して「次へ」ボタンをクリックすると、以下のようなページが表示されるはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/1c34f4ae-8b7d-cf55-e23b-0dc8bf9a738d.png)

ここで、管理者アカウントのクレデンシャルを入力して、Icinga2のWebインターフェースにログインし、「次へ」ボタンをクリックすると、次のようなページが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/723ecfb1-4777-74f5-112b-d49ee602f254.png)

ここで、Icinga2のアプリケーションとログ情報を提供し、次へボタンをクリックすると、次のページが表示されるはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/1017d6e7-605d-db8c-8462-b81b3ff374be.png)

さて、すべての設定を確認して「次へ」ボタンをクリックすると、次のようなページが表示されるはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/68d2854c-9330-311c-9e1f-e040d6e4178c.png)

ここで、[次へ]ボタンをクリックして設定処理を開始します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/8512ca8e-acf2-1565-b211-8a4993b4e874.png)

ここでは、Icinga web 2 Backendの名前とBackendの種類を入力し、Nextボタンをクリックすると、次のようなページが表示されるはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/e9537d85-9c52-bd28-c983-3d69cfb48d82.png)

ここで、Icinga2 IDOデータベースの認証情報を入力し、「次へ」ボタンをクリックすると、次のようなページが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/78bb08a3-521a-4e63-4172-e2e14360de2c.png)

[次へ]ボタンをクリックして、セットアッププロセスを続行します。次のようなページが表示されるはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/3cab97bb-c4d7-8c90-b23f-e64efe33e13b.png)


ここでは、Icinga2が提供するデフォルト値のままで、次へボタンをクリックすると、以下のようなページが表示されるはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/cb2c5419-d568-cd1d-e81f-380561329103.png)

ここで、これまでに行ったすべての設定を確認し、「完了」ボタンをクリックしてインストールを完了させます。インストールが正常に設定されると、以下のページが表示されるはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/a77a5411-32f5-2774-7ea4-2a5fe5f42100.png)

ここで、「Login to icinga web 2」ボタンをクリックすると、以下のようなページが表示されるはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/9bbbacc1-13e9-494c-6ec7-1e5282087af2.png)


ここで、以前に作成した管理者アカウントの認証情報を入力し、ログインボタンをクリックすると、以下のようなIcinga web 2のダッシュボードが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/5d53bd80-0d14-8376-ab74-f3c348005177.png)

###リモートホストの監視のためにIcinga2マスターノードを設定する
これでIcinga web 2の設定が完了したので、Icinga2サーバーノードを設定して監視用のマスターにしましょう。これは以下のコマンドを実行することで行うことができます。

```
icinga2 node wizard
```

セットアップの過程で、いくつかの質問がありますので、以下に示すようにすべての質問に答えてください。

```
Welcome to the Icinga 2 Setup Wizard!

We'll guide you through all required configuration details.

Please specify if this is a satellite setup ('n' installs a master setup) [Y/n]: n
Starting the Master setup routine...
Please specify the common name (CN) [icingaserver]: 
Checking for existing certificates for common name 'icingaserver'...
Certificates not yet generated. Running 'api setup' now.
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 '/etc/icinga2/pki/icingaserver.csr'.
information/base: Writing private key to '/etc/icinga2/pki/icingaserver.key'.
information/base: Writing certificate signing request to '/etc/icinga2/pki/icingaserver.csr'.
information/cli: Signing CSR with CA and writing certificate to '/etc/icinga2/pki/icingaserver.crt'.
information/pki: Writing certificate to file '/etc/icinga2/pki/icingaserver.crt'.
information/cli: Copying CA certificate to '/etc/icinga2/pki/ca.crt'.
Generating master configuration for Icinga 2.
information/cli: Adding new ApiUser 'root' in '/etc/icinga2/conf.d/api-users.conf'.
information/cli: Enabling the 'api' feature.
Enabling feature api. Make sure to restart Icinga 2 for these changes to take effect.
information/cli: Dumping config items to file '/etc/icinga2/zones.conf'.
information/cli: Created backup file '/etc/icinga2/zones.conf.orig'.
Please specify the API bind host/port (optional):
Bind Host []: 
Bind Port []: 
information/cli: Created backup file '/etc/icinga2/features-available/api.conf.orig'.
information/cli: Updating constants.conf.
information/cli: Created backup file '/etc/icinga2/constants.conf.orig'.
information/cli: Updating constants file '/etc/icinga2/constants.conf'.
information/cli: Updating constants file '/etc/icinga2/constants.conf'.
information/cli: Updating constants file '/etc/icinga2/constants.conf'.
Done.

Now restart your Icinga 2 daemon to finish the installation!
```

次に、Icinga2サービスを再起動し、マスターノードの設定を適用します。

```
systemctl icinga2 restart
```

次に、Icinga 2マスターノードもクライアントから有効なチケットが必要なので、Icinga 2クライアントノード用のチケットを生成する必要があります。

以下のコマンドを使って同じものを生成します。

```
icinga2 pki ticket --cn 'icingaclient'
```

以下のような出力が表示されるはずです。

```
582f9fda5c5823440e63ea0f083d105b81237b37
```

###監視用のリモートクライアントノードを設定する
始める前に、クライアントノードにIcinga 2とNagiosプラグインをインストールする必要があります。まず、以下のコマンドを使ってIcingaパッケージ署名キーをダウンロードして追加します。

```
curl -sSL https://packages.icinga.com/icinga.key | sudo apt-key add -
```

次に、APT設定ファイルにIcingaリポジトリを追加します。

```
nano /etc/apt/sources.list
```

ファイルの最後に以下の行を追加します。

```
deb https://packages.icinga.com/ubuntu icinga-xenial main
```

保存してファイルを閉じ、以下のコマンドでリポジトリを更新します。

```
apt-get update -y
```

リポジトリが更新されたら、以下のコマンドでIcinga2とNagiosプラグインをインストールします。

```
apt-get install icinga2 nagios-plugins -y
```

次に、以下のコマンドでIcinga 2サービスを起動し、起動時に起動できるようにします。

```
systemctl start icinga2
systemctl enable icinga2
```

次に、以下のようにクライアントノード上でIcinga 2ノードウィザードを実行します。

```
icinga2 node wizard
```

以下のように、すべての質問に答えてください。

```
Welcome to the Icinga 2 Setup Wizard!

We will guide you through all required configuration details.

Please specify if this is a satellite/client setup ('n' installs a master setup) [Y/n]: Y

Starting the Client/Satellite setup routine...

Please specify the common name (CN) [icingaclient]: 

Please specify the parent endpoint(s) (master or satellite) where this node should connect to:
Master/Satellite Common Name (CN from your master/satellite node): icingaserver

Do you want to establish a connection to the parent node from this node? [Y/n]: Y
Please specify the master/satellite connection information:
Master/Satellite endpoint host (IP address or FQDN): 192.168.0.103
Master/Satellite endpoint port [5665]: 5665

Add more master/satellite endpoints? [y/N]: N
Parent certificate information:

 Subject:     CN = icingaserver
 Issuer:      CN = Icinga CA
 Valid From:  Dec 29 15:13:35 2017 GMT
 Valid Until: Dec 25 15:13:35 2032 GMT
 Fingerprint: 53 5A BC BE 57 D3 1B F7 D0 A4 D7 F2 F4 2A 44 2F 64 53 D7 A0 

Is this information correct? [y/N]: y

Please specify the request ticket generated on your Icinga 2 master (optional).
 (Hint: # icinga2 pki ticket --cn 'icingaclient'): 582f9fda5c5823440e63ea0f083d105b81237b37

Please specify the API bind host/port (optional):
Bind Host []: 
Bind Port []: 

Accept config from parent node? [y/N]: y
Accept commands from parent node? [y/N]: y

Reconfiguring Icinga...
Disabling feature notification. Make sure to restart Icinga 2 for these changes to take effect.
Enabling feature api. Make sure to restart Icinga 2 for these changes to take effect.

Done.

Now restart your Icinga 2 daemon to finish the installation!
```

ここで、すべての設定を適用するために、Icinga2サーバーを再起動します。

```
systemctl restart icinga2
```

これで、Icinga 2のマスターノードとクライアントノードが接続されました。また、監視したいクライアントを定義するために、Icinga 2のマスターノードにゾーンファイルを設定する必要があります。

マスターノードに戻り、ゾーンディレクトリを作成します。

```
nano mkdir /etc/icinga2/zones.d/icingaclient
```

次に、以下のコマンドでサービスファイルとホストファイルを作成します。

```
nano /etc/icinga2/zones.d/icingaclient/service.conf
```

以下の行を追加します。

```
apply Service "load" {
  import "generic-service"
  check_command = "load"
  command_endpoint = host.vars.client_endpoint
  assign where host.vars.client_endpoint
}

apply Service "procs" {
  import "generic-service"
  check_command = "procs"
  command_endpoint = host.vars.client_endpoint
  assign where host.vars.client_endpoint
}
```

保存してからホストファイルを作成します。

```
nano /etc/icinga2/zones.d/icingaclient/icingaclient.conf
```

以下の行を追加します。

```
object Zone "icingaclient" {
  endpoints = [ "icingaclient" ]
  parent = "icingaserver"
}

object Endpoint "icingaclient" {
  host = "192.168.0.104"
}

object Host "icingaclient" {
  import "generic-host"
  address = "192.168.0.104"
  vars.os = "Linux"
  vars.notification["mail"] = {
    groups = [ "icingaadmins" ]
  }
  vars.client_endpoint = name
}
```

ホスト名とIPアドレスがクライアントノードと一致していることを確認してください。ファイルを保存し、以下のコマンドでIcinga 2サービスを再起動します。

```
systemctl restart icinga2
```

ここで、Icinga web 2のインターフェイスを開き、Overview > Hostsタブをクリックすると、新しく追加されたクライアントノードが表示されるはずです。

###結論
おめでとうございます！これで、Ubuntu 16.04サーバーにIcinga2サーバーとIcinga web 2をインストールして設定することができました。これで、IcingaのWebインターフェースを使って、中央の場所から簡単にインフラ全体を監視することができます。詳細については、[https://www.icinga.com/docs/](https://icinga.com/docs/?spm=a2c65.11461447.0.0.1c103a5bHwxiFL) の Icinga ドキュメントページを参照してください。

*アリババクラウドは日本に２つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
[アリババクラウドジャパン公式ページ](https://www.alibabacloud.com/ja)*