2017年4月28日金曜日

vCenter Serverは不要。ESXi単独で仮想マシンのクローンを作る方法

vSphere環境で仮想マシンのクローンを作る場合は、vCenter Serverを用意する必要があると思っていたが、実はESXiシェルのコマンドを使えばESXi単独でクローンが作れてしまうことを最近知った。

若干手順が多くなるのでちょっと手間ではあるものの、無償のESXiのみの環境であってもクローンが使えることは非常に便利である。例えば、よく使うOSの仮想マシンはテンプレートとして1台作っておいて、今回記載する手順でクローンして使うようにすれば、検証作業のたびにOSインストールから始める必要がなくなって効率がよくなる。

ESXi単独での仮想マシンのクローンの手順

以下に手順を記載していく。

1. クローン先の仮想マシンの箱を作成

vSphere Clientなどでクローン元と同じ構成で仮想マシンを作成する。仮想マシン作成時に「標準」と「カスタム」が選べるが、「標準」を選んだ場合、必ず仮想マシンに1つディスクを作成する必要がある。このディスクは次の手順ですぐに消すため、1GBと小さくして作成しておけばよい。
※「カスタム」の場合は、ディスクを作らない仮想マシンの箱を作成できる。


2. クローン先の仮想マシンのディスク削除

仮想マシン作成時に作られたディスクは不要なので、仮想マシンから削除(ディスクからも削除)しておく。


3. sshでESXiシェルにログイン

Tera Termなどでログインする。なお、ESXiの場合は、「チャレンジレスポンス認証」を選んでログインする。

4. コピー元ディスクの確認

データストアは以下パスに存在する。

/vmfs/volumes/<データストア名>/<仮想マシン名>

クローン元のファイルを事前に確認しておく。コピー対象となるファイルは*.vmdkファイルとなる。以下確認例となる。

[root@t3011es60:~] ls -l /vmfs/volumes/ssd_local_01/t1162w28r/
total 7388176
------------------------------
-rw-------    1 root     root     42949672960 Apr 26 13:55 t1162w28r-flat.vmdk
-rw-------    1 root     root          8684 Apr 26 13:41 t1162w28r.nvram
-rw-------    1 root     root           524 Apr 26 13:55 t1162w28r.vmdk
-rw-r--r--    1 root     root            43 Apr 26 13:55 t1162w28r.vmsd
-rwxr-xr-x    1 root     root          2806 Apr 26 13:55 t1162w28r.vmx
-rw-------    1 root     root          4151 Apr 17 05:19 t1162w28r.vmxf
-rw-r--r--    1 root     root       1203822 Apr 18 21:24 vmware-1.log
-rw-r--r--    1 root     root        267260 Apr 26 13:41 vmware.log
------------------------------

5. ディスクコピーの実施

以下コマンドで仮想マシンのディスクをコピーする。

vmkfstools -i <クローン元> <クローン先> -d <ディスク形式>

"-d"オプションでディスクの形式を選択できる。

・zeroedthick (default) : シックプロビジョニング
・thin : シンプロビジョニング
・eagerzeroedthick : EagerZeroedThick (作成時に0書き込み)

以下シンプロビジョニング形式でクローンを作成する実行例となる。

[root@t3011es60:~] vmkfstools -i /vmfs/volumes/ssd_local_01/t1162w28r/t1162w28r.vmdk  /vmfs/volumes/iscsi_qnap_01/t1165w28r/t1165w28r.vmdk -d thin
------------------------------
Destination disk format: VMFS thin-provisioned
Cloning disk '/vmfs/volumes/ssd_local_01/t1162w28r/t1162w28r.vmdk'...
Clone: 100% done.
------------------------------

なお、仮想マシンがパワーオン状態の場合、以下のようにファイルがロックされているメッセージが表示されてしまいクローンが実行できない。

------------------------------
Failed to open '/vmfs/volumes/ssd_local_01/t1162w28r/t1162w28r-000001.vmdk': Failed to lock the file (16392).
Command exited with non-zero status 255
------------------------------

