VMware ULM アプリケーションのログとメトリクスの収集
VMware ULM アプリケーションは、VMware のクラウド コンピューティング仮想化プラットフォームからログとメトリクスを収集し、事前定義されたダッシュボードにデータを表示します。このアプリケーションにより、vCenter、ESXi ホスト、および VM メトリクスとイベントをモニタリングできます。
このページでは、VMware のログとメトリクスを収集する手順を説明します。リンクをクリックして、トピックに移動してください。
- ステップ 1: データを収集するためのサーバ、ホスト、または VM のセットアップ
- ステップ 2: Collector のダウンロードとインストール
- ステップ 3: VMware ULM アプリケーションのログとメトリクスの収集
- ステップ 4: パスワードの暗号化
- ログ メッセージのサンプル
- クエリのサンプル
- トラブルシューティング
ステップ 1: データを収集するためのサーバ、ホスト、または VM のセットアップ
次の 2 つの方法のいずれかを使用して、VMware ULM アプリケーションのデータを収集するようにサーバをセットアップできます。このセクションでは、次の両方の手順を説明します。
- Sumo Logic VM テンプレートを使用して、Sumo Logic スクリプトが事前にインストールおよび設定されている、事前設定済みの VM を作成します。ログとイベントを収集するための Sumo Logic VM は、vSphere SDK for Python (pyvmomi) および Sumo Logic スクリプトを含むアプライアンス (Ubuntu 仮想マシン) です。
- vCenter Server に、または vCenter API へのアクセスが可能な他のホストに、イベントおよびメトリクスを収集するための Sumo Logic スクリプトをインストールします。
データを収集するための Sumo Logic VM のセットアップ
このセクションでは、VMware のデータを収集するために必要なスクリプトが事前にインストールおよび設定されている Sumo Logic VM をセットアップするプロセスを順を追って説明します。
スクリプトが事前にインストールされている Sumo Logic VM をセットアップするには、次の手順を実行します。
- このリンクから VM テンプレート (.zip ファイル) をダウンロードします。
- [File (ファイル)] > [Deploy Template (テンプレートのデプロイ)] を選択します。
- 資格情報 sumoadmin/sumoadmin を使用してログインします。
vCenter Server、別のホスト、または VM への Sumo Logic スクリプトのインストール
このセクションでは、イベントおよびメトリクスを収集するための Sumo Logic スクリプトを vCenter Server または vCenter API にアクセスできる他のホストにインストールするプロセスを順を追って説明します。最後に、vCenter Server、ホスト、VM 上のいずれであれ、スクリプトを実行するようにパスを設定する手順を説明します。
Sumo Logic スクリプトをインストールして設定するには、次の手順を実行します。
-
サーバ、ホスト、または VM 上で、VMware 用 Sumo Logic スクリプトの Sumo Logic スクリプトを格納するディレクトリを作成します。ディレクトリには /var/log/vmware といった名前を付けることをお勧めします。
-
sumo-vsphere-ulm.zip から Sumo Logic VMware スクリプトをダウンロードし、先ほど作成したディレクトリに格納します。
-
Python バージョン 3.6 以降をインストールします。
-
pyvmomi 6.7.3 をインストールします。pip install pyvmomi==6.7.3 と入力します。
-
Sumo Logic VMware スクリプトを実行するユーザ アカウントに、sumo-vsphere-ulm.zip ファイルが展開されるディレクトリに対する完全な読み取り/書き込み/実行権限があることを確認します。
-
cron_vcenter_events.sh スクリプトを編集して、スクリプトが存在する絶対パスを反映するように SCRIPT_PATH 変数を変更します。
ステップ 2: Collector のダウンロードとインストール
Installed Collector とは、Source からログとメトリクスを受け取り、データを暗号化して圧縮した状態で Sumo サービスに送信する Java エージェントです。Collector をインストールまたは再起動すると、Collector はサービスとして自動的に開始されます。
Collector をインストールしてログとメトリクスを収集する場合、このリンクでインストール手順を確認してください。
ステップ 3: VMware ULM アプリケーションのログとメトリクスの収集
このセクションでは、VMware ULM 用 Sumo Logic アプリケーションのログとメトリクスを収集するために、vCenter Server、ホスト、または VM をセットアップする方法を説明します。リンクをクリックして、トピックに移動してください。
A. イベント メッセージの収集
イベントは vCenter Server でイベント メッセージをトリガするアクションです。イベント メッセージはログ記録されませんが、代わりに vCenter Server データベースに格納されます。VMware 用 Sumo Logic Collector は、vSphere python SDK を使用してこれらのメッセージを取得します。
この手順には、次の作業があります。
- ログの収集の設定 - Sumo Logic スクリプトを格納するディレクトリから python スクリプトを実行してテストします。
-
syslog またはファイル Source の設定 - Sumo Logic Syslog Source は、syslog サーバのように動作し、syslog メッセージを受信する指定ポートをリッスンします。このスクリプトは、syslog サーバをサポートし、ローカルまたはリモートのファイル Source で取り込めるテキスト ファイルを生成できます。ローカル ファイル Source は、接続の再試行が不要で、ファイルの最後のポインタから読み込む必要もなく、Collector エラー時でもデータが失われないという点で syslog より優れているため、お勧めします。必要に応じて、syslog Source か、ローカルまたはリモート ファイル Source を設定できます。
ログの収集を設定するには、次の手順を実行します。
- イベントについてのクエリを vCenter Server に対して実行してイベントを Sumo Logic に送信する events.py スクリプトをテストするには、Sumo Logic スクリプトのディレクトリに移動して、次のコマンドで events.py スクリプトを実行します。異なる Source タイプの例を示します。
python3 events.py -s [vcenterserver] -u [username] -p [password] -f output.txt
例 1: ファイル出力を使用。この例ではローカルまたはリモート ファイル Source を使用します。
# python3 $SCRIPT_PATH/events.py -s 192.168.124.29 -t sumologic_host -to sumologic_host_port -u sumoadmin -p sumoadmin -f /var/log/vmware/output/vsphere_events
例 2: syslog と、特定のログ ファイル接頭辞の付いた特定のログ ディレクトリを使用。syslog Source を使用してログを取り込みます。
# python3 $SCRIPT_PATH/events.py -s 192.168.124.29 -t sumologic_host -to sumologic_host_port -u sumoadmin -p sumoadmin -l /var/log/vmware/log/vsphere_events
例 3: syslog と、特定のログ ファイル接頭辞の付いた特定のログ ディレクトリ、そして暗号化されたパスワードを使用。syslog Source を使用してログを取り込みます。
# python3 $SCRIPT_PATH/events.py -s 192.168.124.29 -t sumologic_host -to sumologic_host_port -u sumoadmin -pK 'xgb8NJ3ZYPJbzX6vWHySZbLd73bKWPsGMKoSnry7hL4=' -p 'gAAAAABb6asvlRfxEj_ZQTKOyrqnGNMbfo_kpxrqv4DCO6TorS4FmKFzrepe0_xtiMT67ZT6OOf5bfrVZXNnUDFNlwPWrpFSfg==' -pE True -l /var/log/vmware/log/vsphere_events
デフォルトでは、スクリプトはまず過去 24 時間のデータを収集して、テストの目的で狭い時間範囲のデータを取得します。-bT パラメータは、データ収集を開始する時間 (例: 1 時間前) に設定します。
python3 events.py -s <vcenter server> -t <syslog host> -to <syslog host port> -bT <time>
For Example:
python3 events.py -s 192.168.23.242 -t vcenterhost -to 1514 -bT '2012-10-08 00:17:00.000+0000'
スクリプトは、以下のパラメータをサポートします。
-s: 接続先のリモート vCenter Server。必須パラメータです。
-o: 使用するリモート vCenter Server ポート (デフォルトは 443)。省略可能。
-u: vCenter Server に接続するために使用するユーザ名。必須。
-p: vCenter Server に接続するために使用するパスワード。必須。
-f: 出力ファイルの接頭辞。ターゲット syslog サーバまたはファイルが必要です。
-ts: タイムスタンプ ファイル。デフォルトは ‘.timelog_events’ です。省略可能。
-t: ターゲット Sumo Logic syslog サーバ。ターゲット syslog サーバまたはファイルが必要です。
-to: 使用するターゲット Sumo Logic ポート (デフォルトは 514)。省略可能。
-bT: イベントのクエリを開始する時間。デフォルトは現在時刻です。
-eT: イベントのクエリを終了する時間。デフォルトは現在時刻の 24 時間前です。
-sC: 接続用の SSL 証明書。省略可能。
-l: ログ ファイル接頭辞。デフォルト: ‘vsphere_events_’。デフォルトでは、実行ディレクトリにログ ファイルが作成されます。フル ログ パスおよび接頭辞も指定できます。例: -l C:\Users\user6\vsphere_events (vsphere_events はログ接頭辞)。ログ ファイルは、接頭辞と現在のタイムスタンプで作成されます。
-pE: パスワードを暗号化するかどうか。デフォルトは false です。省略可能。
-pK: パスワードの暗号化鍵。-pE が true の場合は必須です。
- 出力に問題がなければ、必須パラメータを使用して cron_vcenter_events.sh を修正し、cron_vcenter_events.sh スクリプトを希望する感覚で定期的に実行する cron ジョブを作成します。
- syslog Source を使用する場合は、Sumo Collector がインストールされているターゲットとターゲット ポートのパラメータを指定してください。ローカルまたはリモート Source を使用する場合は、ファイル パラメータでファイルを生成して、ローカル ファイル Source の場合はファイル パス、リモート ファイル Source の場合はパス式を設定してください。
- cron ジョブは root として実行するか、またはスクリプト ディレクトリへの読み書きアクセス権を持つユーザとして実行する必要があります。
- 詳細については、シェル スクリプトの設定オプションを参照してください。
ファイル Source の場合は、次のいずれかの方法でローカルまたはリモート ファイル Source を設定します。
-
スクリプトと Sumo Logic Collector が同じサーバ上に存在する場合は、これらのステップに従ってローカル ファイル Source を設定します。ローカル ファイル Source の場合は、ファイル パスを設定します。-f フラグを使用して、上のセクションで説明した出力ディレクトリと等しいパス式を設定します。例:
/var/log/vmware/output/
-
スクリプトと Sumo Logic Collector が異なるサーバ上に存在する場合は、これらのステップに従ってリモート ファイル Source を設定します。リモート ファイル Source のパス式を設定します。-f フラグを使用して、上のセクションで説明した出力ディレクトリと等しいパス式を設定します。例:
/var/log/vmware/output/
syslog Source の場合は、次の方法で syslog Source を設定します。
- [Manage Data (データの管理)] > [Collection (コレクション)] > [Collection (コレクション)] に移動し、[Add Source (Source の追加)] をクリックします。
- [Syslog] を Source タイプとして選択します。
- この Source に対して表示する [Name (名前)] を入力します。Source 名メタデータは _sourceName という検索可能なフィールドに格納されます。
- [Protocol (プロトコル)] では TCP を選択します。
- Source がリッスンする (ご使用の Collector に対応した) 正確なポート番号を入力します (1514 など)。
- [Source Category] には、vcenter_events を使用することをお勧めします。
-
[Advanced (詳細設定)] で、次のオプションを設定します。
- [Extract timestamp information from log file entries (ログ ファイル エントリからタイムスタンプ情報を抽出する)] を選択します。
- [Ignore time zone from log file and instead use (ログ ファイルのタイム ゾーンを無視して、次を使用します)] を選択して、メニューから [UTC] を選択します (以下を参照)。
- [Save (保存)] をクリックします。
B. パフォーマンス メトリクスの収集
パフォーマンス メトリクスの収集では、スクリプトを使用して vCenter パフォーマンス API を呼び出し、パフォーマンス統計情報を抽出します。
vCenter Server に関連付けられた ESXi サーバのパフォーマンス データの収集は、複数のスレッドを使用して、各 ESXi サーバから並行してデータを取得することで可能になります。スレッド数は、収集するデータの量と収集頻度に応じて変わります。
スレッド数は、sumo.json config ファイル内の THREADSIZE_POOL プロパティを使用して制御できます。また 1 つのスレッドによって処理されるオブジェクトの数は、BATCH_MORLIST_SIZE プロパティを使用して制御できます。次はすべての設定プロパティについての説明です。
BATCH_MORLIST_SIZE: Default 50, Simultaneous objects processed by a single thread for retrieving the performance data. THREADSIZE_POOL: Default 5, Number of threads SSL_VERIFY: Default False, if using SSL, set as True SSL_CAPATH: Certificate absolute path if SSL_VERIFY is True
パフォーマンス メトリクスを収集するには、次の手順を実行します。
- 手順に従って、ストリーミング メトリクス Source を設定します。
- 必要に応じて、バンドルされている sumo.json プロパティ ファイル内のプロパティを編集します。
- Sumo Logic スクリプトのディレクトリに移動し、その場所から次のコマンドを使用して esx_perf_metrics_6_5.py スクリプト (イベントについてのクエリを vCenter Server に対して実行する) を実行します。
python3 esx_perf_metrics_6_5.py -u [username] -p [password] -s [vcenter server] -t [target server] -to [target port] -cf [config filename]
例 1: メトリクス ストリーミング Source と、特定のログ ファイル接頭辞の付いた特定のログ ディレクトリを使用。
# python3 $SCRIPT_PATH/esx_perf_metrics_6_5.py -s 192.168.124.29 -t sumologic_host -to sumologic_host_port -u sumoadmin -p sumoadmin -cf $SCRIPT_PATH/sumo.json -l /var/log/vmware/log/metrics
例 2: 特定のログ ファイル接頭辞の付いた特定のログ ディレクトリと、暗号化されたパスワードを使用。
# python3 $SCRIPT_PATH/esx_perf_metrics_6_5.py -s 192.168.124.29 -t sumologic_host -to sumologic_host_port -u sumoadmin -cf $SCRIPT_PATH/sumo.json -l /var/log/vmware/log/vsphere_metrics -pK 'xgb8NJ3ZYPJbzX6vWHySZbLd73bKWPsGMKoSnry7hL4=' -p 'gAAAAABb6asvlRfxEj_ZQTKOyrqnGNMbfo_kpxrqv4DCO6TorS4FmKFzrepe0_xtiMT67ZT6OOf5bfrVZXNnUDFNlwPWrpFSfg==' -pE True
スクリプトは、以下のパラメータをサポートします。
-s: 接続先のリモート vCenter Server。必須パラメータです。
-o: 使用するリモート vCenter Server ポート (デフォルトは 443)。省略可能。
-u: vCenter Server に接続するために使用するユーザ名。必須。
-p: vCenter Server に接続するために使用するパスワード。必須。
-ts: タイムスタンプ ファイル。デフォルトは ‘.timelog_metrics’ です。
-t: ターゲット Sumo Logic syslog サーバ。必須。
-to: 使用するターゲット Sumo Logic ポート (デフォルトは 514)。省略可能。
-cf: 設定ファイル。必須。
-l: ログ ファイル接頭辞。デフォルト: ‘vsphere_metrics_’。デフォルトでは、実行ディレクトリにログ ファイルが作成されます。フル ログ パスおよびログ接頭辞も指定できます。例: -l C:\Users\user6\vsphere_metrics (vsphere_metrics は必須のログ接頭辞)。ログ ファイルは、接頭辞と現在のタイムスタンプで作成されます。
-pE: パスワードを暗号化するかどうか。デフォルトは false です。省略可能。
-pK: パスワードの暗号化鍵。-pE が true の場合は必須です。
- Sumo Logic でメトリクスがキャプチャされていることを確認します。
- バッチとスレッドの設定に問題がなければ、必須パラメータを使用して cron_vcenter_metrics.sh を修正し、cron_vcenter_metrics.sh スクリプトを希望する間隔で定期的に実行する cron ジョブを作成します。
- cron ジョブは root として実行するか、またはスクリプト ディレクトリへの読み書きアクセス権を持つユーザとして実行する必要があります。
- 詳細については、シェル スクリプトの設定オプションを参照してください。
cron_vcenter_metrics.sh スクリプトを (sudo crontab -e オプションを使用して) 15 分おきに実行するサンプル cron ジョブを使用するには、次の行を追加します。
*/15 * * * * /var/log/vmware/cron_vcenter_metrics.sh
C. 履歴イベントの収集
デフォルトでは、events.py が初めて呼び出されるとき、過去 24 時間のイベントが収集されます。スクリプトが呼び出されるたびに、最後に読み込まれたイベントのタイムスタンプを .timelog_events ファイルに書き出し、次の呼び出しに備えます。
過去 24 時間より前のイベントを収集するには、cron_vcenter_events.sh の CRON ジョブをセットアップする前に、次のようにスクリプトを実行します。
python3 events.py -s <vcenter server> -t <syslog host> -to <syslog host port> -bT <time>
syslog サーバには、Sumo Logic Collector がインストールされているマシンの IP アドレスまたはホスト名が反映されている必要があります。syslog_port には、vCenter Server イベントを収集する Source にセットアップしたポート番号が反映されている必要があります。たとえば、2012 年 10 月 8 日 5:00 pm からすべてのイベントを収集する場合は、次のコマンドを実行します。
python3 events.py -s 192.168.23.242 -t vcenterhost -to 1514 -bT '2012-10-08 00:17:00.000+0000'
このコマンドが正常に完了したら、cron ジョブをセットアップして進行中のイベントを取得できます。
ステップ 4: パスワードの暗号化
スクリプトは、python Fernet 実装を使用して、非対称認証の暗号 (秘密鍵認証) をサポートしています。
暗号化を使用するには、python コマンド ラインから鍵を生成します。
>>> from cryptography.fernet import Fernet >>> print(Fernet.generate_key()) b'xgb8NJ3ZYPJbzX6vWHySZbLd73bKWPsGMKoSnry7hL4='
python コマンド ラインからパスワードを暗号化します。
>>> from cryptography.fernet import Fernet >>> key = b'xgb8NJ3ZYPJbzX6vWHySZbLd73bKWPsGMKoSnry7hL4=' >>> s = Fernet(key) >>> text = s.encrypt(b"secretpassword") >>> print(text) b'gAAAAABb6asvlRfxEj_ZQTKOyrqnGNMbfo_kpxrqv4DCO6TorS4FmKFzrepe0_xtiMT67ZT6OOf5bfrVZXNnUDFNlwPWrpFSfg=='
暗号化されたパスワードと鍵を含めるようにスクリプトを変更します。
メトリクスの例:
python3 esx_perf_metrics_6_5.py -u [username] -pK 'xgb8NJ3ZYPJbzX6vWHySZbLd73bKWPsGMKoSnry7hL4=' -p 'gAAAAABb6asvlRfxEj_ZQTKOyrqnGNMbfo_kpxrqv4DCO6TorS4FmKFzrepe0_xtiMT67ZT6OOf5bfrVZXNnUDFNlwPWrpFSfg==' -s 192.168.20.121 -t 127.0.0.1 -to 2003 -cf sumo.json -pE True
イベントの例:
python3 events.py -s 192.168.20.121 -u [username] -f outfile -pK 'xgb8NJ3ZYPJbzX6vWHySZbLd73bKWPsGMKoSnry7hL4=' -p 'gAAAAABb6asvlRfxEj_ZQTKOyrqnGNMbfo_kpxrqv4DCO6TorS4FmKFzrepe0_xtiMT67ZT6OOf5bfrVZXNnUDFNlwPWrpFSfg==' -pE True
ログ メッセージのサンプル
2018-11-15 17:39:09.569 +0530 ,,, message=Error detected for sumo-win2k8-a-4 on xx1.sumolabs.com in Production1-West: Agent can't send heartbeats.msg size: 612, sendto() returned: Operation not permitted.,,,eventType=<class 'pyVmomi.VmomiSupport.vim.event.GeneralVmErrorEvent'>,,, vm=ubuntu16.04-b-4,,,host=8df.sumolabs.com,,,datacenter=Production3-East,,, computeResource=esx1.sumolabscluster.com,,,key=3553,,,chainId=3269
クエリのサンプル
次のクエリは、[vCenter Errors - Analysis (vCenter エラー - 分析)] ダッシュボードの [vSphere Errors Trend (vSphere エラーの傾向)] パネルからのものです。
_sourceCategory = Labs/VMWare6.5 and ("error" or "fail" or "critical") | parse "message=*,,," as err_msg | parse "host=*,,," as esx_host | parse "eventType=*,,," as event_type | parse "vm=*,,," as vm nodrop | parse "computeResource=*,,," as cluster | where esx_host matches {{esx_host}} and cluster matches {{cluster}} and event_type matches {{event_type}} | timeslice 1h | count(err_msg) as err_count by _timeslice | compare with timeshift 1d 7
トラブルシューティング
-
スクリプトには、ログを生成しタイムスタンプを保持するディレクトリに対する読み取りおよび書き込み権限が必要です。
-
スクリプトで python が使用されるため、python がインストールされている必要があります。
-
スクリプトは、問題発生時に確認できるログを生成します。
-
スクリプトが実行されるたびに、設定された作業ディレクトリにログが生成されます。
-
ESXi サーバでは多くの API がサポートされていないため、スクリプトは ESXi サーバではなく vCenter Server に接続する必要があります。
-
スクリプトは実行されているものの、Collector が実行されていない場合は、メトリクスとイベントは失われます。そのような場合、Collector が再度実行されているときに、.timelog_events ファイルと .timelog_metrics ファイルのタイムスタンプを必要な開始時間に更新します。これにより過去のデータを取得できるようになります。スクリプトが過去のデータを取得した後は、通常の処理が継続されます。
-
vSphere pyvmomi sdk は、一部のイベントでは parse 例外を返します。
-
これらのような問題が発生した場合は、vmware_constants.py ファイルのイベント リストから該当するイベントを削除してください。
-
イベント リストに登録されていないイベントを追加することもできます。
-
SDK でイベントが修復されたら、下記のリストを event_type_list = [] として空白にすることで、すべてのイベントを取得できます。
-
“pyVmomi.VmomiSupport.UnknownWsdlTypeError: 'ContentLibrary'” というエラー メッセージが表示された場合は、vmware_constants.py から TaskEvent と EventEx を削除してからやり直してください。
-