Ubuntu 16.04にIcinga2監視ツールをインストールして設定する方法を探り、またAlibaba CloudにDockerをインストールして、いくつかの重要なDockについて学んでいきます。
本ブログは英語版からの翻訳です。オリジナルはこちらからご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。
###序章
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://your-server-ip/icingaweb2 を入力すると、以下のようなIcinga web 2のセットアップウィザードにリダイレクトされます。
さて、先ほどコピーしたトークンをSetup Tokenフィールドに貼り付け、Nextボタンをクリックして処理を開始します。
ここでは、有効にしたいモジュールを選択する必要があります。DocとMonitoringモジュールを有効にして、次へボタンをクリックすると、次のようなページが表示されるはずです。
ここで、Icinga2はあなたのシステム要件をチェックします。必要なPHPモジュールがすべてインストールされていることを確認し、「次へ」ボタンをクリックすると、次のようなページが表示されます。
ここでは、Icinga webにアクセスするための認証メカニズムを選択する必要があります。 Authentication Type = Databaseを選択し、Nextボタンをクリックすると、以下のようなページが表示されるはずです。
ここでは、Icinga web 2のデータベース認証情報を入力して、データベース名、ユーザー名、パスワードを入力し、次へボタンをクリックすると、次のページが表示されます。
次に、データベース認証の名前を定義して「次へ」ボタンをクリックすると、以下のようなページが表示されるはずです。
ここで、管理者アカウントのクレデンシャルを入力して、Icinga2のWebインターフェースにログインし、「次へ」ボタンをクリックすると、次のようなページが表示されます。
ここで、Icinga2のアプリケーションとログ情報を提供し、次へボタンをクリックすると、次のページが表示されるはずです。
さて、すべての設定を確認して「次へ」ボタンをクリックすると、次のようなページが表示されるはずです。
ここで、[次へ]ボタンをクリックして設定処理を開始します。
ここでは、Icinga web 2 Backendの名前とBackendの種類を入力し、Nextボタンをクリックすると、次のようなページが表示されるはずです。
ここで、Icinga2 IDOデータベースの認証情報を入力し、「次へ」ボタンをクリックすると、次のようなページが表示されます。
[次へ]ボタンをクリックして、セットアッププロセスを続行します。次のようなページが表示されるはずです。
ここでは、Icinga2が提供するデフォルト値のままで、次へボタンをクリックすると、以下のようなページが表示されるはずです。
ここで、これまでに行ったすべての設定を確認し、「完了」ボタンをクリックしてインストールを完了させます。インストールが正常に設定されると、以下のページが表示されるはずです。
ここで、「Login to icinga web 2」ボタンをクリックすると、以下のようなページが表示されるはずです。
ここで、以前に作成した管理者アカウントの認証情報を入力し、ログインボタンをクリックすると、以下のようなIcinga web 2のダッシュボードが表示されます。
###リモートホストの監視のために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/ の Icinga ドキュメントページを参照してください。
アリババクラウドは日本に2つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
アリババクラウドジャパン公式ページ