この場合は、一度仮想マシンのスナップショットを取得してから、再度vmkfstoolsコマンドを実行すれば成功する(スナップショットを取得すると、vmdkファイルのロックが差分用のvmdkファイルに移るため)。一時的にスナップショットを取得した場合は、作業後のスナップショット削除も忘れずに。

6. 仮想マシンにディスクを追加

vSphere Clientで、先ほどコピーしたvmdkファイルを指定して、仮想マシンのハードディスクを追加する。



7. 仮想マシンを起動

仮想マシンを起動する。特に問題なくログイン画面が表示される。


なお、仮想マシン起動状態でクローンを実施した場合は、以下のように正常にシャットダウンされなかった旨が表示されるが、「windows を通常起動する」を選べばOSは起動できる。


参考

ESX/ESXi ホスト端末を使用して個々の仮想マシン ディスクのクローンを作成する (2078416)
https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2078416

vmkfstools を使用した仮想マシン ディスクのクローン作成および変換 (2078921)
https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2078921

2017年4月22日土曜日

ESXi 6.0上にESXi 5.5の仮想マシンを作って、ESXi用のVMware Toolsをインストールした話 (ESXi on ESXi)

自宅の検証環境はESXi 6.0で構築しているが、ちょっとESXi 5.5の検証作業が必要になったので、仮想マシンとしてESXi 5.5を作成することにした。これは、Nested ESXiとかESXi on ESXiと呼ばれる方法で、検証等ではよく用いられる手法である。

本記事ではESXi 6.0上にESXi 5.5の仮想マシンを作成する方法と、ESXi 5.5用のVMware Toolsのインストール手順について記載する。

ESXiのインストール

まず、ESXi用に仮想マシンの箱を作成する。ESXi 6.0では、仮想マシンのOS選択にて、「その他」の中にESXiが選べるようになっているので、適切な種類を選択すればよい。今回は、ESXi 5.5なので、「VMware ESXi 5.x」を選択した。


また、ESXiにはインストール最小要件があるので注意する。以下KBに記載がある通り、ESXi 5.5の場合は、CPUは2コア以上、メモリは4GB以上必要となる。

・ESXi 5.5 のインストールおよびアップグレードのベスト プラクティス (2080534)
 https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2080534

作成した仮想マシンを起動する前に、vmxファイルを修正する必要がある。データストアブラウザにてvmxファイルをダウンロードし、最下行に以下2行を追加したのち、アップロードして上書きする。

------------------------------
vhv.enable = "TRUE"
hypervisor.cpuid.v0 = "FALSE"
------------------------------

作成した仮想マシンを起動させ、VMware社のサイトからダウンロードしたESXiのisoをマウントしてブートさせる。Nested ESXiであっても、インストール方法は特に変化がないため、ここでは詳細は割愛する。なお、ここで、CPUやメモリが最小要件を満たしていない場合、以下のようなエラーメッセージが表示され、インストールを進めることができないので注意。


ESXiの初期設定

正常にESXiのインストールが終わり、起動が完了したら、まずは仮想マシンのコンソールを用いて、管理用のIPアドレス設定をしておこう。


管理用ポートの設定ができれば、後はvSphere Clientにて接続して操作・設定が可能となる。ただし、ESXi 5.5にはvSphere Client 6.0では接続できないので、vSphere Client 5.5をインストールしておくことが必要となる。

なお、vSphere Clientは上書きインストールにはならず、各バージョンが共存して利用可能である(接続先のESXiやvCenter Serverのバージョンに応じて、適切なバージョンのvSphere Clientで接続がされる)ので、既に別バージョンのvSphere Clientがインストールされていたとしても、単純にvSphere Client 5.5のインストーラーを実行して、インストールしてしまえばよい。

ESXi用のVMware Toolsのインストール

以下URLからESXi用のVMware Toolsをダウンロードできる。

・VMWARE TOOLS FOR NESTED ESXI
 https://labs.vmware.com/flings/vmware-tools-for-nested-esxi#summary

なお、このVMware Toolsは、ESXi 6.0以降をネストする場合は不要のようだ。上記URLに「This Fling's functionality is now integrated into ESXi 6.0 and later. However, you can still download the Fling for ESXi 5.*」と記載されているとおり、ESXi 6.0以降では本機能(VMware Tools)は、もともと本体に組み込まれている模様。

