Elevate コミュニティ カンファレンスで LogicMonitor ユーザー仲間に加わり、弊社の最新製品イノベーションを実際に体験してください。

今すぐ登録

ソリューション

MSP、エンタープライズIT、またはその中間のどこで作業していても、ソリューションは明確です。

ソリューションの概要

その他

当社のブログ、ガイド、ケーススタディ、電子書籍、その他の実用的な洞察を活用して、IT 監視と観測性を強化してください。

リソースを表示

会社概要

LogicMonitor と私たちのチームについて知りましょう。

会社概要

ドキュメント

ドキュメントを読んだり、最新のリリース ノートを確認したり、ワールドクラスのカスタマー サービス チームにチケットを送信したりしてください。

リソースを表示

VMware vSphereの監視

最終更新日: 08 年 2025 月 XNUMX 日

LogicMonitor は、すぐに使用できる VMware vSphere の監視を提供します。 この監視スイートは、vSphere Web サービスと自動化 API を利用して、VMware vCenter Server Appliance (VCSA)、VMware ESXi ホスト、および仮想マシンを監視します。

技術タイプ

サーバーおよび運用ハードウェア

互換性

2023 年 XNUMX 月の時点で、LogicMonitor の VMware vSphere パッケージは以下と互換性があることが知られています。

  • VMware vCenter Server Appliance 6.7 ~ vCenter Server 8.0.x
  • VMware ESXi 6.5 GA ~ ESXi 8.0.x

セットアップ要件

  • VMware vSphere ロジックモジュール
  • LogicMonitor_Collector_Snippets データソース
  • コレクター 32.400 以降
  • vCenter および ESXi 読み取り専用ユーザーの認証情報
  • VMware ツール
    VMware Tools は次からダウンロードできます。 VMWare カスタマーコネクト.

Note: vSphere パフォーマンス カウンターを有効にし、デフォルト設定 (カウンター レベルと間隔) で構成する必要があります。 デフォルト以外の構成を使用すると、一部のデータポイントでデータが適切にレポートされなくなる可能性があります。

VMware vSphere モジュールは次のカテゴリに分類されます。

  • ESXi ホストの監視
  • vCenter アプライアンスのランタイムの監視
  • さまざまな vSphere オブジェクト (データストア、仮想マシン、クラスターなど) を監視します。

カテゴリが異なれば、必要なユーザー権限も異なります。

次の表に、VMware vSphere モジュールが監視するカテゴリと、各カテゴリに必要なユーザー権限を示します。

カテゴリー必要なユーザー権限
ESXiホストローカル読み取り専用ユーザー

Note: 注: vSphere は現在、ESXi ホストのドメイン ユーザーをサポートしていません。詳細については、VMware:ESXi 7.x の次のバージョンに該当するドキュメントを参照してください。 VMware Host Client での ESXi ユーザーの追加
ESXi 8.x: VMware Host Client での権限の管理

vCenter アプライアンスのランタイム無し
さまざまな vSphere オブジェクト (データストア、仮想マシン、クラスターなど)ユーザーは次の場所に配置できます。
  • vCenter シングル サインオン (SSO) ドメイン
    \@vsphere.local 初期設定で
  • Active Directory (AD) ドメイン
  • AD ドメインを SSO 構成に追加する必要があります。
  • ローカルユーザー
  • 通常、次を使用して追加されます。 localaccounts.user.add アプライアンス API の CLI コマンド

VMware vCenter アプライアンス

vCenter Appliance のランタイムを監視するには、次のものを使用できます。

  • ドメインユーザー- ユーザーはデフォルトの SSO グループに割り当てられる必要があります。 SystemConfiguration.Administrators.

Note: これらのモジュールは vCenter Appliance 全体のランタイム統計 (CPU/メモリ/ファイルシステムの使用率、実行中のサービスなど) を監視するため、管理者権限が必要です。

  • ローカル ユーザー- ユーザーはスーパー管理者の役割に割り当てられる必要があります。

Note: SSO グループ SystemConfiguration.Administrators が以前に削除されていた場合は、新しいグループを作成して SystemConfiguration.Administrators という名前を付けることで復元できます。さらに、次のコマンドを実行して SSO グループを復元することもできます: /usr/lib/vmware-vmafd/bin/dir-cli ssogroup create –name SystemConfiguration.Administrators

