VMware アプリケーションのログの収集
vCenter Server から収集されるログによって、VMware 用 Sumo Logic アプリケーションの検索の使用、視覚化、ならびに vCenter Server イベントおよびパフォーマンス データのリアル タイム分析が可能になり、仮想環境内で重要なイベントをモニタリングして検出できるようになります。
データを収集するための vMA Server のセットアップ
データを収集するように Source をセットアップする前に、vCenter Server 経由で vMA をインストールしてから (まだインストールしていない場合)、Collector をダウンロードしてインストールする必要があります。
ステップ 1: vMA のインストール
vMA は、vSphere CLI および vSphere SDK for Perl を含むアプライアンス (SUSE 仮想マシン) です。vMA によって、管理者は毎回認証を行わなくても、ESXi ホストおよび vCenter Server システムを操作するスクリプトまたはエージェントを実行できます。
vMA をセットアップするには、次の手順を実行します。
- VMware から vMA をダウンロードして、付属の手順に従い OVF をデプロイします。(vSphere クライアント経由で vCenter Server に移動し、[File (ファイル)] > [Deploy OVF Template (OVF テンプレートのデプロイ)] を選択します)。
- VMware ドキュメントに記載された手順に従って、vMA の認証、タイムゾーン、および時間をセットアップします。
- 次の手順では、vCenter Server に対する適切な権限を持つユーザ アカウントを指定する必要があります。このユーザ アカウントで必要なのは、RESXTOP データのみを表示する Global.Service マネージャの権限だけです。詳細については、このリンクを参照してください。
- vMA で credstore_admin.pl を実行し、収集するパフォーマンスおよびイベント データを生成する各 vCenter Server に資格情報を追加します。このスクリプトは、vSphere Perl SDK にデフォルトで付属しています。vMA の /usr/lib/vmware-vcli/apps/general に格納されています。(詳細については、この VMware KB 記事を参照してください)。たとえば vCenter Server にユーザのアカウントを追加するには、次のコマンドを実行できます。
/usr/lib/vmware-vcli/apps/general/credstore_admin.pl list
vi-admin@yourservername:/usr/lib/vmware-vcli/apps/general> ./credstore_admin.pl add --server 14.3.2.11 --username "domainname\account name" --password 345345345
- 次のコマンドを実行して、認証が適切にセットアップされていることを確認し、ネットワーク インターフェイスのリストを表示します。
esxcli --server <vcenter host> --vihost <esxi host> network nic list
たとえば、次のコマンド実行するとします。
esxcli --server 192.168.23.242 --vihost 192.168.23.24 network nic
この場合、vCenter Server (192.168.23.242) によって管理される ESXi ホスト (192.168.23.24) のネットワーク インターフェイスのリストが表示されます。
Connect to <your vCenter Server> failed. Server SHA-1 thumbprint: <Your vCenter Thumbprint> (not trusted).
この場合、次のコマンドを実行して接続を許可します。
/usr/lib/vmware-vcli/apps/<wbr/>general/credstore_admin.pl add -s <your vCenter Server> --thumbprint <Thumbprint Above>
ステップ 2: Collector のダウロードと vMA へのインストール
- トピック「静的 URL からの Collector のダウンロード」から、適切な Collector の実行ファイルをダウンロードします。
- vMA マシンで wget または curl を使用して URL からファイルをダウンロードします。wget を使用する場合は、URL を二重引用符で囲む必要があります。例:
sudo wget "https://collectors.sumologic.com/rest/download/linux/64" -O SumoCollector.sh
- ダウンロード ディレクトリから、root としてインストール ファイル SumoCollector.sh を実行します。最初に次のコマンドを実行して、root にファイルの実行権限があることを確認します。
sudo chmod 740 SumoCollector.sh
- root 権限を使用して、ご使用のサーバでインストール ファイルを実行します。
$ sudo ./SumoCollector.sh
Collector をインストールまたは再起動すると、Collector はサービスとして自動的に開始されます。
イベント メッセージの収集
イベントは vCenter Server でイベント メッセージをトリガするアクションです。イベント メッセージはログ記録されませんが、代わりに vCenter Server データベースに格納されます。VMware 用 Sumo Logic は、(デフォルトで) vMA に付属している vSphere Perl SDK を使用して、これらのメッセージを取得します。
ステップ 1: Collector の Syslog Source の設定
Sumo Logic Syslog Source は、Syslog サーバのように動作し、Syslog メッセージを受信する指定ポートをリッスンします。
- [Manage Data (データの管理)] > [Collection (コレクション)] > [Collection (コレクション)] に移動し、[Add Source (Source の追加)] をクリックします。
- [Syslog] を Source タイプとして選択します。
- この Source に対して表示する [Name (名前)] を入力します。Source 名メタデータは _sourceName という検索可能なフィールドに格納されます。
- [Protocol (プロトコル)] では TCP を選択します。
- Source がリッスンする [Port (ポート)] 番号 (たとえば 1514。ただしお使いの Collector に適したポートを選択してください) を入力します。
- [Source Category] には、vcenter_log を使用することをお勧めします。
- [Advanced (詳細設定)] で、次のオプションを設定します。
- [Extract timestamp information from log file entries (ログ ファイル エントリからタイムスタンプ情報を抽出する)] を選択します。
- [Ignore time zone from log file and instead use (ログ ファイルのタイム ゾーンを無視して、次を使用します)] を選択して、メニューから [UTC] を選択します (以下を参照)。
- [Save (保存)] をクリックします。
ステップ 2: ログの収集の設定
- vMA で、VMware 用 Sumo Logic スクリプトにある、すべての Sumo Logic スクリプトを保持するディレクトリを作成します。ディレクトリに /var/log/vmware といった名前を付けます。
- このページの vSphere5.0.gz および vSphere5.5.gz リンクを使用して Sumo Logic VMware スクリプトをダウンロードし、先ほど作成したディレクトリに格納します。
- Sumo Logic VMware スクリプトを実行しているユーザ アカウントを "vi-admin" ユーザと想定します。このユーザ アカウントは "root" ユーザではなく、vSphere5.0.gz と vSphere5.5.gz ファイルが展開されるディレクトリに対して完全な読み取り、書き込み、実行権限を持つユーザである必要があります。適切な権限がないと、予期しないスクリプト エラーが発生します。
- スクリプトが存在する絶対パスを反映するように
SCRIPT_PATH
変数を変更して、cron_vcenter_events.sh スクリプトを編集します。 - 「トラブルシューティングと手動テスト」で説明するように、query_vCenter.pl スクリプト (イベントに関するクエリを vCenter Server に対して実行する) を実行してテストします。次のサンプル コマンドを使用します。
query_vCenter.pl -s [vcenterserver] -f output.txt
- 定期的に任意の間隔で cron_vcenter_events.sh スクリプトを実行する cron ジョブを作成します。
*/2 * * * * LD_LIBRARY_PATH=:/opt/vmware/vma/lib64:/opt/vmware/vma/lib /var/log/vmware/cron_vcenter_events.sh
パフォーマンス ログの収集
パフォーマンス ログの収集では、vMA で実行される VMware ツールとスクリプトを使用してパフォーマンス統計情報を抽出します。
ステップ 1: ローカル ファイル Source の設定
ローカル ファイル Source を設定します。
- [Manage Data (データの管理)] > [Collection (コレクション)] > [Collection (コレクション)] に移動し、vCenter Server Collector の [Add Source (Source の追加)] をクリックします。
- [Local File (ローカル ファイル)] を Source タイプとして選択します。
- この Source に対して表示する [Name (名前)] を入力します。Source 名メタデータは _sourceName という検索可能なフィールドに格納されます。
- [File Path (ファイル パス)] には、/var/log/vmware/*.perf.out と入力します。
- [Source Category] には、esx_perf と入力します。
- [Advanced (詳細設定)] で [Timestamp Parsing (タイムスタンプ parse)] が選択されていることを確認します。次に [Time Zone (タイムゾーン)] で、vMA 仮想マシンのタイムゾーンを選択します。
- [Save (保存)] をクリックします。
ステップ 2: パフォーマンス ログの収集の設定
収集を開始する前に、resxtop ユーティリティからのパフォーマンス データを変換するスクリプトを起動し、Sumo Logic が使用できる形式でパフォーマンス データが配信されるようにする必要があります。
- vMA で、すべてのスクリプトを保持するディレクトリ (例: /var/log/vmware) を作成します。
- Sumo Logic から提供された Zip バンドルのすべてのファイルを、先ほど作成したディレクトリに展開します。
- 1 台の vCenter Server と 1 つのユーザ名が各行で指定されるように、vcenter.info ファイルを編集します。
例:vcenter01.company.com "domain_name\user_name" vcenter02.company.com "domain_name\user_name" vcenter03.company.com "domain_name\user_name"
- /usr/lib/vmware-vcli/apps/general/credstore_admin.pl list を実行して、認証のために設定済みのすべての vCenter Server のリストを取得します。
- cron_vcenter_perf.sh スクリプトを次のように編集します。
- スクリプトが存在する絶対パスを反映するように、SCRIPT_PATH 変数を変更します。
- パフォーマンス データの収集に使用する方法を選択します。次に $SCRIPT_PATH/getserver_perf.pl を呼び出す行を非コメント化します。詳細については、「収集のセグメント化」を参照してください。
- 「トラブルシューティングと手動テスト」で説明するように、cron スクリプトで使用されるコマンドをテストしてから、cron コマンドをテストし有効化します。
$SCRIPT_PATH/getserver_perf.pl -type=vcenter -path=$SCRIPT_PATH -server_file=$SCRIPT_PATH/vcenter.info -output_file=$SCRIPT_PATH/vcenter_all.perf.out
- cron_vcenter_perf.sh スクリプトを実行します。終了したら、パフォーマンス ログが収集されていることを確認します。上記の $SCRIPT_PATH ディレクトリに esxi.perf.out ファイルがあるはずです。またファイルには、vCenter によって管理される ESXi サーバごとに 7000 ~ 8000 以上のメッセージが含まれているはずです。
たとえば、138 行目を次のように変更します。
`echo \'$pwd\' | /usr/bin/resxtop --server $host --username $user -b -n $iterations > $local_csv_file `;
to
` echo \'$pwd\' | /usr/bin/resxtop --server $host -c esxtop50rc --username $user -b -n $iterations > $local_csv_file`;
データ量を減らすもう 1 つの方法は、cron_vcenter_perf.sh を実行する頻度を減らすことです (以下参照)。
vi-admin@<vma-hostname>>~ /opt/SumoScripts/cron_vcenter_perf.sh vi-admin's password: domain_name\user_name password:
- cron_vcenter_perf.sh スクリプトを定期的に実行する cron ジョブを作成します。たとえばスクリプトを 15 分ごとに実行するには、次のように指定します。
*/15 * * * * LD_LIBRARY_PATH=:/opt/vmware/vma/lib64:/opt/vmware/vma/lib /var/log/vmware/cron_vcenter_perf.sh
vCenter スクリプトの理解
このセクションでは、使用しているバージョンに応じて、query_vCenter.pl スクリプトまたは query_vCenter5.5.pl スクリプトに関するいくつかの重要なタスクを順を追って説明します。これらのスクリプトは、イベントに関するクエリを vCenter Server に対して実行します。
トラブルシューティングと手動テスト
query_vCenter.pl スクリプトをテストしてから、CRON ジョブをセットアップします。
query_vCenter.pl スクリプトをテストするには、すべてのスクリプトを保持しているフォルダ (例: /var/log/vmware) に移動し、次を実行します。
query_vCenter.pl -s [vcenterserver] -f output.txt
([vCenterServer] は、使用環境内のターゲット vCenter Server の名前に置き換えます)。
標準出力では、クエリ時間範囲と収集されたイベント数が表示されます。イベント自体は output.txt ファイルに格納されます。ユーザ名またはパスワードの入力を求められたら、ターゲット VCenter Server の資格情報が適切に設定されていないということです。デフォルトでは、query_vCenter が初めて呼び出されるとき、過去 24 時間のイベントが収集されます。過去 24 時間より前のイベントを収集する場合は、「履歴イベントの収集」を参照してください。
履歴イベントの収集
デフォルトでは、query_vCenter.pl が初めて呼び出されるとき、過去 24 時間のイベントが収集されます。スクリプトが呼び出されるたびに、最後に読み込まれたイベントのタイムスタンプを .timelog ファイルに書き出し、次の呼び出しに備えます。
過去 24 時間より前のイベントを収集する場合は、cron_vcenter_events.sh の CRON ジョブをセットアップする前に、VMA マシンで次を実行します。
履歴イベントを収集するには、次の手順を実行します。
- /home/vi-admin の vi-admin ホーム ディレクトリに移動します。
- すべての VMware 用 Sumo Logic スクリプトが存在する場所をポイントするように、
SCRIPT_PATH
環境変数を設定します。例:vi-admin@vma1:~> export SCRIPT_PATH=/var/log/vmware
- 次のように query_vCenter.pl スクリプトを実行します。
./query_vCenter.pl --server <vcenter server> --target <syslog host>:<syslog port> --bT <time in UTC>
./query_vCenter.pl --server 192.168.23.242 --target vmahost:1514 --bT 2012-10-08T00:17:00.00Z
このコマンドが正常に完了したら、「イベント メッセージの収集」の手順 2 で説明するように、CRON ジョブをセットアップして進行中のイベントの取得を開始できます。
パフォーマンス収集のセグメント化
vCenter Server に関連する ESXi サーバのパフォーマンス データの収集は、各 ESXi サーバから連続的にデータを取得することで可能になります。vCenter に関連するサーバの数が多くなると、遅延が発生する可能性があります。遅延を回避するには、vCenter Server に関連する ESXi サーバのリストから複数のセグメントを作成して、収集を並列化します。セグメント数は、収集しているデータ量とパフォーマンス データを収集する頻度に応じて変わります。
たとえば 1 台の vCenter Server に 100 台の ESXi サーバが関連付けられている場合、パフォーマンス収集スクリプトがすべての ESXi サーバからデータを収集するのに 2 分以上かかります。2 分ごとにパフォーマンス データ スナップショットを収集する必要がある場合は、cron_vcenter_perf.sh スクリプトの 2 つ以上のインスタンスに収集をセグメント化して、収集を並列化します。
または 100 台の ESXi サーバと 5 つのセグメントがある場合、各セグメントには 20 台のサーバが含まれます。ただし、サーバの数が奇数の場合、たとえば 145 台のサーバと 6 つのセグメントの場合、5 つのセグメントに 24 台のサーバ、最後 (6 つ目) のセグメントには 20 台のサーバが含まれることになります。
セグメントの合計数は -segments
オプションで指定され、実行するセグメント番号は segment_number
オプションで指定されます。
複数のセグメントから収集するには、 -test
オプションを使用して、ESXi サーバがセグメントにどのように分割されるかをテストできます。たとえば、2 つのセグメントがあり、どのサーバが各セグメントに割り当てられるかをテストするには、次のコマンドを実行します。
$SCRIPT_PATH/getserver_perf.pl -test -type=vcenter -path=$SCRIPT_PATH -server_file=$SCRIPT_PATH/vcenter.info -output_file=$SCRIPT_PATH/vcenter_segments.perf.out -segments=2 -segment_number=1 | /bin/logger
次に、セグメント 1 のみのパフォーマンス データを取得するには、次のコマンドを実行できます。
$SCRIPT_PATH/getserver_perf.pl -type=vcenter -path=$SCRIPT_PATH -server_file=$SCRIPT_PATH/vcenter.info -output_file=$SCRIPT_PATH/vcenter_segment-3.perf.out -segments=2 -segment_number=1 | /bin/logger
など。
セグメントのデータを収集する時間に問題がない場合は、cron_vcenter_perf.sh スクリプトに基づいて、各セグメントのデータを収集する複数のスクリプトを作成します。これらのスクリプトが必要な頻度に基づいて cron ジョブとして実行されるようにスケジュールします。
ログ メッセージのサンプル
2017-09-25 22:09:45.123 +0000 2013-11-19T10:03:35.042999Z ,,, message=Task: Delete virtual machine,,,user=SUMO\USER,,,vm=VMNAME,,,host=HOSTNAME.sumolab.org
クエリのサンプル
vCenter ユーザ アクティビティ
_sourceCategory=esx_perf OR _sourceCategory=vcenter_log "message=User "
| parse "message=User * *,,," as user,task
| timeslice 5m
| count as count by _timeslice,task
| transpose row _timeslice column task as *
平均メモリ使用量 (MB)
_sourceCategory=esx_perf OR _sourceCategory=vcenter_log "Memory" AND "NonKernel MBytes"
| parse "\\\\*\\Memory\\NonKernel MBytes: *" as esx_server,mbytes
| timeslice by 1h
| avg(mbytes) as mbytes by _timeslice,esx_server
| transpose row _timeslice column esx_server