ちなみに、ダウンロード場所が若干わかりづらいが、本文にさらりと記載されている、「This VIB package」のリンクをクリックすればよい。以下ファイル名のVIBファイルがダウロードされる。容量は2MB以下とコンパクト。

 esx-tools-for-esxi-9.7.2-0.0.5911061.i386.vib

ダウンロードしたVIBファイルは、vSphere Clientのデータストアブラウザを使って、アップロードしておく。今回は、ESXiのローカルディスクであるdatastore1にアップロードした。


VIBファイルをアップロードした後は、ESXiシェルにてインストールを実施する。親ESXiにて仮想コンソールを使うか、sshを有効にしている場合はsshにてESXiシェルにログインする。

ログインしたのち、以下コマンドを実行する。実行後、「The update completed successfully」と表示されれば成功。

# esxcli software vib install -v /vmfs/volumes/datastore1/esx-tools-for-esxi-9.7.2-0.0.5911061.i386.vib
------------------------------
Installation Result
   Message: The update completed successfully, but the system needs to be rebooted for the changes to be effective.
   Reboot Required: true
   VIBs Installed: VMware_bootbank_esx-tools-for-esxi_9.7.2-0.0.5911061
   VIBs Removed:
   VIBs Skipped:
------------------------------

インストール結果に記載されている通り、ESXiの再起動が必要となるため、再起動をしておく。

# shutdown -r

後は親ESXiでVMware Toolsの実行状況を確認すればよい。「実行中 (サポート対象外)」という表示になっていればOK。IPアドレス情報が確認できるし、ゲストのシャットダウン等の機能も利用できるようになる。


以上で作業は完了となる。

2017年4月14日金曜日

ZabbixでCPUやメモリなどのリソース監視を行う

先日、ESXiのCPU、メモリの使用率をグラフに表示するという記事を書いた。その後しばらくして、ESXiのCPU使用率が高い値で張り付くという事象が発生した。


原因は、1台の仮想マシン(Windows Server)のSQL Serverが高負荷になったことであり、仮想マシンの再起動で復旧できた。しかし、根本原因は不明であり、不定期に再発することもあったことから、ZabbixでCPUのリソース監視を行うことにした。

アイテムを作る

ESXiのCPU使用率とメモリ使用率のアイテムの作り方は、別記事を参照。

トリガーを作る

「設定」→「テンプレート」→「Template Virt VMware Hypervisor」→「トリガー」を選択し、トリガーを新規作成する。

今回は例として、CPU周波数が2GHz = 2000000000Hzを600秒超過した場合に、「重度の障害」として検知する設定となる。余談だが、"2G"という表記でもZabbixは認識してくれるが、2G = 2*1024*1024*1024となり、正確な値にならないので注意が必要。

------------------------------
・名前:High CPU Usage
・条件式:{Template Virt VMware Hypervisor:vmware.hv.cpu.usage[{$URL},{HOST.HOST}].avg(600)}>2000000000
・深刻度:重度の障害
・障害イベントを継続して生成:チェックなし
・有効:チェックあり
------------------------------


なお、メモリを監視したい場合の条件式に入れる値は以下のようになる。
※事前にアイテムを作成していることが必要

------------------------------
・メモリ使用量
 vmware.hv.memory.used[{$URL},{HOST.HOST}]
・メモリバルーン
 vmware.hv.memory.size.ballooned[{$URL},{HOST.HOST}]
------------------------------

グラフで確認

グラフを作ってある場合は、グラフにもトリガー設定の閾値が表示されるので確認しておこう。今回設定した2GHzが監視閾値として、点線で表現されていることがわかる。


以上で設定は完了となる。

2017年4月9日日曜日

オープンソースのログ統合管理ツール「Graylog」でsquidのログを管理する

自宅の検証環境では、squidを使ってプロキシサーバーを構築しており、このプロキシサーバーを経由してインターネットにアクセスするように構成している。このsquidログをsyslogでGraylogに飛ばして管理してみたのだが、ログの中身までは分析されず、ただ保存されるだけとなってしまい、統計情報を確認したり、ログを分析することは困難となっていた。

