IBM CloudのBare Metal Servers for VPC上に構成されたVMware vSphere環境をZabbixで監視する(環境構築編)

# はじめに

このシリーズでは、IBM CloudのBere Metal Servers for VPC上に構成されたVMware vSphereの環境をZabbixで監視する方法について複数の記事に分けて紹介しています。
1. [IBM CloudのBare Metal Servers for VPC上に構成されたVMware vSphere環境をZabbixで監視する(環境構築編)](https://qiita.com/ytada/items/549ca6b5b2dff7c3ef56) -> この記事
2. [IBM CloudのBare Metal Servers for VPC上に構成されたVMware vSphere環境をZabbixで監視する(テンプレート編)](https://qiita.com/ytada/items/67eef56287f61fe6c0ce)
3. [IBM CloudのBare Metal Servers for VPC上に構成されたVMware vSphere環境をZabbixで監視する(SNMP Trap編)](https://qiita.com/ytada/items/e3e269bb2c59f1ba3bd2)
4. [IBM CloudのBare Metal Servers for VPC上に構成されたVMware vSphere環境をZabbixで監視する(SSHチェック編)](https://qiita.com/ytada/items/ab4deb79cad215d562f7)

この記事では、監視対象となるVMware vSphereの環境と、監視用のZabbix ServerをIBM Cloud上に構築する手順を書いていきます。

## 前置き
IBM Cloudでは、ユーザーが物理サーバーを専有して利用することのできる、「Bare Metal Server」というサービスを提供しています。2013年にIBMがSoftlayer社を買収してから長年に渡りIBM Cloudを支えてきたサービスで、セキュリティやパフォーマンス要件の厳しいワークロードに対応することが可能です。

**そんなBere Metal Serverですが、仮想ネットワーク空間であるVPC(Virtual Private Cloud)上でも利用することができるようになりました。** ネットワークセグメントを自由に設計することが可能となり、より様々な構成で利用することができます。

:::note
Bare Metal Servers for VPC(BMS for VPC)は、2022年7月現在ではFrankfurt、Dallas、Washingtonでのみ利用が可能です。

:::

BMS for VPCはIBM Cloudで従来提供されていたClassic Infrastructureにおけるベアメタルのサービスとは少しアーキテクチャが異なるため、運用においてもいくつか考慮が必要となる場合があります。例えば、 **物理サーバーのIPMIをユーザーは利用することができず** 、ハードウェアのステータスを監視するのに工夫が必要です。

通常であればハードウェアのステータスはvCenterなどから「ハードウェアの健全性」で確認することができますが、この情報はIPMIから取得されています。そのため、IPMIが利用できない場合はハードウェアの障害箇所を特定することはvCenterのレベルでは難しいです。(vCenterのアラームもこの情報が利用されています。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103277/4def6c73-48ed-6f5d-f775-6c9433a28ea3.png)


そこで、今回は監視に焦点をあて、一般的な統合監視ソフトウェアであるZabbixを構築し、IBM CloudのBMS for VPCで構築したESXiサーバーと、その上に構築されるvCenter Server Applianceをどのように監視することができるのか確認していきます。


## 監視におけるユーザーの責任

クラウドサービスを運用する上では、ユーザーの責任範囲を明確に理解することが重要です。ご存知の通り、クラウドサービスを利用する場合にもクラウド事業者がサービスにおける全ての運用責任を担うわけではありません。通常は運用責任をユーザー側とクラウド事業者とで共有するモデルが適用されます。特にベアメタルは通常の仮想サーバーとは異なり、ユーザーが管理することのできるレイヤーが広いため、ハイパーバイザーやハードウェアの一部の運用責任をクラウド事業者と共有することになります。

IBM Cloudのベアメタルサーバーでは、クラウド事業者のサポートチーム等が許可なくユーザーのノードにアクセスすることはありません。そのため、ノードにアクセスして監視することのできるディスクやメモリーの障害を検知するのはユーザーの責任となります。障害を検知した後はIBM CloudでCaseを発行し、ハードウェアの交換などを依頼します。ユーザーの責任範囲はそこまでで、実際に物理的な対応を行うのはクラウド事業者側です。


# 環境構築

環境構築を実施します。監視を実施できることが確認ができれば良いので、シンプルな構成で環境を構築します。

## 構成概要

下記のように同じVPC、同じセグメントの中にESXiのベアメタルサーバーと監視を実施するZabbixをインストールするための仮想サーバーを用意します。また、ESXiやvCenterへのアクセス等を考慮し、踏み台サーバーとしてWindows Serverをオーダーしておきました。仮想サーバーにはそれぞれFloating IPを付与し、自身のPCから簡単にアクセスすることができるようにしておきます。(インターネット経由で到達することが可能となるため、Security Groupの設定を忘れないようにしてください。)vSphere上のVMに対するサブネットを用意し、そこにvCenterをデプロイします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103277/0d4b83c3-16e5-fe22-e185-2ab7c1b11e5c.png)


ここでは監視方法の確認がメインの内容であるため、BMS for VPCにおけるVMware Deploymentについては簡単に紹介するにとどめたいと思います。詳細な構成方法や手順については[こちら](https://cloud.ibm.com/docs/solution-tutorials?topic=solution-tutorials-vpc-bm-vmware&locale=en)をご確認ください。

## 事前準備
必要なVPC、サブネット、Security Group、IBM Cloud DNS Servicesなどを用意しておきます。

## ベアメタルサーバーのオーダー

まずはESXi用のベアメタルサーバーをオーダーします。BMS for VPCの注文に関しては下記の記事を参考にしました。
[IBM Cloud: BM for VPC(物理サーバー)の注文とESXiへのアクセスを試してみた](https://qiita.com/testnin2/items/1b0afe2a70d525b0c5a2)

ベアメタルサーバーのホスト用のポート(PCI Interface)と、vCenterなどのVM用のポート(VLAN Interface)を用意しておきます。IBM Cloudのポータルから設定することができるので、とても簡単です。
(PCI InterfaceとVLAN Interfaceの違いについてはこちらの記事が参考になります。: [IBM Cloud: PCI InterfaceとVLAN Interfaceの違いについて](https://qiita.com/testnin2/items/198019d564829138ebed))


## 仮想サーバーのオーダー

続いて、踏み台用とZabbix用の仮想サーバーをオーダーします。

Zabbixのシステム要件については[こちら](https://www.zabbix.com/documentation/current/en/manual/installation/requirements)の公式ドキュメントに記載があります。今回はZabbix用の仮想サーバーとしてCentOS 7.9を選択しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103277/62ab8a27-e37f-eada-ea8c-9eb4ea154463.png)


## vSphere環境の構築

踏み台用のWindows Serverにリモートデスクトップ等でログインします。VPC上のVSIにログインする際のパスワードは、デプロイ時に登録したSSH Keyにより復号する必要があります。詳細は下記のDocsをご確認ください。
[Windows Serverへの接続方法](https://cloud.ibm.com/docs/vpc?topic=vpc-vsi_is_connecting_windows&locale=en)

復号には下記のコマンドを実行します。
```
$ ibmcloud is instance-initialization-values INSTANCE_ID [--private-key (KEY | @KEY_FILE)]
```

ちなみに、他のUNIX系サーバーとは異なり、Windows Serverは登録したSSH Keyのリストの **一番上の鍵** を利用することでパスワードを取得することができます。それ以外の鍵では復号できないので注意が必要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103277/62b87d46-02b7-58e9-4af3-7d152095ddb6.png)

パスワードを取得したらWindows Serverにログインし、[公式ドキュメント](https://cloud.ibm.com/docs/solution-tutorials?topic=solution-tutorials-vpc-bm-vmware-vcenter)に従ってvCenter Server Applianceをデプロイします。


Windows ServerにvCenterのISOイメージをダウンロードし、マウントすることでインストーラーを起動することができます。VMwareのライセンスをIBM Cloudから購入している場合、ISOイメージはCaseで依頼することでダウンロードすることができます。(VMwareからライセンスを購入している場合、通常通り[VMware Customer Connect](https://customerconnect.vmware.com/dashboard)からダウンロードしてください。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103277/654ac2a1-95a2-61c9-cb56-f1286a70c07d.png)

vCenterのインストールが完了したら、必要な仮想スイッチやデータセンター及びクラスターを作成し、ホストを追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103277/ce3d96b1-2261-8d48-6121-d210dca0e8cd.png)

これで監視対象となるESXiとvCenter Server Applianceをデプロイすることができました。


## Zabbixのインストール

次に、用意したCentOSにZabbixをインストールします。詳細な手順は[公式ドキュメント](https://www.zabbix.com/documentation/current/en/manual/installation/install)をご確認ください。今回はソースコードからインストールする方法を選択しました。

まずはダウンロードページからソースコードをダウンロードし、展開します。
```
$ curl -OL https://cdn.zabbix.com/zabbix/sources/stable/6.2/zabbix-6.2.1.tar.gz
$ tar -zxvf zabbix-6.2.0.tar.gz
```

「zabbix」ユーザーとユーザーグループを作成します。
```
$ groupadd --system zabbix
$ useradd --system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c "Zabbix Monitoring System" zabbix
```

Zabbix Serverの動作に必要となるデータベースをインストールします。今回はMySQLを利用します。
```
$ yum localinstall http://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm
$ yum install -y mysql-community-server
$ mysql_secure_installation
```

:::note
`Public key for mysql80-community-release-el7-6.noarch.rpm is not installed`というエラーでMySQLがうまくインストールできない場合、GPGキーの期限切れが原因である可能性があります。下記のコマンドで新しいGPGキーをインポートすることでうまく動作しました。

```
$ rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
```
:::

データベースを作成し、文字セット等の設定を行います。

```
$ mysql -uroot -p<password>
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
mysql> create user 'zabbix'@'localhost' identified by '<password>';
mysql> grant all privileges on zabbix.* to 'zabbix'@'localhost';
mysql> SET GLOBAL log_bin_trust_function_creators = 1;
mysql> quit;
```

初期データのインポートを実施します。

```
$ cd database/mysql
$ mysql -uzabbix -p<password> zabbix < schema.sql
$ mysql -uzabbix -p<password> zabbix < images.sql
$ mysql -uzabbix -p<password> zabbix < data.sql
```

Zabbixサーバーのソースコードを構成します。解凍したZabbixのディレクトリ内で下記のコマンドを実施します。監視項目や対象、必要な要件に合わせてオプションを適宜追加してください。また、オプションによってはパッケージやライブラリが足りないこともあるのでその都度サーバーにインストールしてください。
```
$ cd zabbix-6.2.0
$ ./configure --enable-server --with-mysql --with-net-snmp --with-libcurl --with-libxml2 --with-ssh2 --with-openssl
```

:::note
今回有効化したオプションは下記になります。
- --enable-server: Zabbix Serverを有効化する
- --with-mysql: データベースとしてMySQLを使う
- --with-net-snmp: SNMPを有効化する(SNMP Trapを受信するために必要)
- --with-libcurl: libcurlライブラリを有効化する(vSphere環境の監視に必要)
- --with-libxml2: libxml2ライブラリを有効化する(vSphere環境の監視に必要)
- --with-ssh2: ssh2パッケージを有効化する(SSHチェックの実施に必要)
- --with-openssl: OpenSSLパッケージを有効化する(暗号化を利用する際に必要)
:::

コンパイルが完了したらインストールを実施します。
```
$ make install
```

インストールが完了したらZabbix Serverの設定ファイルを編集します。`/usr/local/etc/zabbix_server.conf`を開き、DBName、DBUser、DBPasswordの3つの項目を書き換えます。この設定ファイルは監視項目を追加するたびに編集することになりますが、今回は取り急ぎ稼働を確認するためデータベースの情報を入力します。

```conf:/usr/local/etc/zabbix_server.conf
### Option: DBName
#       Database name.
#       If the Net Service Name connection method is used to connect to Oracle database, specify the service name from
#       the tnsnames.ora file or set to empty string; also see the TWO_TASK environment variable if DBName is set to
#       empty string.
#
# Mandatory: yes
# Default:
DBName=zabbix

~

### Option: DBUser
#       Database user.
#
# Mandatory: no
# Default:
DBUser=zabbix

### Option: DBPassword
#       Database password.
#       Comment this line if no password is used.
#
# Mandatory: no
# Default:
DBPassword=Password
```

Zabbix Serverを起動します。
```
$ zabbix_server
```

ZabbixのフロントエンドはPHPで記述されています。ブラウザからGUIを利用するためにPHPをインストールします。
```
$ yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
$ yum -y install −−enablerepo=remi-php80 php80 php80-php php80-php-xml php80-php-xmlrpc php80-php-pecl-mcrypt php80-php-fpm php80-php-pecl-apcu php80-php-mbstring php80-php-gd php80-php-json php80-php-pecl-json-post php80-php-pdo php80-php-mysqlnd php80-php-pecl-mysql php80-php-opcache php80-php-pear php80-php-soap php80-php-intl php80-php-pear
$ ln -sf /usr/bin/php80 /usr/bin/php
```

uiディレクトリに格納されているPHPファイルをWebサーバーの(サブ)ディレクトリに移動させます。
```
$ mkdir /var/www/html/zabbix
$ cd ui
$ cp -a . /var/www/html/zabbix/
```

これでWeb UIにアクセスすることができるようになりました。`http://<server_ip_or_name>/zabbix`にアクセスし、セットアップ画面に移動します。[こちら](https://www.zabbix.com/documentation/current/en/manual/installation/frontend)のページを参考に、手順に従ってインストールを実施します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103277/441d7ba3-19f9-e33a-79db-9e67485401d7.png)



もし前提条件をクリアできていない項目がある場合、`php --ini`コマンドで設定ファイルの場所を確認し、要件を満たすように該当の項目の値を変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103277/b94f82ed-0adb-b903-d091-1756800c13da.png)

Zabbixのデータベースに接続し、設定を完了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103277/a3566ea4-482f-35ce-54af-2d7dcb04ff5d.png)

設定が完了すると、設定ファイルが作成されます。ソースコードからインストールを実施している場合、自分でダウンロードして記載してあるディレクトリに配置します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103277/324da6fb-29d8-0a03-1a1e-ffad5b9da68c.png)

設定ファイルの配置が完了したらログインします。初期設定ではユーザー名がAdmin、パスワードがZabbixです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103277/9c488966-27a4-21e3-c4e4-47c485d08674.png)

ログインしてダッシュボードが表示されたら構築は完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103277/1ec73b1b-9243-ba69-1ba9-857d9da695c7.png)


# あとがき

Zabbixでの監視を実施するため、IBM CloudのVPC上に環境を構築しました。次回からはZabbix上で利用できる様々な方法で環境を監視し、取得できる情報を確認していきたいと思います。

次の記事はこちら

https://qiita.com/ytada/items/67eef56287f61fe6c0ce