ユーザーを S に割り当てるystemConfiguration.administrator グループは、ユーザーを管理者グループに割り当てるのとは異なる権限のセットを提供します。デフォルトでは、 SystemConfiguration.A dministrator このグループでは、ユーザーは VAMI (https://:5480) へのアクセスのみを許可され、vCenter 環境へのアクセスは許可されません。 

VMware vCenter Appliance と vSphere Monitoring に同じユーザーを使用する

1 人のユーザーを vSphere と vCenter Appliance の両方の監視に使用できます。

次の権限が必要です。

ユーザータイプ必要な権限
ドメインユーザー
  • SystemConfiguration.Administrator グローバル権限による SSO グループ読み取り専用ロール、 子供たちに伝播する 使用可能
ローカルユーザー
  • スーパー管理者のローカルロール、グローバル権限による読み取り専用ロール、 子供たちに伝播する 有効になりました。

ESXiホストのユーザーの作成

正確なプロセスは ESXi バージョンによって異なります。詳細については、次を参照してください。 VMware Host Client での ESXi ユーザーの追加 VMware から。 

vSphere のユーザーの作成

詳細については、を参照してください。 vCenter Single Sign-On ユーザーの追加 VMware から。

vCenter Appliance 監視用のユーザーの作成

詳細については、を参照してください。 vCenter Server Appliance でのローカル ユーザー アカウントの作成 VMware から。

Note: ドメインに関係なく、監視には少なくとも読み取り専用のグローバル権限が必要です。ユーザーを作成した後、読み取り専用ユーザー グループにグローバル権限を割り当てる必要があります。モジュールがデータを収集できるようにするには、 子供たちに伝播する 有効にする必要があります。

モニタリングにリソースを追加する

次の方法を使用して VMware vSphere リソースを追加できます。

特定の VMware vCenter に対して、拡張スクリプト Netscan は、データセンター、クラスター、リソース プール、ユーザー定義の vCenter フォルダー、ESXi ホスト、および仮想マシンの vCenter 組織構造に一致するように、ネストされたリソース グループとリソースを含むリソース グループを作成します。 NetScan のプロパティとフィルタを使用すると、どのリソース グループを作成するか、またどの ESXi ホストと仮想マシンをリソースとして LogicMonitor に追加するかを制御できます。 Advanced Netscan の使用の詳細については、次を参照してください。 強化されたスクリプト ネットスキャン.

警告: LogicMonitor の推奨フィルター (一覧表示) を構成しない場合、NetScan は、ターゲット vCenter 環境で定義されているすべての ESXi ホストおよび仮想マシンを個別の LogicMonitor リソースとして追加しようとします。

  1. あなたの中で ロジックモニターポータル > モジュール > 応募者と、VMware vSphere LogicModule をインストールします。
  2. MFAデバイスに移動する  「リソース」 > 「追加」 > 「複数のデバイス」 > 「高度な NetScan」.
    この 高度な NetScan を追加する ページが表示されます
  3. この NetScan に関連付ける名前を入力します。 たとえば、「VMware vCenter」や「VMware vSphere」などです。 
  4. NetScan を実行するコレクタを選択します。
    デフォルトでは、NetScan は NetScan を実行するコレクタに新しいリソースを割り当てます。
  5. 選択する 強化されたスクリプト NetScan   方法 ドロップダウンリスト。
  6. 「拡張スクリプト」セクションから、次を選択します。 デバイスの資格情報 > このスキャンにはカスタム認証情報を使用します。
  7. NetScan に必要な VMware API 認証情報を提供する次のプロパティを追加し、NetScan がリソースを作成および編成する方法と場所を変更します。
プロパティ必須
vcenter.uservCenter 読み取り専用ユーザー[メール保護]はい
vcenter.passvCenter 読み取り専用パスワード************はい
vcenter.ホスト名vCenter のホスト名

vcenter.url が設定されていない場合は、この値を使用して vCenter への接続が試行されます。
IPアドレスまたはFQDNはい
vcenter.urlVCSAにアクセスするためのURLhttps://<vcenter.hostname>/sdkいいえ
vcenter.ignore.proxyLogicMonitor にプロキシが設定されていて、vCenter には設定されていない場合、このプロパティを使用すると、vCenter にアクセスするときにプロキシの使用をバイパスできますが、LM API 呼び出しのプロキシ設定は保持されます。 コレクタープロキシ ESXi または vCenter ホストを除外する方法の詳細については、こちらをご覧ください。いいえ
esx ユーザーESXi ホストへの接続に使用する認証情報

すべての ESXi ホストに同じ認証情報が使用されます。 このプロパティが設定されていない場合は、vCenter に指定された認証情報が使用されます。 提供された認証情報でホストに接続できない場合でも、デバイスは検出されるため、認証情報を ESXi ホスト リソースまたは親リソース グループに手動で設定する必要があります。
読み取り専用ユーザーいいえ
esx.パスESXi ホストへの接続に使用する認証情報。************いいえ
lmaccess.id またはlogicmonitor.access.id
ポータルにリソースを追加する前に NetScan で重複リソースを検索するための LogicMonitor API アクセス ID。ポータル監視の詳細については、「LogicMonitor ポータル監視」を参照してください。はい
lmaccess.key またはlogicmonitor.access.keyポータルにリソースを追加する前に NetScan で重複リソースを検索するための LogicMonitor API キー。ポータル監視の詳細については、「LogicMonitor ポータル監視」を参照してください。はい
ホスト名.ソースNetScan で使用されるホスト名のソースを選択できます。 これは、既存のリソースに競合が見つかった場合に、重複したデバイスの作成を防ぐのに役立ちます。 詳細については、「NetScan のトラブルシューティング」を参照してください。いいえ

追加のオプションのプロパティを設定して、デバイスを LogicMonitor に正確に追加する方法と、フォルダー構造の作成方法を変更できます。

プロパティデフォルト
ルートフォルダ検出されたすべてのデバイスが LogicMonitor に配置されるルート フォルダー。 値は入れ子にすることができます。 リソース グループが存在しない場合は、NetScan によって作成されます。Customer01/VMware無し
Discover.esxitrue の場合、LogicMonitor は esxi ホストを追加します。
Note: このプロパティは仮想マシンの検出には影響しません。これらのプロパティは個別に切り替えることができます。
真偽true
Discover.vmtrue の場合、LogicMonitor は VM を検出します。

Note: このプロパティは ESXi 検出には影響しません。これらのプロパティは個別に切り替えることができます。

真偽 true
view.vmsAndTemplatesVM とテンプレートのインベントリ ビューの作成に切り替えます。
データセンター > クラスター > フォルダー > VM

LogicMonitor はこのフォルダー構造を再作成します。
注意: オプションに関係なく、VM テンプレートは検出されません。
真偽true
view.hostAndCluster切り替えて、ホストとクラスターのインベントリ ビューを作成します。
データセンター > クラスタ > ホスト > リソース プール > VM

true の場合、LogicMonitor はこのフォルダー構造を再作成します。
真偽true
view.standaloneVmホストとクラスターのビューが使用されるとき、およびリソース プールにない VM がスタンドアロン VM と呼ばれるデフォルトのフォルダーに配置されるときを切り替えます。

LogicMonitor はこのフォルダー構造を再作成します。 
真偽 true
  1. [フィルター] セクションで、次のフィルター プロパティを使用して、特定のリソース (仮想マシン、ESXi ホスト) を検出から除外します。

    これらのフィルターは、Active Discovery フィルターと同じように動作します。 次のデバイス レベルのプロパティが自動的に検出され、フィルタリングできます。 利用可能なフィルター操作は次のとおりです。 Equal、NotEqual、GreaterThan、GreaterEqual、LessThan、LessEqual、Contain、NotContain、Exist、NotExist、RegexMatch、RegexNotMatch

    次のリストは、これらのフィルターの使用方法の例を示しています。 

推奨事項: 大規模な vCenter 環境では、フィルタ操作または値を段階的に変更して、監視対象リソースをオンボードに追加できます。 たとえば、一度に XNUMX つのデータセンターだけを検出またはインポートするようにフィルターを構成したり、一度にいくつかのクラスターだけを検出またはインポートしたりするようにフィルターを構成すると、自動バランス型コレクター グループが監視ワークロードを分散する時間を確保できます。 

警告: リストされているフィルター プロパティを構成しない場合、NetScan はターゲット vCenter 環境で定義されているすべての ESXi ホストと仮想マシンを追加しようとします。

プロパティ説明
vcenter.データセンター特定のデータセンター内のすべての VM をフィルター処理するために使用されます。データセンター01
vcenter.clusterリソースを検出または除外する vSphere クラスタ。 クラスター01
vcenter.リソースプール検出/除外するリソースが含まれるリソース プール。リソースプール01
vcenter.フォルダーリソースを検出/除外する vCenter フォルダ。 vCLS
vcenter.ホスト名検出または除外する ESXi ホストまたは仮想マシン。*[Tt]テスト。*
netscan.powerstateNetscan が実行された時点の電源状態。電源がオフになっている仮想マシンをフィルタリングするために使用されます。電源が入っている
VMware.vcenter.tag によるフィルタリング
  • 各タグはカテゴリ別に整理され、カテゴリはリソース プロパティに追加されます。タグ カテゴリが「Organization」の場合、Logicmonitor のリソース プロパティ名は vmware.vcenter.tag.organization になります。
  • すべてのリソースにタグが存在するとは限らないため、フィルタリングに必要なタグには「存在する」フィルターが必要です。
  • VMwareカテゴリ「組織」に「営業、マーケティング、研究」という値が含まれており、営業部門の仮想マシンのみを処理したい場合は、フィルタvmware.vcenter.tag.oraganizationを作成します。 含まれています あなたは出かけます
  1. 選択する Groovyスクリプトを埋め込む 次のスクリプトを埋め込みます。

警告: スクリプトを編集しないでください。 編集された拡張スクリプト NetScan はサポートされていません。 LogicMonitor が提供するスクリプトを編集した場合、問題が発生した場合、LogicMonitor サポートは (独自の裁量により) サポートされているスクリプトで編集内容を上書きするよう要求する場合があります。 拡張スクリプト NetScan は、LM Envision リソースの作成を 600 時間あたり 600 以下に制限します。 XNUMX を超えるリソースを作成するには、すべてのリソースが追加されるまで NetScan を XNUMX 時間ごとに繰り返すようにスケジュールします。

/*******************************************************************************
 * © 2007-2025 - LogicMonitor, Inc. All rights reserved.
 ******************************************************************************/

import com.santaba.agent.groovy.utils.GroovyScriptHelper
import com.logicmonitor.mod.Snippets
import com.santaba.agent.AgentVersion
import java.text.DecimalFormat

// To run in debug mode, set to true
Boolean debug = false
// To enable logging, set to true
Boolean log = false

// Set props object based on whether or not we are running inside a netscan or debug console
def props
try {
    hostProps.get("system.hostname")
    props = hostProps
    debug = true  // set debug to true so that we can ensure we do not print sensitive properties
}
catch (MissingPropertyException) {
    props = netscanProps
}

def host = props.get("vcenter.hostname", props.get("system.hostname"))
def user = props.get("vcenter.user") ?: props.get("vcsa.user") ?: props.get("esx.user")
def pass = props.get("vcenter.pass") ?: props.get("vcsa.pass") ?: props.get("esx.pass")
def addr = props.get("vcenter.url") ?: props.get("vcsa.url") ?: props.get("esx.url") ?: "https://${host}/sdk"
if (!host || !user || !pass || !addr) {
    throw new Exception("Required parameters are missing.")
}

def logCacheContext = "${host}::vmware-vsphere"
Boolean skipDeviceDedupe = props.get("skip.device.dedupe", "false").toBoolean()
String hostnameSource    = props.get("hostname.source", "")?.toLowerCase()?.trim()
Boolean ignoreProxy = props.get("vcenter.ignore.proxy", "false").toBoolean()

Integer collectorVersion = AgentVersion.AGENT_VERSION.toInteger()
 
// Bail out early if we don't have the correct minimum collector version to ensure netscan runs properly
if (collectorVersion < 32400) {
    def formattedVer = new DecimalFormat("00.000").format(collectorVersion / 1000)
    throw new Exception("Upgrade collector running netscan to 32.400 or higher to run full featured enhanced netscan. Currently running version ${formattedVer}.")
}

// Regardless of what vcenter.ignore.proxy is, set to false. We can't use a proxy for the vCenter connection
props["proxy.enable"] = false

def modLoader = GroovyScriptHelper.getInstance(GroovySystem.version).getScript("Snippets", Snippets.getLoader()).withBinding(getBinding())
def emit        = modLoader.load("lm.emit", "1.1")
def lmDebugSnip = modLoader.load("lm.debug", "1")
def lmDebug     = lmDebugSnip.debugSnippetFactory(out, debug, log, logCacheContext)
def httpSnip    = modLoader.load("proto.http", "0")
def http        = httpSnip.httpSnippetFactory(props)
def cacheSnip   = modLoader.load("lm.cache", "0")
def cache       = cacheSnip.cacheSnippetFactory(lmDebug, logCacheContext)
def vSphereAPISnip = modLoader.load("vmware.vsphere.api")
def vSphereAPI = vSphereAPISnip.vSphereAutomationAPIFactory(props, lmDebug, cache, http)
def vSphereSDKSnip = modLoader.load("vmware.vsphere.sdk")
def vSphereSDK = vSphereSDKSnip.vSphereAutomationSDKFactory(props, lmDebug, cache)

// Only initialize lmApi snippet class if customer has not opted out
def lmApi
if (!skipDeviceDedupe) {
    // If we're using a proxy for all but the vCenter connection, we need to set the proxy.enable property to true. Default is false.
    props["proxy.enable"] = ignoreProxy
    lmDebug.LMDebugPrint("INFO: ${ignoreProxy ? "Using" : "Not using"} proxy for LogicMonitor API calls")
    def lmApiSnippet = modLoader.load("lm.api", "0")
    lmApi = lmApiSnippet.lmApiSnippetFactory(props, http, lmDebug)
}

def esxUser = props.get("esx.user", user)
def esxPass = props.get("esx.pass", pass)
def rootFolder = props.get("rootFolder") ?: "vCenterResources"
def includeESXiHosts = (props.get("discover.esxi") ?: true).toBoolean()
def includeVMs = (props.get("discover.vm") ?: true).toBoolean()
def includeHostsAndClustersView = (props.get("view.hostandcluster") ?: true).toBoolean()
def includeVMsAndTemplatesView = (props.get("view.vmsandtemplates") ?: true).toBoolean()
def includeStandaloneVM = (props.get("view.standaloneVm") ?: true).toBoolean()

def maxESXiLoginFailure = (props.get("esx.maxloginfailures", "10").trim()).toInteger()
int eTimeout = 3
int ttlESXiLoginFailure = 0

// Get information about devices that already exist in LM portal
List fields = ["name", "currentCollectorId", "displayName"]
Map args = ["size": 1000, "fields": fields.join(",")]
def lmDevices
// But first determine if the portal size is within a range that allows us to get all devices at once
def pathFlag, portalInfo, timeLimitSec, timeLimitMs
if (!skipDeviceDedupe) {
    portalInfo = lmApi.apiCallInfo("Devices", args)
    timeLimitSec = props.get("lmapi.timelimit.sec", "60").toInteger()
    timeLimitMs = (timeLimitSec) ? Math.min(Math.max(timeLimitSec, 30), 120) * 1000 : 60000 // Allow range 30-120 sec if configured; default to 60 sec

    if (portalInfo.timeEstimateMs > timeLimitMs) {
        lmDebug.LMDebugPrint("Estimate indicates LM API calls would take longer than time limit configured.  Proceeding with individual queries by display name for each device to add.")
        lmDebug.LMDebugPrint("\t${portalInfo}\n\tNOTE:  Time limit is set to ${timeLimitSec} seconds.  Adjust this limit by setting the property lmapi.timelimit.sec.  Max 120 seconds, min 30 seconds.")
        pathFlag = "ind"
    }
    else {
        lmDebug.LMDebugPrint("Response time indicates LM API calls will complete in a reasonable time range.  Proceeding to collect info on all devices to cross reference and prevent duplicate device creation.\n\t${portalInfo}")
        pathFlag = "all"
        lmDevices = lmApi.getPortalDevices(args)
    }
}

List<Map> resources = []

def now = new Date()
def dateFormat = "yyyy-MM-dd'T'HH:mm:ss.s z"
TimeZone tz = TimeZone.getDefault()
Map duplicateResources = [
    "date" : now.format(dateFormat, tz),
    "message" : "Duplicate device names and display names, keyed by display name that would be assigned by the netscan, found within LogicMonitor portal.  Refer to documentation for how to resolve name collisions using 'hostname.source' netscan property.",
    "total" : 0,
    "resources" : []
]

def ilpCredentials = [:]
def tags = [:]
// Determine the vSphere host that we are making API queries to
def productType = ["vpx": 0, "embeddedEsx": 1]
def productId = productType[vSphereSDK.si.serviceContent.about.getProperties().productLineId]
if (productId == 0) {  // vCenter
    ilpCredentials["vcenter.user"] = user
    ilpCredentials["vcenter.pass"] = pass
    ilpCredentials["vcenter.addr"] = addr
    tags = vSphereAPI.getTags()
    lmDebug.LMDebugPrint("INFO: vCenter tags found: ${tags}")
} else if (productId == 1) { // ESXi
    ilpCredentials["esx.user"] = esxUser ?: user
    ilpCredentials["esx.pass"] = esxPass ?: pass
    ilpCredentials["esx.addr"] = addr
}

def tagPropPrefix = "vmware.vcenter.tag"
Closure tagFormatter = { (it) ? it.collectEntries { cat, tag -> ["${tagPropPrefix}.${cat}", tag.join(",")] } : [:] }

def foundHost = false
def relationships = [:]
def vms = vSphereSDK.getMOs("VirtualMachine").each { updateEntityLineage(it, relationships) }
def hosts = vSphereSDK.getMOs("HostSystem").each { updateEntityLineage(it, relationships) }
vms.each { vm ->
    def resource = [:]
    def MOR = vm.MOR
    if (!MOR) {
        lmDebug.LMDebug("ERROR: MOR not found for ${vm}, skipping")
        return
    }
    if (vm.resourcePool == null) {
        lmDebug.LMDebug("ERROR: ${vm} is a template, skipping")
        return       
    }

    String displayName = vm.name

    def hostname = displayName
    def ip = displayName
    def vmMo = vSphereSDK.createMO(MOR)
    def guestIpAddress = vmMo?.guest?.ipAddress
    if (guestIpAddress) {
        ip = guestIpAddress
        hostname = ip
        def reverseDnsName = InetAddress.getByName(guestIpAddress)?.getHostName()
        if (reverseDnsName) {
            hostname = reverseDnsName
        }
    }

    // Check for existing device in LM portal with this displayName; set to false initially and update to true when dupe found
    def deviceMatch = false
    // If customer has opted out of device deduplication checks, we skip the lookups where we determine if a match exists and proceed as false
    if (!skipDeviceDedupe) {
        if (pathFlag == "ind") {
            deviceMatch = lmApi.findPortalDevice(displayName, args)
            if (!deviceMatch) deviceMatch = lmApi.findPortalDeviceByName(ip, args)
        }
        else if (pathFlag == "all") {
            deviceMatch = lmApi.checkExistingDevices(displayName, lmDevices)
            if (!deviceMatch) deviceMatch = lmApi.checkExistingDevicesByName(ip, lmDevices)
        }
    }
    if (deviceMatch) {
        // Log duplicates that would cause additional devices to be created; unless these entries are resolved, they will not be added to resources for netscan output
        def collisionInfo = [
            (displayName) : [
                "Netscan" : [
                    "hostname"    : ip,
                    "displayName" : displayName
                ],
                "LM" : [
                    "hostname"    : deviceMatch.name,
                    "collectorId" : deviceMatch.currentCollectorId,
                    "displayName" : deviceMatch.displayName
                ],
                "Resolved" : false
            ]
        ]

        // If user specified to use LM hostname on display name match, update hostname variable accordingly
        // and flag it as no longer a match since we have resolved the collision with user"s input
        if (hostnameSource == "lm" || hostnameSource == "logicmonitor") {
            ip = deviceMatch.name
            deviceMatch = false
            collisionInfo[displayName]["Resolved"] = true
        }
        // If user specified to use netscan data for hostname, update the display name to make it unique
        // and flag it as no longer a match since we have resolved the collision with user"s input
        else if (hostnameSource == "netscan") {
            // Update the resolved status before we change the displayName
            collisionInfo[displayName]["Resolved"] = true
            displayName = "${displayName} - ${ip}"
            deviceMatch = false
        }

        duplicateResources["resources"].add(collisionInfo)
    }

    foundHost = vSphereSDK.isVmTheHost(vmMo)
    if (!includeVMs && foundHost != vmMo) return

    def deviceGroups = []
    def compLine = getLineage("RESOURCEPOOL", MOR.val, relationships)
    def vmLine = getLineage("FOLDER", MOR.val, relationships)
    def compFolder = includeHostsAndClustersView ? folderFormatter(compLine, rootFolder, includeStandaloneVM) : null
    def vmFolder = includeVMsAndTemplatesView ? folderFormatter(vmLine, rootFolder, includeStandaloneVM) : null
    if (foundHost == vmMo) {
        // Rely on the vmFolder here. If not including standalone VMs, but the vCenter is a standalone VM, discover it anyway
        def baseFolder = (vmFolder ?: folderFormatter(vmLine, rootFolder, includeStandaloneVM))?.split("/")[0]
        deviceGroups << baseFolder
    }
    if (includeVMs) deviceGroups << compFolder << vmFolder
    deviceGroups = deviceGroups.minus(null)
    if (!deviceGroups) {
        lmDebug.LMDebug("DEBUG: VM ${vm.name} skipped due to no containing folder determined. This could be due to different filters being set.")
        return
    }

    if (foundHost == vmMo) { // This is the vCenter VM
        resource = [
            "hostname"   : hostname,
            "displayname": displayName,
            "hostProps"  : ["system.categories": "VMware_vCenter,VMwareVM",
                            "vcenter.vm.name"  : vm.name,
                            "vcenter.hostname" : host,
                            "esx.user"         : esxUser,
                            "esx.pass"         : esxPass],
            "groupName"  : deviceGroups << "VMware vCenters"
        ]
        resource.hostProps += tagFormatter(tags[vSphereSDK.rootFolder.MOR.value])
        resource.hostProps += ilpCredentials
    } else {
        resource = [
            "hostname"   : hostname,
            "displayname": displayName,
            "hostProps"  : ["system.categories": "VMwareVM",
                            "vcenter.vm.name"  : vm.name],
            "groupName"  : deviceGroups
        ]
    }

    // Power state for filtering
    def powerState = vm.runtime?.powerState?.value?.toString()
    if (powerState) resource.hostProps += ["netscan.powerstate": powerState]

    // If the netscan is running on a vCenter device
    if (productId == 0) {
        // Add vCenter tags
        resource.hostProps += tagFormatter(tags[MOR.value as String])

        // Add all parent entities as device properties
        def lineage = lineageParser(compLine + vmLine)
        lineage.each { k, v -> resource.hostProps?."vcenter.${k.toLowerCase()}" = v.join(",") }
    }

    resources.add(resource)
}

if (includeESXiHosts) {
    hosts.each { esxi ->
        def resource = [:]
        def MOR = esxi.MOR
        if (!MOR) {
            lmDebug.LMDebug("ERROR: MOR not found for ${esxi}, skipping")
            return
        }

        String displayName = esxi.name
        
        def hostname = displayName
        def ip = displayName
        def esxiMo = vSphereSDK.createMO(MOR)
        def vnics = esxiMo?.config?.network?.vnic
        def hostIpAddress = vnics.find { it.device == "vmk0" }?.spec?.ip?.ipAddress
        if (hostIpAddress) {
            ip = hostIpAddress
            hostname = ip
            def reverseDnsName = InetAddress.getByName(hostIpAddress)?.getHostName()
            if (reverseDnsName) {
                hostname = reverseDnsName
            }
        }

        // Check for existing device in LM portal with this displayName; set to false initially and update to true when dupe found
        def deviceMatch = false
        // If customer has opted out of device deduplication checks, we skip the lookups where we determine if a match exists and proceed as false
        if (!skipDeviceDedupe) {
            if (pathFlag == "ind") {
                deviceMatch = lmApi.findPortalDevice(displayName, args)
                if (!deviceMatch) deviceMatch = lmApi.findPortalDeviceByName(ip, args)
            }
            else if (pathFlag == "all") {
                deviceMatch = lmApi.checkExistingDevices(displayName, lmDevices)
                if (!deviceMatch) deviceMatch = lmApi.checkExistingDevicesByName(ip, lmDevices)
            }
        }
        if (deviceMatch) {
            // Log duplicates that would cause additional devices to be created; unless these entries are resolved, they will not be added to resources for netscan output
            def collisionInfo = [
                (displayName) : [
                    "Netscan" : [
                        "hostname"    : ip,
                        "displayName" : displayName
                    ],
                    "LM" : [
                        "hostname"    : deviceMatch.name,
                        "collectorId" : deviceMatch.currentCollectorId,
                        "displayName" : deviceMatch.displayName
                    ],
                    "Resolved" : false
                ]
            ]

            // If user specified to use LM hostname on display name match, update hostname variable accordingly
            // and flag it as no longer a match since we have resolved the collision with user"s input
            if (hostnameSource == "lm" || hostnameSource == "logicmonitor") {
                ip = deviceMatch.name
                deviceMatch = false
                collisionInfo[displayName]["Resolved"] = true
            }
            // If user specified to use netscan data for hostname, update the display name to make it unique
            // and flag it as no longer a match since we have resolved the collision with user"s input
            else if (hostnameSource == "netscan") {
                // Update the resolved status before we change the displayName
                collisionInfo[displayName]["Resolved"] = true
                displayName = "${displayName} - ${ip}"
                deviceMatch = false
            }

            duplicateResources["resources"].add(collisionInfo)
        }

        def deviceGroups = []
        def compLine = getLineage("RESOURCEPOOL", MOR.val, relationships)
        def compFolder = folderFormatter(compLine, rootFolder, includeStandaloneVM)
        deviceGroups << "${compFolder}/ESXi hosts"
        deviceGroups = deviceGroups.minus(null)

        def vSphere = null
        def esxiAddr = "https://${esxi.name}/sdk"
        lmDebug.LMDebug("INFO: Attempting to login to the ESX host ${esxi} (${esxi.name}) with user ${esxUser}")
        try {
            if (ttlESXiLoginFailure < maxESXiLoginFailure) {
                vSphere = vSphereSDKSnip.vSphereAutomationSDKFactory(props, lmDebug, cache, hostname)
            } else {
                vSphere = null
            }
        } catch (Exception e) {
            lmDebug.LMDebug("\tDEBUG: Unable to login to ESXi host ${esxi} at ${esxiAddr}, skipping...")
            lmDebug.LMDebug("\t\tERROR: $e")
            ttlESXiLoginFailure++
        }
        if (!vSphere) {
            lmDebug.LMDebug("DEBUG: Unable to connect to ESXi host ${esxi.name} with the provided credentials")

            // We were unable to connect to the ESXi host directly, just add it as a standard device
            resource = [
                "hostname"   : hostname,
                "displayname": displayName,
                "hostProps"  : ["esx.netscan.status": "Netscan did not connect to ESX host."], // Do not set the system category "VMware_ESXi" since we can't actually use this as an ESXi device
                "groupName"  : deviceGroups
            ]
        } else {
            lmDebug.LMDebug("INFO: Successful connection to ESXi host ${esxi.name}")
            def esxMo = vSphereSDK.getMOs("HostSystem")[0]
            resource = [
                "hostname"   : hostname,
                "displayname": displayName,
                "hostProps"  : [
                                "esx.user"         : esxUser,
                                "esx.pass"         : esxPass,
                                "esx.addr"         : esxiAddr,
                                "system.categories": "VMware_ESXi"],
                "groupName"  : deviceGroups
            ]
        }

        resource.hostProps."vcenter.hostname" = host
        resource.hostProps += ilpCredentials

        // If the netscan is running on a vCenter device
        if (productId == 0) {
            // Add vCenter tags
            resource.hostProps += tagFormatter(tags[MOR?.value as String])

            // Add all parent entities as device properties
            def lineage = lineageParser(compLine)
            lineage.each { k, v -> resource.hostProps?."vcenter.${k.toLowerCase()}" = v.join(",") }
        }

        resources.add(resource)
    }
}

lmDebug.LMDebugPrint("Duplicate Resources:")
duplicateResources.resources.each {
    lmDebug.LMDebugPrint("\t${it}")
}

emit.resource(resources, debug)

return 0

def folderFormatter(lineage, rootFolder = "", includeStandaloneVM) {
    if (lineage.size() > 1) {
        def folder = lineage.collect { Map folderMap ->
            def type = folderMap.type.toUpperCase()
            if (type == "FOLDER") {
                if (folderMap.parent[0] == null) { // This is the parent folder
                    return rootFolder ?: "VMware - ${folderMap.name}"
                } else if (folderMap.name == "vm") {
                    return "VMs" // VMs and templates folder
                } else {
                    return folderMap.name
                }                
            } else if (type == "DATACENTER") {
                return "Datacenter - ${folderMap.name}"
            } else if (type == "CLUSTERCOMPUTERESOURCE") {
                return "Cluster - ${folderMap.name}"
            } else if (type == "RESOURCEPOOL") {
                return "Resource Pool - ${folderMap.name}"                
            } else if (type == "COMPUTERESOURCE") {
                return "Standalone ESXi hosts"
            } else {
                return folderMap.name
            }
            // Don't put the device in a folder named after it
        }[0..-2]

        if (lineage.size() >= 2) {
            // Check for standalone VMs that are not in a resourcePool, and put them in their own standalone folder
            if (lineage[-1].type == "VIRTUALMACHINE" && (lineage[-2].type != "RESOURCEPOOL" && lineage[-2].type != "FOLDER")) {
                if (includeStandaloneVM) {
                    folder << "Standalone VMs"
                } else {
                    // This is a standalone, and if we don't want to include it, return nothing
                    return null
                }
            }
        }
        return folder.join("/")
    }
    return null
}

Map lineageParser(lineage) {
    def out = [:].withDefault { [] }
    lineage.each { out[it?.type] << it?.name }
    out.collectEntries { k, v ->
        v.unique()
        if (k.toUpperCase() == "CLUSTERCOMPUTERESOURCE") {
            k = "CLUSTER"
        } else if (k.toUpperCase() == "FOLDER") {
            v.remove("vm") // Autogenerated folders
            v.remove("Datacenters")
        }
        _out = [k, v]
    }
}

/**
 * Sets the relationships map for the supplied Managed Object and all of it"s parents.
 * For most Managed Object types it only looks at the parent property, for virtual machines, the containing resourcePool is also mapped.
 * example for virtual machines this may map something like virtual machine -> resource pool -> host cluster -> folder -> datacenter
 * and virtual machine -> containing folders -> datacenter
 */
def updateEntityLineage(MO, Map relationships) {
    if (!MO) return
    int entityUpdateMax = 86400  // Time in seconds until cached data is forced to update, default 1 day
    int epoch = System.currentTimeSeconds()
    def mor = MO.MOR
    def entityID = mor?.val
    def type = mor?.type?.toUpperCase()
    def parent = MO.parent
    def parentID = parent?.MOR?.val
    def parentIDs = [parentID]
    if (parent && entityID) {
        int time = epoch - ((relationships.get(entityID)?.lastUpdate) ?: 0)
        if (time >= entityUpdateMax || !relationships.get(entityID)?.parent?.contains(parentID)) {
            // Now check parent
            updateEntityLineage(parent, relationships)
            if (type == "VIRTUALMACHINE") {
                // For VMs we want to both trace through the compute resources (resource pool) as well as the actual parent (folder)
                def rp = MO.resourcePool
                def rpID = rp?.MOR?.val
                parentIDs << rpID
                updateEntityLineage(rp, relationships)
            }
        }
    }
    def relationship = [
        "name"      : MO.name,
        "type"      : type,
        "class"     : MO.class?.getName(),
        "lastUpdate": epoch,
        "parent"    : parentIDs?.minus(null),
        "MO"        : MO
    ]
    relationships.put(entityID, relationship)
}

/**
 * Returns the supplied inventory item"s computational lineage as based on the relationships map.
 * This is based on the Hosts and Clusters Inventory Lists view in the vCenter UI. This view contains the virtual machine, resource pools, esx hosts, clusters, datacenters and more.
 */
def getLineage(relationshipType, entityID, Map relationships, lineage = []) {
    if( !entityID || !relationships )  return lineage
    def entry = relationships.get(entityID)
    if (entry) {
        // If the vm host is running vcsa 6.7 and is not in a resourcepool, then we can't currently trace its compute lineage
        def parent = entry.type == "VIRTUALMACHINE" ? entry.parent.find{ relationships.get(it)?.type == relationshipType } : entry.parent[0]
        if (entry.name != "host" && entry.name != "Resources") {
            lineage.add(0, entry)
        }
        getLineage(relationshipType, parent, relationships, lineage)
    }
    return lineage
}
  1.  スケジュール セクション、選択 このNetScanをスケジュールに従って実行する。 動的環境の場合、NetScan を XNUMX 時間ごとに実行するようにスケジュールできます。

Note: 後続の NetScan の実行では、VMware vCenter の変更に基づいてリソースまたはリソース グループが追加または移動されます。 ただし、NetScan にはリソースを削除する機能がありません。

  1. 選択する 投稿 or 保存して実行.

NetScan を実行した後、追加されたリソースの数の履歴を確認するか、NetScan がリソースを作成しない場合はエラー メッセージを確認します。 必要に応じて作成します 動的リソース グループ ビジネス ニーズごとにリソースを整理し、ワークロード固有の監視資格情報を適用します。 

リソースへのプロパティの手動割り当て

Advanced Netscan を通じてホストを追加すると、関連するプロパティと資格情報が自動的に検出され、ホストに割り当てられます。ホストを LogicMonitor に手動で追加する場合は、次のプロパティを使用します。詳細については、「」を参照してください。 デバイスの追加.

ESXi ホスト

プロパティ値の例必須
esx ユーザー ESXi 読み取り専用ユーザールートはい
esx.パスESXi読み取り専用パスワード*****はい
esx.urlESXi にアクセスするためのオプションの URL
デフォルト値は https://<host>/sdk
https://esx01/sdkいいえ
esx.maxloginfailuresESXi 認証情報の試行が中止されるまでの最大回数。最大値に達すると、ESXi ホストは認証情報のないデバイスとしてセットアップされ、接続できないことを示す esx.netscan.status が表示されます。 \n デフォルト=10いいえ

vCenter Server Appliance のホスト プロパティ

vCenter ユーザーの構成には複数のオプションがあります。詳細については、次を参照してください。 VMware vCenter Appliance と vSphere Monitoring に同じユーザーを使用する.

プロパティ値の例必須
vcenter.uservCenter ユーザー[メール保護]はい
vcenter.passvCenter のパスワード********はい
vcenter.urlVCSA にアクセスするためのオプションの URL
デフォルト値は https://<host>/sdk
https://vcenter01/sdkいいえ
vcsa.userオプションの vCenter SystemConfiguration.Administrator SSO グループ ユーザーまたは SuperAdmin ローカル ユーザー[メール保護]いいえ
vcsa.passオプションの vCenter SystemConfiguration.Administrator SSO グループ パスワードまたは SuperAdmin ローカル パスワード********いいえ

Note: vSphere には、API のみのユーザーは存在しません。デフォルトでは、すべてのユーザーはホストの Web インターフェイスにアクセスし、API 呼び出しを実行できる必要があります。ユーザーがそれをできない場合は、ユーザー/ロールの構成に問題がある可能性があります。 vCenter Server Appliance 監視の場合、VAMI インターフェイス (ポート 5480 のデフォルト アクセス) にもアクセスできる必要があります。 

考慮事項

コレクタープロキシ

コレクタ アクセスにプロキシを使用している場合は、コレクタによるプロキシの対象からアプライアンス ホストを除外する必要があります。そうしないと、コレクタは VMware API にアクセスできなくなります。これは、コレクタのagent.confファイルのproxy.exclude設定に、これらのホストを反映する値を追加することによって行われます(proxy.exclude=hostname1|hostname2|hostname3|…)。ここで、さまざまなホスト名は、さまざまなESXiのIP/ホスト名を表します。または、LogicMonitor に追加され、Collector によって監視されている vCenter ホスト。

Collector が VMware API にアクセスできず、ESXi/vCenter デバイスがホスト名を介して追加されている場合は、代わりにその IP を使用するようにデバイスを編集し、必要に応じてこれらの構成編集を繰り返します。

APIポートまたはURLの変更

vCenter または ESXi ホストが非標準ポートで API を公開するように構成されている場合は、プロパティ vcenter.url または esx.url を適切な URL で設定できます (たとえば、 https://192.168.1.100:8443/sdk).

LogicModulesをインポートする

LogicMonitor Exchange から、パッケージからすべての VMware vSphere Monitoring LogicModule をインポートします。詳細については、次を参照してください。 パッケージ内のLogicModules。 これらの LogicModule がすでにインストールされている場合は、最新バージョンであることを確認してください。

LogicModule がインポートされると、データ収集が自動的に開始されます。

トラブルシューティング

  • VMware_vCenterAppliance_* モジュール上のほとんどのデータを受信できない場合は、ユーザー権限が正しく構成されていることを確認してください。ユーザーは VAMI にアクセスできる必要があります。デフォルトでは、 https://HOST:5480。 vCenterAppliance モジュールは vCenter 環境のランタイムを監視するため、特定の管理者レベルのアクセスが必要です。ユーザー タイプにどのような設定を割り当てる必要があるかについては、次のとおりです。
ユーザー権限
ドメインユーザーSystemConfiguration.Adminstrator SSOグループ
ローカル ユーザースーパー管理者の役割

Note: これは、ユーザーに管理者の役割を割り当てることとは異なります。 VAMI は vCenter 環境の外部で動作するため、 SystemConfiguration.Adminstrator VAMI へのアクセスのみを許可し、vCenter クライアントへのアクセスは許可しません。 

  • VMware_vSphere_* または VMware_Esxi_* モジュールの一部のみがデータをレポートできる場合は、ユーザー権限が正しく構成されていることを確認してください。読み取り専用ロールをユーザーに割り当てる場合は、「子に伝播する」オプションを有効にする必要があります。構成されたユーザーで vCenter Client にアクセスすることで、正しい権限が設定されていることを確認できます。監視するさまざまな vSphere オブジェクト (ホスト、データストア、スイッチ、VM) をすべて表示できる必要があります。 VMware は、ユーザーがアクセスできるオブジェクトのみを表示します。たとえば、ESXi ホストなどの親オブジェクトにアクセスしても、本質的に VM などの子にアクセスできるわけではありません。
  • vCenter の 5 分間統計収集レベルが「レベル 1」に設定されている場合、一部のデータポイントはデータを返さない可能性があります。 監視対象の必要なすべてのカウンタにアクセスするには、vCenter 統計収集レベルを「レベル 2」に設定する必要があります。 これは、vSphere Web Client 内で次のように実行できます (「flex」または「flash」インターフェイス (HTML5 ではない) を使用する必要があります)。
    1. ツリーでvCenterインスタンスを選択します。
    2. Video Cloud Studioで 構成 タブには何も表示されないことに注意してください。
    3. 選択する > 統計 > 編集.
    4. 「統計レベル」列のドロップダウンから、表にリストされている最初の項目として「レベル 2」を選択します。

Note: 同じマシン上にある場合、vCenter データベースの要件を vCenter サーバーの要件に追加する必要があります。

vCenter に十分なリソースがない場合、vCenter は API (HTTPS) ポートへの一部の接続 (LogicMonitor の HTTPS-DataSource に表示) を拒否するか、一部のパフォーマンス クエリに対して「-1」の値を報告することがあります。これらの両方の状況により、グラフにギャップが生じます。

ネットスキャンのトラブルシューティング

このスイートの NetScan は、ポータル内の既存のデバイスを更新して、VMware vSphere API から取得した関連情報を追加できます。また、表示名は同じでも system.hostname の値が異なるという競合が存在する場合、NetScan がポータル内に重複したデバイスを作成する可能性があります。

デバイスが適切に更新され、重複したデバイスが作成されないように、この NetScan は LogicMonitor の API を使用して既存のデバイスをクエリし、検出された名前の競合を報告します。このファイルにはコレクター ログからアクセスできます。詳細については、次を参照してください。 コレクターロギング.

このレポート内のデバイスは、NetScan がプロパティ hostname.source で構成されていない限り、NetScan 出力の一部として LogicMonitor に報告されません。このプロパティを使用すると、ユーザーは、NetScan 出力で使用されるホスト名のソースを選択することによって、検出された名前の競合を解決できます。考えられる 2 つのホスト名ソースは、次の値によって決まります。

  • 「lm」または「logicmonitor」 名前が競合するデバイスは既存の system.hostname LogicMonitor で、ポータル内のデバイスが NetScan を使用して更新されていることを確認します。この設定では新しいデバイスは作成されません。
  • 「netscan」 名前が競合しているデバイスは、NetScan スクリプトで決定された system.hostname を維持し、追加するように報告された表示名を更新します。 <system.hostname> 一意であり、ポータルに追加できることを確認するためです。 このオプションは、厳密な命名規則がなく、同じ表示名を持つ複数のデバイスがある場合に役立ちます。

Note: NetScan は、system.hostname の値を更新できません。 NetScans は、表示名、カスタム プロパティ、およびグループ割り当てを更新できます。

パッケージ内の VMware vSphere LogicModules

VMware vSphere モジュールは、監視対象のコンポーネントに基づいて XNUMX つの異なるカテゴリに分類されます。

VMware ESXi モジュールは、VMware ESXi ホストの可用性、パフォーマンス、およびハードウェア センサーの監視と、vCenter によって管理されていないスタンドアロン ESXi ホストの仮想マシンの監視を提供します。

表示名タイプ説明置き換え
VMware_ESXi_CPUデータソースホストの CPU の使用率を追跡します。VMware_ESXi_リソース
VMware_ESXi_HostPerformance
VMware_ESXi_データストアスループットデータソースvSphere / vCenter ホストのパフォーマンス メトリックを監視します。VMware_ESXi_Datastoreパフォーマンス
VMware_ESXi_Datastoreの使用状況データソースESXi データストアのストレージ容量を監視します。 データは、データストアにアクセスできる場合にのみ有効です。VMware_ESXi_DatastoreCapacity
VMware_ESXi_DisksデータソースESXi ホストのディスク使用量を監視します。VMware_ESXi_HostPerformance
VMware_ESXi_HardwareHealthSensorデータソースESXi によって報告されるハードウェア健全性センサーを監視します。 監視されるセンサーは、ストレージ / メモリ / プロセッサー監視タブにあるハードウェア健全性センサーであり、VMware_ESXi_SystemHealthSensor によって報告されるシステム センサーとは別のものです。 ステータスが不明またはグレーのセンサーは、アクティブな検出から除外されます。vmware_esxi_hardwarehealthsensors
VMware_ESXi_HardwareSensorFans
VMware_ESXi_HardwareSensorPower
VMware_ESXi_HardwareSensor

VMware_ESXi_LogicalProcessorsデータソースESXi ホスト CPU の論理プロセッサの使用率を追跡します。VMware_ESXi_HostCPUコア数
VMware_ESXi_メモリデータソースESXi ホストで使用可能なメモリを監視します。VMware_ESXi_HostPerformance
VMware_ESXi_NetworkInterfacesデータソースESXi ホストのネットワーク インターフェイスの帯域幅を監視します。VMware_ESXi_HostInterfaces
VMware_ESXi_NetworkStateデータソースESX ホストのネットワークと分散ポート グループのステータスを監視します。VMware_ESXi_NetworkStatus
VMware_ESXi_PowerデータソースESXi ホストの電力使用量を監視します。無し
VMware_ESXi_SystemHealthSensorデータソースVMware によって報告された、ESXi ホスト上のハードウェア健全性システム センサーを監視します。 監視されるシステム センサーは、追加のストレージ、メモリ、CPU センサー、ハードウェア センサーとは別のものです。無し
VMware_ESXi_VirtualMachineDiskCapacityデータソース個々の仮想マシンの仮想ディスク ストレージ容量メトリックを監視します。VMware_vSphere_vDisk容量
VMware_ESXi_VirtualMachinePerformanceデータソースESXi 仮想マシンの CPU、ディスク、メモリ、およびネットワーク パフォーマンス メトリックを監視します。VMware_vSphere_VMパフォーマンス
VMware_ESXi_VirtualMachineSnapshotsデータソース個々の仮想マシン上のスナップショットの経過時間を監視します。VMware_vSphere_VM スナップショット
VMware_ESXi_VirtualMachineStatusデータソース電源、ハートビート、フォールト トレランス、ゲスト ツールの状態、および個々の仮想マシンの最後のパワーオンからの時間を追跡します。VMware_vSphere_VMステータス
VMware_vSphere_Network_TopologyトポロジーソースvCenter からのデータに基づいて VMware ネットワーク トポロジを生成します。VMware_vCenter_Network_Topology
VMware_vSphere_VirtualMachine_TopologyトポロジーソースvCenter からのデータに基づいて VMware 仮想マシン トポロジを生成します。VMware_vCenter_VM_トポロジ
addERI_ESXiプロパティソースホスト UUID、MAC アドレス、IQN、WWN を含む、トポロジ マッピング用の VMware ESXi ホストのデバイス外部リソース ID (ERI) を設定します。 ERI タイプ (ERT) を「ハイパーバイザー」に設定します。無し
VMware_vSphere_情報プロパティソースvSphere ホストの追加情報を提供します。VMware_ESXi_ObjectCount
VMware_vCenter_ObjectCount
VMware_LM_トラブルシューターデータソースさまざまな設定をチェックして、ESXi/vCenter 収集が適切に機能することを確認します。 発見された問題を修正する方法をユーザーに指示します。無し

VMware vCenterAppliance モジュールは、VMware vCenter Server Appliance の可用性とパフォーマンスの監視に関するデータを提供します。

表示名タイプ説明置き換え
VMware_vCenterAppliance_Backupデータソース最新のバックアップ発生からリカバリ バックアップ情報を収集します。VMware_VCSA_バックアップ
VMware_vCenterAppliance_CPUデータソースvCenter ホストの CPU 情報を監視します。VMware_VCSA_CPU
VMware_vCenterAppliance_DiskPerformanceデータソースvCenter ホストのディスク パフォーマンスを監視します。VMware_VCSA_Diskパフォーマンス
VMware_vCenterAppliance_FileSystemPartitionsデータソースvCenter ホストのファイルシステム パーティションの使用率を監視します。VMware_VCSA_ファイルシステム容量
VMware_vCenterAppliance_FileSystemSwapデータソースvCenter ホストのディスク スワップの使用率を監視します。VMware_VCSA_スワップ
VMware_vCenterAppliance_HealthStatusデータソースapplmgmt、データベース ストレージ、ロード、メモリ、ソフトウェア パッケージ、ストレージ、スワップ、システムなどのさまざまなシステム サービスの vCenter ホストの健全性ステータスを監視します。VMware_VCSA_HealthStatus
VMware_vCenterAppliance_HighAvailabilityデータソースvCenter HA (VCHA) のステータスを監視します。VMware_vCenter_AdmissionControl
VMware_vCenter_HANodeHealth
VMware_vCenter_HAステータス
VMware_vCenterAppliance_MemoryデータソースvCenter ホストのメモリ情報を監視します。VMware_VCSA_メモリ
VMware_vCenterAppliance_NetworkInterfacesデータソースvCenter ホストのネットワーク接続を監視します。VMware_VCSA_ネットワーク
VMware_vCenterAppliance_PowerデータソースvCenter 環境の合計電力使用量を監視します。無し
VMware_vCenterAppliance_ServicesデータソースvCenter ホストのサービスの実行状態を監視します。VMware_VCSA_サービス
addCategory_vCenterプロパティソースHA (VCHA) および VCSA バックアップを備えた vCenter クラスターなど、オプションの追加の vCenter 監視サービス (使用中の場合) のカテゴリを設定します。addCategory_vCenterHA
VMware_vSphere_情報プロパティソースvSphere ホストの追加情報を提供します。VMware_ESXi_ObjectCount
VMware_vCenter_ObjectCount
VMware_LM_トラブルシューターデータソースさまざまな設定をチェックして、ESXi/vCenter 収集が適切に機能することを確認します。 発見された問題を修正する方法をユーザーに指示します。無し

VMware vSphere モジュールは、vSphere 環境 (仮想マシン、クラスター、リソース プール、データストアなど) の可用性とパフォーマンスの監視を提供します。

表示名タイプ説明置き換え
VMware_vSphere_ClustersデータソースvCenter デバイス上の ESX ホスト クラスタの CPU およびメモリ メトリックを監視します。VMware_vCenter_Clusterパフォーマンス
VMware_vSphere_DatastoreClustersデータソースvCenter データストア クラスタのストレージ使用量を監視します。VMware_vCenter_DatastoreClusters
VMware_vSphere_DatastoreStatusデータソースvSphere データストアの稼働状況を監視します。VMware_vCenter_DatastoreStatus
VMware_vSphere_データストアスループットデータソースvSphere / vCenter ホストのパフォーマンス メトリックを監視します。VMware_vCenter_Datastoreパフォーマンス
VMware_vSphere_Datastoreの使用状況データソースvCenter データストアのストレージ使用量を監視します。 データは、データストアにアクセスできる場合にのみ有効です。VMware_vCenter_DatastoreCapacity
VMware_vSphere_HighAvailabilityデータソースvSphere High Availability (vSphere HA) とアドミッション コントロール (HA に利用可能なリソース、vSphere HA エージェント (FDM) で問題が発生しているかどうかなど) を監視します。VMware_vCenter_AdmissionControl
VMware_vSphere_HostStatusデータソースvCenter ESXi ホストの状態を監視します。VMware_vCenter_HostStatus
VMware_vSphere_NetworkStateデータソースvCenter ネットワークと分散仮想ポート グループのステータスを監視します。VMware_vCenter_NetworkStatus
VMware_vSphere_ResourcePoolsデータソースvCenter デバイス上のリソース プールの CPU およびメモリのメトリックを監視します。VMware_vCenter_ResourcePools
VMware_vSphere_VirtualMachineDiskCapacityデータソース個々の仮想マシンの仮想ディスク ストレージ容量メトリックを監視します。VMware_vCenter_VMDiskCapacity
VMware_vSphere_VirtualMachineNetworkInterfaceデータソース仮想マシン インターフェイスのデータ スループットとパケット送信を監視します。VMware_vCenter_VMInterface
VMware_vSphere_VirtualMachinePerformanceデータソース個々の仮想マシンの CPU、ディスク、メモリ、およびネットワークのパフォーマンス メトリックを監視します。VMware_vCenter_VMパフォーマンス
VMware_vSphere_VirtualMachineSnapshotsデータソース個々の仮想マシン上のスナップショットの経過時間を監視します。VMware_vCenter_VMSnapshots
VMware_vSphere_VirtualMachineStatusデータソース電源、ハートビート、フォールト トレランス、ゲスト ツールの状態、および個々の仮想マシンの最後のパワーオンからの時間を追跡します。VMware_vCenter_VMStatus
VMware_vCenter_Cluster_TopologyトポロジーソースvCenter からのデータに基づいて VMware クラスター トポロジを生成します。VMware_ESXi_トポロジ
VMware_vCenter_Datastore_TopologyトポロジーソースvCenter からのデータに基づいて VMware データストア トポロジを生成します。VMware_ESXi_トポロジ
VMware_vSphere_Network_TopologyトポロジーソースvCenter からのデータに基づいて VMware ネットワーク トポロジを生成します。VMware_vCenter_Network_Topology
VMware_vSphere_VirtualMachine_TopologyトポロジーソースvCenter からのデータに基づいて VMware 仮想マシン トポロジを生成します。VMware_vCenter_VM_トポロジ
addERI_vCenterプロパティソースUUID を含む、トポロジ マッピング用の VMware ESX vCenter のデバイス外部リソース ID (ERI) を設定します。 ERI タイプ (ERT) を「PhysicalServer」に設定します。無し
addCategory_vCenterプロパティソースHA (VCHA) および VCSA バックアップを備えた vCenter クラスターなど、オプションの追加の vCenter 監視サービス (使用中の場合) のカテゴリを設定します。addCategory_vCenterHA
VMware_vSphere_情報プロパティソースvSphere ホストの追加情報を提供します。VMware_ESXi_ObjectCount
VMware_vCenter_ObjectCount
VMware_LM_トラブルシューターデータソースさまざまな設定をチェックして、ESXi/vCenter 収集が適切に機能することを確認します。 発見された問題を修正する方法をユーザーに指示します。無し

このパッケージのモジュールによって追跡されるさまざまなメトリックに静的データポイントのしきい値を設定する場合、LogicMonitor はテクノロジー所有者のベスト プラクティス KPI 推奨事項に従います。

推奨事項: 必要に応じて、環境固有のニーズに合わせてこれらの事前定義されたしきい値を調整することをお勧めします。詳細については、次を参照してください。 データポイントの静的しきい値の調整.

レガシーモジュールからの移行

現在、これらのレガシー モジュールのいずれかを使用して VMware デバイスを監視している場合、新しいモジュールのインポート時にデータが失われることはありません。 これは、モジュールの上書きを排除するためにモジュール名が変更されているためです。 詳細については、「」を参照してください。 非推奨のLogicModules.

ただし、モジュールの両方のセットがアクティブである限り、重複したデータが収集され、重複したアラートを受信することになります。 このため、vCenter Server に不要な負荷が追加されるのを避けるために、新しいモジュール セットをインポートした後に上記のモジュールを無効にし、それらが環境で意図したとおりに動作することを確認する必要があります。

推奨事項: DataSource が無効になると、ホストへのクエリとアラートの生成が停止されますが、すべての履歴データは維持されます。レガシー モジュールを完全に削除することもできますが、削除するとすべての履歴データが失われるため、この移行は慎重に検討してください。詳細については、次を参照してください。 データソースまたはインスタンスの監視を無効にする.

記事上で

トライアルを開始する

LogicMonitorプラットフォームへのフルアクセスが可能。
デバイス数に制限はありません。