そこで、Graylogでこのsquidログに対し、分類・タグ付け(ログの正規化)を行い、統計情報を表示できるようにしてみた。

GraySquidのダウンロード

まず、Graylogにてsquidを管理するためのContent Packを以下からダウンロードしておく。

GraySquid
https://marketplace.graylog.org/addons/bd3efa5f-6ccb-47ce-97ea-6ebe0270a9c7

拡張子が.jsonとなるJSONで記載されたテキストファイルがダウンロードされる。
※JSON (JavaScript Object Notation):XMLのようなテキストベースのデータフォーマット

このContet Packの概要は以下の通り。

 ・Graylogの受信ポート番号はTCP/19302を使う
 ・squidログは標準形式のものを取り込む(apacheのログ形式はきちんと取り込めない)
 ・squidログの各種情報(アクセス先URLやステータスコードなど)を正規化して取り込む
 ・squidの直近の通信の統計情報を表示するDashboardも用意されている

GraylogにGraySquidをインポート

GraylogのWeb GUIにログインし、Content Packのインポートから実施する。

「System」→「Content Packs」を選択し、「Select content packs」の一番下に「Import Content Pack」という項目があるため、先ほどダウンロードしたJSONのファイルを選択し、「Upload」ボタンを押下する。


インポートが成功すると、「Select content packs」に「Proxies」という項目が新たに表示されるので、その中の「Squid Logs」を選択し、「Apply Content」ボタンを押下する。


これだけで、TCP/19302で受信したログをsquidのログとして取り込む準備が完了する。

squid側の設定

squid側でログを飛ばす設定を行う。squidのaccess.logをrsyslogにてGraylogに飛ばす設定となる。なお、今回ログを飛ばすOS、squid、rsyslogのバージョンは以下の通りとなる。

# cat /etc/redhat-release
------------------------------
CentOS Linux release 7.3.1611 (Core)
------------------------------

# squid -v
------------------------------
Squid Cache: Version 3.5.20
------------------------------

# rsyslogd -v
------------------------------
rsyslogd 7.4.7
------------------------------

squidがインストールされたLinuxにログインし、以下ファイルを新規作成する。

# vi /etc/rsyslog.d/60-squid.conf
------------------------------
# Load Modules
module(load="imfile")
module(load="omfwd")

# rsyslog Input Modules
input(type="imfile"
         File="/var/log/squid/access.log"
         Tag="squid-access"
         Severity="info"
         Facility="local7"
         ruleset="SquidForward")

# rsyslog RuleSets
ruleset(name="SquidForward") {
        action(type="omfwd"
        Target="<GraylogのIPアドレス>"
        Port="19302"
        Protocol="tcp"
        template="RSYSLOG_SyslogProtocol23Format")
}
------------------------------

設定反映のため、rsyslogサービスをリスタートする。

# systemctl restart rsyslog
# systemctl status rsyslog   ←確認
------------------------------
● rsyslog.service - System Logging Service
   Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
   Active: active (running) since 日 2017-04-02 07:22:34 JST; 5s ago
 Main PID: 5493 (rsyslogd)
   CGroup: /system.slice/rsyslog.service
           mq5493 /usr/sbin/rsyslogd -n

 4月 02 07:22:34 t3023ce72 systemd[1]: Starting System Logging Service...
 4月 02 07:22:34 t3023ce72 systemd[1]: Started System Logging Service.
------------------------------

Graylogにてログの確認

squid側の設定が完了したら、実際にログが表示されることを確認する。

「Search」タブにてログを表示させ、squidのログをクリックしてみる。MethodやStatus_Codeがそれぞれ分類されて表示されており、ログが正規化されていることがわかる。


次に「Dashboards」を選択すると、以下3つのDashboardが追加されていることがわかる。

 ・Squid TCP_ALLOWED
 ・Squid TCP_DENIED Stats
 ・SquidStats


お勧めは3つめの「SquidStats」で、直近15分のsquidを経由した通信の統計情報が表示される。直近15分では統計情報として物足りないのであれば、時間をカスタマイズすることも可能な模様。ただし、時間を延ばせば、その分Graylogの処理も増えるはずなので、マシンリソースと相談して設定するのがよいだろう。



以上で、Graylogにてsquidログを正規化して取り込み、統計情報を表示することができた。ただし、squidログは生ログで見ると時間表示がUNIX時間(1970/1/1からの累計時間)で表示される仕様となっており、人間が確認する場合は視認性がいまいちである。squidログはapache形式にログ表示を変えることができるので、apache形式でログ取得して同様のことができないかも調べていきたい。

2017年4月2日日曜日

オープンソースのログ統合管理ツール「Graylog」の仮想アプライアンスをインストールしてみた

昨年、SIEM(Security Information Event Management)を検討する機会があり、SplunkやMcAfee SIEMの評価版を自宅の検証環境に入れて使っていた。当たり前だが、SplunkもMcAfee SIEMも評価版は使用日数に制限があり(Splunkは60日、McAfee SIEMは30日)、長期的に利用することは不可能であった。そこで、オープンソースでログを統合管理するツールがないかと探していたら、「Graylog」を発見した。

試しにGraylogの仮想アプライアンスをインストールしてみて使ってみたら、なかなか有用なツールと感じた。本記事ではGraylogの仮想アプライアンスのインストールと初期設定の手順を記載する。

Graylogの入手とインストール

Graylogのインストーラは以下から入手する。2017年4月時点の最新バージョンは、2.2.2となっていた。

Graylog - Download and Install
https://www.graylog.org/download

今回はVMware ESXi上に展開するので、「OVA」ファイルをダウンロードする。

OVAファイルの展開は、vSphere Clientにて「ファイル」→「OVFテンプレートのデプロイ」にて実施する。設定項目はデフォルトで問題ない。私の場合は、ディスク容量の削減のため、ディスクの種類を「Thin Provision」にしている。


OVAテンプレートのデプロイが完了する。仮想アプライアンスのリソースはCPU2コア、メモリ4GBとなっているが、ここもデフォルトのままで問題ない。最初、リソース削減のため、CPUを1コアにしてみたが、CPU使用率が100%で張り付いたりしたので、1コアではちょっときつい模様。


問題なければパワーオンする。起動時にvSphere Clientにて以下のメッセージが表示されるが、「はい」を選んで「OK」を押しておけば問題なく起動する。

------------------------------
Virtualized Inter-VT-x/EPT is incompatible with this virtual machine configration.
仮想msg.intel.hvhwnnuを使わずに続行しますか?
------------------------------


Graylogの仮想アプライアンスは、ubuntu 14.04がベースとなっている。起動時はNICのDHCP機能が有効になっているので、IPアドレスの取得待ちに少し時間を要するが、ログインプロンプトが表示されるまで待機する。なお、ログインプロンプト表示の際に、以下メッセージが表示されている場合があるが、同じくDHCPでIPが取得できなかったことに起因するメッセージなので無視してOK。

------------------------------
Your appliance came up without a configured IP address. Graylog is probable not running correctly!
------------------------------


インストール後の初期設定

Graylogの初期設定を実施し、Web GUIにログインできるようにする。

ログインとパスワード変更

まずはログインとなる。初期パスワードは以下の通り。

 ユーザー名:ubuntu
 パスワード:ubuntu

ログインしたら、とりあえずパスワードを変更しておく。

$ passwd
------------------------------
Changing password for ubuntu.
(current) UNIX password:<現在のパスワード>
Enter new UNIX password:<新パスワード>
Retype new UNIX password:<新パスワード>
passwd: password updated successfully
------------------------------

IPアドレス設定

IPアドレスの設定はubuntuと同じ方式で設定すればよい。viで以下ファイルを開き編集する。なお、ubuntuなので、頭にsudoを付けて編集しているが、毎回sudoを付けるのが面倒な場合は"sudo su -"でrootになってしまってもよい。

$ sudo vi /etc/network/interfaces
------------------------------
# The primary network interface
auto eth0
#iface eth0 inet dhcp       ←コメントアウト
#pre-up sleep 2         ←コメントアウト

iface eth0 inet static      ←追加 (静的IPアドレス付与)
address 192.168.11.151      ←追加 (IPアドレス)
netmask 255.255.255.0      ←追加 (サブネットマスク)
gateway 192.168.11.1       ←追加 (デフォルトゲートウェイ)
dns-nameservers 192.168.11.1   ←追加 (DNS)
------------------------------

設定反映のためにインターフェースの落とし上げを行う。

$ sudo ifdown eth0
$ sudo ifup eth0

設定を確認しておく。

$ ifconfig
------------------------------
ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0c:29:3a:6a:6f
          inet addr:192.168.11.151  Bcast:192.168.11.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe3a:6a6f/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
------------------------------

Graylogの初期設定

Graylogのアプリケーションとしての初期設定は以下2つのコマンドを実行するのみ。

まずは、Web GUIのログイン時のパスワードを変更する。

$ sudo graylog-ctl set-admin-password <新パスワード>

次に、タイムゾーンを変更する。

$ sudo graylog-ctl set-timezone "Asia/Tokyo"

最後に設定反映のコマンドを実行するのだが、この際にapt-getが動作するようで、インターネットへの接続ができる状態で実行したほうがよい。プロキシ環境の場合は、以下の通りプロキシ設定を実施しておく。

$ export http_proxy="http://<プロキシのIPアドレス>:<プロキシのポート>/"
$ export https_proxy="http://<プロキシのIPアドレス>:<プロキシのポート>/"
$ export ftp_proxy="http://<プロキシのIPアドレス>:<プロキシのポート>/"
$ export ←確認コマンド
------------------------------
declare -x ftp_proxy="http://<プロキシのIPアドレス>:<プロキシのポート>/"
declare -x http_proxy="http://<プロキシのIPアドレス>:<プロキシのポート>/"
declare -x https_proxy="http://<プロキシのIPアドレス>:<プロキシのポート>/"
------------------------------

設定反映のコマンドを実行する。このコマンドは少々時間がかかる。プロキシ設定の環境変数を引き継ぐ必要があるので、"sudo"ではなく"sudo -E"で実行すること。

$ sudo -E graylog-ctl reconfigure

open-vm-toolsのインストール

仮想アプライアンスなのに、なぜかopen-vm-toolsが入っていないなので、apt-getでインストールする。

$ sudo -E apt-get update
$ sudo -E apt-get install open-vm-tools

GraylogのWeb GUIにログイン

以上で初期設定は終わりとなる。ブラウザからhttpにて仮想アプライアンスのIPアドレスを指定すると、ログイン画面が表示される。


以下のユーザー名、パスワードでログインする。

 ユーザー名:admin
 パスワード:<先ほど設定したパスワード>

以下のような画面が表示されればログイン成功。


LinuxのSyslogを転送させてみる

Graylogは初期状態からsyslog転送をUDP/514ポートで受け付ける状態になっているので、試しにLinuxサーバーからSyslogを転送させてみる。

Syslog送信元サーバーで、/etc/rsyslog.confの最後に以下設定を追加する。
※192.168.11.151はGraylogのIPアドレスに適宜変更

# vi /etc/rsyslog.conf
------------------------------
*.* @192.168.11.151:514;RSYSLOG_SyslogProtocol23Format
------------------------------

設定反映のため、rsyslogサービスをリスタートする。

# systemctl restart rsyslog
# systemctl status rsyslog   ←確認
------------------------------
● rsyslog.service - System Logging Service
   Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
   Active: active (running) since 日 2017-04-02 07:22:34 JST; 5s ago
 Main PID: 5493 (rsyslogd)
   CGroup: /system.slice/rsyslog.service
           mq5493 /usr/sbin/rsyslogd -n

 4月 02 07:22:34 t3023ce72 systemd[1]: Starting System Logging Service...
 4月 02 07:22:34 t3023ce72 systemd[1]: Started System Logging Service.
------------------------------

これで、GraylogのWeb GUIにて、「Search」をクリックすると、ログが表示されるはず。


以上でインストールと初期設定は終了となり、とりあえずログを溜めて検索する機能は利用可能になる。Graylogには各種ログを解析するための「Content Pack」と呼ばれる、様々なログに対応したプラグインが提供されているので、今後それらを追加してログの分析ができるようにしていきたい。

人気の投稿