LogicMonitor + Catchpoint: 自律型ITの新時代へ

さらに詳しく

LogicMonitorは、Nutanix Prism Central向けのすぐに使える監視機能を提供します。この監視スイートは、Nutanix Prism Central v4 REST APIを活用して、Nutanixクラスタ、ハイパーバイザーホスト、および仮想マシンを監視します。

Nutanix APIの詳細については、以下を参照してください。 Nutanix v4 API Nutanix から。  

LogicMonitor の Nutanix Prism Central 監視パッケージは、次のバージョンと互換性があります。 

  • Nutanix PC (Prism Central) 7.3 以降
  • Nutanix AOS (Acropolis オペレーティング システム) 7.3 以降
  • Nutanix AHV (Acropolis Hypervisor) 10.3 以降

Nutanix Prism Central Monitoringの要件

Nutanix Prism Central Monitoring を有効にするには、以下が必要です。

  • LogicMonitor_Collector_Snippets データソース
  • Nutanix Prism Central API へのアクセス (デフォルトではポート 9440)
  • 読み取り専用権限を持つローカル Nutanix Prism Central ユーザー資格情報

推奨事項: 「Prism Viewer」権限を持つローカルアカウントを使用してください。詳細については、 組み込みロールリスト Nutanix から。

監視へのリソースの追加

Nutanix Prism Central リソースは、次の方法で監視に追加できます。

  • Advanced NetScan を自動的に使用する(推奨)
  • 手動でリソースを追加し、必要なプロパティを割り当てる

NetScan は検出を自動化し、階層的なリソース構成を維持するため、大規模または動的な Nutanix 環境には NetScan の使用を強くお勧めします。

警告: 超過を避けるため、NetScanを実行する前に、LogicMonitorライセンスが十分にあることを確認してください。不要なNutanixリソースが誤って追加されないように、NetScanフィルターを慎重にテストしてください。

Advanced NetScan の使用の詳細については、次を参照してください。 強化されたスクリプト ネットスキャン.

  1. LogicMonitorで、次の場所に移動します  モジュール > Exchange。
  2. Nutanix Prism Central LogicModules を見つけてインストールします。
    モジュールのリストについては、 監視モジュール.
  3. MFAデバイスに移動する  リソース > 追加 > 複数のリソース > 高度なNetScan.
  4. 「Advanced NetScan の追加」ページで、この NetScan に関連付けるわかりやすい名前を入力します (例: Nutanix Prism Central Resources)。
  5. NetScan を実行するコレクタを選択します。
    詳細については、を参照してください。 コレクターの割り当て in 強化されたスクリプト ネットスキャン.
  6. 「拡張スクリプトNetScan」を選択します。 方法 ドロップダウンリスト。
  7. 「拡張スクリプト」セクションから、次を選択します。 リソース資格情報 > このスキャンにカスタム資格情報を使用する.
  8. NetScan に必要な Nutanix Prism Central 資格情報を提供し、NetScan がリソースを作成および整理する方法と場所を変更する次のプロパティを追加します。
プロパティ必須
nutanix.prism.central.user閲覧者ロールを持つ Prism Central ユーザー名 (例: logicmonitor_viewer)あり
nutanix.prism.central.passPrism Centralのパスワードあり
nutanix.prism.central.hostPrism Centralのホスト名またはIP(例: 10.10.10.100 or prism.company.com)あり
nutanix.prism.central.portAPIポート(デフォルトは9440)いいえ
lmaccess.id OR ロジックモニター.アクセス.idポータルに追加する前に、NetScan で重複するリソースを検索するための LogicMonitor API アクセス ID。あり
lmaccess.key OR logicmonitor.access.keyポータルにリソースを追加する前に NetScan で重複リソースを検索するための LogicMonitor API キー。あり
hostname.sourceNetScan で使用されるホスト名のソースを選択できるようにします。注: これは、既存のリソースで競合が見つかった場合に、リソースの重複作成を防ぐのに役立ちます。詳細については、「NetScan のトラブルシューティング」を参照してください。 いいえ
skip.device.dedupeデバイスの重複排除チェックをスキップできるため、LogicMonitor API 資格情報は不要になります。いいえ
rootFolderこのNetScanが作成する、または既存の場合は使用するLogicMonitorリソースグループの名前。値はネストされた子フォルダにすることができます。例: Nutanix/Production or DataCenter/Nutanixデフォルトは「Nutanix Prism Central Resources」です。いいえ
lmapi.timelimit.secLM APIクエリの実行に費やす時間を設定します。デフォルトは60、許容範囲は30~120です。いいえ

推奨事項: 必要な機能を検証するには、監視対象リソースの特定のフィルターから始め、フィルター操作や値を段階的に変更して、監視対象リソースを段階的にオンボードします。例えば、プロパティとフィルターが適切に定義され、目的の結果が得られるまで、フィルターを設定して一度に1つのNutanixクラスターのみを検出またはインポートするように設定できます。

警告: フィルターが構成されていない場合、NetScan は検出されたすべての Nutanix ホストと VM を個別の LogicMonitor リソースとして追加しようとします。

  1. 選択する Groovyスクリプトを埋め込む 次の NetScan スクリプトを埋め込みます。
/*******************************************************************************
 * © 2007-2025 - LogicMonitor, Inc. All rights reserved.
 ******************************************************************************/

import com.santaba.agent.groovy.utils.GroovyScriptHelper as GSH
import com.logicmonitor.mod.Snippets
import groovy.json.JsonSlurper

Boolean debug = false
Boolean log = false

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


def modLoader = GSH.getInstance(GroovySystem.version).getScript("Snippets", Snippets.getLoader()).withBinding(getBinding())
def lmDebugSnip = modLoader.load("lm.debug", "1")
def lmDebug = lmDebugSnip.debugSnippetFactory(out, debug, log, "Nutanix_PrismCentral_Netscan")
def emit = modLoader.load("lm.emit", "1")
def httpSnip = modLoader.load("proto.http", "0")
def http = httpSnip.httpSnippetFactory(props)
def nutanixPrismCentralSnip = modLoader.load("nutanix.prism.central", "0")
def nutanixPrismCentral = nutanixPrismCentralSnip.nutanixPrismCentralSnippetFactory(props, lmDebug, http)

// Configuration options
def rootFolder = props.get("rootFolder") ?: "Nutanix Prism Central Resources"
Boolean skipDeviceDedupe = props.get("skip.device.dedupe", "false").toBoolean()
String hostnameSource = props.get("hostname.source", "")?.toLowerCase()?.trim()

// Initialize LM API for device deduplication if not skipped
def lmApi
if (!skipDeviceDedupe) {
    def lmApiSnippet = modLoader.load("lm.api", "0")
    lmApi = lmApiSnippet.lmApiSnippetFactory(props, http, lmDebug)
}

// Get information about devices that already exist in LM portal
List fields = ["name", "currentCollectorId", "displayName", "id", "customProperties"]
Map args = ["size": 1000, "fields": fields.join(",")]
def lmDevices
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

    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": []
]

// Get all hosts data with pagination
def hostsData = nutanixPrismCentral.httpGet("clustermgmt/v4.0/config/hosts?\$limit=100")
def allHosts = []
def hostsCurrentPage = 0
def hostsPageSize = 100

if (hostsData && hostsData.data) {
    allHosts.addAll(hostsData.data)
    lmDebug.LMDebugPrint("Hosts first page: Found ${hostsData.data.size()} hosts")

    // Check if there are more pages to process
    def hostsHasMore = hostsData.metadata?.links?.find { it.rel == "next" } != null

    if (hostsHasMore) {
        lmDebug.LMDebugPrint("Hosts pagination detected. Total available: ${hostsData.totalAvailableResults ?: 'unknown'}")

        // Continue fetching remaining pages
        while (hostsHasMore) {
            hostsCurrentPage++
            lmDebug.LMDebugPrint("Fetching hosts page ${hostsCurrentPage + 1}...")

            def hostsPageData = nutanixPrismCentral.httpGet("clustermgmt/v4.0/config/hosts?\$limit=${hostsPageSize}&\$page=${hostsCurrentPage}")

            if (hostsPageData && hostsPageData.data && hostsPageData.data.size() > 0) {
                allHosts.addAll(hostsPageData.data)
                lmDebug.LMDebugPrint("Hosts page ${hostsCurrentPage + 1}: Found ${hostsPageData.data.size()} hosts")

                // Check if there's a next page
                hostsHasMore = hostsPageData.metadata?.links?.find { it.rel == "next" } != null
            } else {
                lmDebug.LMDebugPrint("No more hosts data found, stopping pagination")
                hostsHasMore = false
            }

            // Safety check to prevent infinite loops
            if (hostsCurrentPage > 50) {
                lmDebug.LMDebugPrint("Reached maximum hosts page limit (50), stopping pagination")
                break
            }
        }
    }
}

lmDebug.LMDebugPrint("Total hosts discovered: ${allHosts.size()}")

// Process each host
allHosts.each { host ->

    def hostExtId = host.extId
    def hostName = host.hostName
    def serial = host.blockSerial

    lmDebug.LMDebug("Processing host: ${hostName} (extId: ${hostExtId})")

    if (!hostExtId || !hostName) {
        lmDebug.LMDebug("ERROR: Host missing required fields (extId: ${hostExtId}, name: ${hostName}), skipping")
        return
    }

    String displayName = hostName
    def hostname = hostName
    def ip = hostName

    // Try to get IP from hypervisor external address
    if (host.hypervisor?.externalAddress?.ipv4?.value) {
        ip = host.hypervisor.externalAddress.ipv4.value
        hostname = ip

        // Try reverse DNS lookup
        try {
            def reverseDnsName = InetAddress.getByName(ip)?.getHostName()
            if (reverseDnsName && reverseDnsName != ip) {
                hostname = reverseDnsName
            }
        } catch (Exception e) {
            lmDebug.LMDebug("DEBUG: Failed to resolve reverse DNS for ${ip}: ${e.message}")
        }
    }

    // Check for existing device in LM portal
    def deviceMatch = false
    if (!skipDeviceDedupe) {
        if (pathFlag == "ind") {
            deviceMatch = lmApi.findPortalDevice(displayName, args)
        } else if (pathFlag == "all") {
            deviceMatch = lmApi.checkExistingDevices(displayName, lmDevices)
        }
    }

    if (deviceMatch) {
        if (hostname != deviceMatch?.name) {
            // 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"   : hostname,
                                    "displayName": displayName
                            ],
                            "LM"      : [
                                    "hostname"   : deviceMatch?.name,
                                    "collectorId": deviceMatch?.currentCollectorId,
                                    "displayName": deviceMatch?.displayName
                            ],
                            "Resolved": false
                    ]
            ]

            // Resolve hostname collision based on user preference
            if (hostnameSource == "lm" || hostnameSource == "logicmonitor") {
                hostname = deviceMatch?.name
                displayName = deviceMatch?.displayName
                deviceMatch = false
                if (collisionInfo && collisionInfo[displayName]) {
                    collisionInfo[displayName]["Resolved"] = true
                }
            } else if (hostnameSource == "netscan") {
                if (collisionInfo && collisionInfo[displayName]) {
                    collisionInfo[displayName]["Resolved"] = true
                }
                displayName = "${displayName} - ${ip}"
                deviceMatch = false
            }

            if (collisionInfo) {
                duplicateResources["resources"].add(collisionInfo)
            }
        }
        // Don't worry about matches where the hostname values are the same
        // These will update via normal NetScan processing and should be ignored
        else {
            deviceMatch = false
        }
    }
    // Determine device group based on cluster
    def deviceGroups = []
    deviceGroups << "${rootFolder}"

    // Resource host properties
    Map hostProps = [
            "system.categories"         : "Nutanix_Hypervisor",
            "nutanix.prism.central.host": prismCentralHost,
            "nutanix.prism.central.user": props.get("nutanix.prism.central.user"),
            "nutanix.prism.central.pass": props.get("nutanix.prism.central.pass"),
            "nutanix.hypervisor.serial" : serial

    ]


    def resource = [
            "hostname"   : hostname,
            "displayname": displayName,
            "hostProps"  : hostProps,
            "groupName"  : deviceGroups
    ]

    lmDebug.LMDebugPrint("Adding host: ${displayName} (${hostname})")
    if (!deviceMatch) resources.add(resource)
}

// Get Prism Central resource information
lmDebug.LMDebugPrint("Fetching Prism Central resource...")
def domainManagerData = nutanixPrismCentral.httpGet("prism/v4.0/config/domain-managers")

if (domainManagerData && domainManagerData.data && domainManagerData.data.size() > 0) {
    def domainManager = domainManagerData.data[0]

    lmDebug.LMDebugPrint("Processing Prism Central resource")

    // Perform nslookup on nutanix.prism.central.host
    String prismHostForLookup = prismCentralHost
    String prismHostIP = null
    String prismHostDNS = prismCentralHost

    try {
        def inetAddress = InetAddress.getByName(prismHostForLookup)
        prismHostIP = inetAddress.getHostAddress()
        prismHostDNS = inetAddress.getHostName()

        lmDebug.LMDebug("DEBUG: DNS lookup for ${prismHostForLookup}: IP=${prismHostIP}, DNS=${prismHostDNS}")
    } catch (Exception e) {
        lmDebug.LMDebug("ERROR: Failed to resolve ${prismHostForLookup}: ${e.message}")
        // If lookup fails, use the original value
        prismHostIP = prismCentralHost
        prismHostDNS = prismCentralHost
    }

    // Determine hostname based on nslookup result
    String pcHostname = prismHostIP

    // Determine displayname from config.name
    String pcConfigName = domainManager.config?.name ?: "Unnamed"
    String pcDisplayName = pcConfigName

    // If config.name is "Unnamed", use DNS name
    if (pcConfigName == "Unnamed") {
        pcDisplayName = prismHostDNS
        lmDebug.LMDebug("DEBUG: Config name is 'Unnamed', using DNS name: ${pcDisplayName}")
    }

    // Check for existing device in LM portal
    def pcDeviceMatch = false
    if (!skipDeviceDedupe) {
        if (pathFlag == "ind") {
            pcDeviceMatch = lmApi.findPortalDevice(pcDisplayName, args)
        } else if (pathFlag == "all") {
            pcDeviceMatch = lmApi.checkExistingDevices(pcDisplayName, lmDevices)
        }
    }

    if (pcDeviceMatch) {
        if (pcHostname != pcDeviceMatch?.name) {
            // 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 pcCollisionInfo = [
                    (pcDisplayName): [
                            "Netscan" : [
                                    "hostname"   : pcHostname,
                                    "displayName": pcDisplayName
                            ],
                            "LM"      : [
                                    "hostname"   : pcDeviceMatch?.name,
                                    "collectorId": pcDeviceMatch?.currentCollectorId,
                                    "displayName": pcDeviceMatch?.displayName
                            ],
                            "Resolved": false
                    ]
            ]

            // Resolve hostname collision based on user preference
            if (hostnameSource == "lm" || hostnameSource == "logicmonitor") {
                pcHostname = pcDeviceMatch?.name
                pcDisplayName = pcDeviceMatch?.displayName
                pcDeviceMatch = false

                if (pcCollisionInfo && pcCollisionInfo[pcDisplayName]) {
                    pcCollisionInfo[pcDisplayName]["Resolved"] = true
                }
            } else if (hostnameSource == "netscan") {
                pcDisplayName = "${pcDisplayName} - ${pcHostname}"
                pcDeviceMatch = false

                if (pcCollisionInfo && pcCollisionInfo[pcDisplayName]) {
                    pcCollisionInfo[pcDisplayName]["Resolved"] = true
                }
            }

            if (pcCollisionInfo) {
                duplicateResources["resources"].add(pcCollisionInfo)
            }
        }
        // Don't worry about matches where the hostname values are the same
        // These will update via normal netscan processing and should be ignored
        else {
            pcDeviceMatch = false
        }
    }

    if (!pcDeviceMatch) {
        // Prism Central resource properties
        Map pcHostProps = [
                "system.categories"         : "Nutanix_PrismCentral",
                "nutanix.prism.central.user": props.get("nutanix.prism.central.user"),
                "nutanix.prism.central.pass": props.get("nutanix.prism.central.pass")
        ]

        def pcDeviceGroups = []
        pcDeviceGroups << "${rootFolder}"

        def pcResource = [
                "hostname"   : pcHostname,
                "displayname": pcDisplayName,
                "hostProps"  : pcHostProps,
                "groupName"  : pcDeviceGroups
        ]

        lmDebug.LMDebugPrint("Adding Prism Central resource: ${pcDisplayName} (${pcHostname})")
        resources.add(pcResource)
    } else {
        lmDebug.LMDebug("DEBUG: Skipping Prism Central resource - already exists in portal")
    }
} else {
    lmDebug.LMDebug("WARNING: No Prism Central domain manager data found")
}

lmDebug.LMDebugPrint("Duplicate Resources:")
if (duplicateResources && duplicateResources.resources) {
    duplicateResources.resources.each { collisionInfo ->
        if (collisionInfo) {
            collisionInfo.each { key, value ->
                lmDebug.LMDebugPrint("\t${key}: ${value}")
            }
        }
    }
}

lmDebug.LMDebugPrint("Summary: Found ${resources.size()} resource(s) to add (including Prism Central)")
if ((resources.size()) == 0) {
    lmDebug.LMDebugPrint("No resources to add. Exiting netscan.")
} else {
    emit.resource(resources, debug)
}

return 0
  1. スケジュールセクションで、 このNetScanをスケジュールに従って実行する.
    動的環境の場合、NetScan を XNUMX 時間ごとに実行するようにスケジュールできます。

注意: 以降のNetScan実行では、Nutanix Prism Centralの変更に基づいて、リソースまたはリソースグループが追加または移動されます。ただし、NetScanにはリソースを削除する機能はありません。

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

NetScan を実行した後、追加されたリソースの数、または NetScan がリソースを作成しない場合はエラー メッセージの履歴を確認します。

注意: NetScansはリソースやリソースグループを追加または移動できますが、既存のリソースを削除することはできません。詳細については、 動的リソース グループ.

監視にリソースを手動で追加する

  1. LogicMonitorで、次の場所に移動します リソース > 追加.
  2. Prism Central インスタンスのホスト名または IP アドレスを入力します。
  3. リソースを適切なリソース グループに割り当てます。
  4. 以下にリストされている必須プロパティを追加します。
  5. 割り当てられたコレクターがポート 9440 (または構成されたポート) で Prism Central にアクセスできることを確認します。

AHV ハイパーバイザー ホストを手動で監視するには、各ホストを個別のリソースとして追加し、適切な Prism Central 資格情報を割り当てます。

Prism Central に必要なホストプロパティ

Prism Central リソースまたは親リソース グループで次のプロパティを設定します。

プロパティ 詳細説明 必須
nutanix.prism.central.userPrism Central API ユーザー名あり
nutanix.prism.central.passPrism Central APIパスワードあり
nutanix.prism.central.portPrism Central API ポート (デフォルト: 9440)いいえ

AVHハイパーバイザーに必要なホストプロパティ

AHV ハイパーバイザー リソースまたはその親リソース グループに次のプロパティを設定します。

プロパティ 詳細説明 必須
nutanix.prism.central.userPrism Central API ユーザー名あり
nutanix.prism.central.passPrism Central APIパスワードあり
nutanix.prism.central.hostPrism Centralのホスト名またはIPあり
nutanix.prism.central.portPrism Central API ポート (デフォルト: 9440)いいえ

NetScan のトラブルシューティング

このスイートのNetScanは、ポータル内の既存のリソースを更新し、NutanixのAPIから取得した関連情報を追加できます。また、表示名は同じだがsystem.hostnameの値が異なるという競合が発生した場合、NetScanがポータル内に重複したリソースを作成する可能性もあります。リソースが適切に更新され、重複したリソースが作成されないようにするため、このNetScanはLogicMonitorのAPIを使用して既存のリソースを照会し、検出された名前の競合を報告します。このファイルはコレクターログからアクセスできます。コレクターログの取得の詳細については、以下を参照してください。 コレクターログ–LogicMonitorへのログの送信.

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

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

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

LogicModulesをインポートする

ExchangeからNutanix Prism Central Logicモジュールをすべてインストールしてください。モジュールが既にインストールされている場合は、最新バージョンを実行していることを確認してください。

パッケージ内のLogicModules

Nutanix Prism Central 監視スイートには、次の LogicModules が含まれています。

モジュール名タイプ 詳細説明
Nutanix_Hypervisor_CPUデータソースPrism Central Hypervisor の CPU 使用率を監視します。
Nutanix_Hypervisor_ControllerPerformanceデータソースPrism Central Hypervisor コントローラーのパフォーマンスを監視します。
Nutanix_Hypervisor_InfoプロパティソースNutanix Prism Central Hypervisor に適切なデバイス プロパティを設定します。
Nutanix_Hypervisor_MemoryデータソースPrism Central ハイパーバイザーのメモリ使用量を監視します。
Nutanix_Hypervisor_NetworkInterfacesデータソースPrism Central Hypervisor ネットワーク インターフェイスのステータスを監視します。
Nutanix_Hypervisor_NodeHealthデータソースPrism Central ハイパーバイザーのステータスとヘルスチェック スコアを監視します。
Nutanix_Hypervisor_StorageデータソースPrism Central Hypervisor のストレージ使用量を監視します。
Nutanix_PrismCentral_ClustersデータソースPrism Central クラスターのパフォーマンス、使用率、ホストの合計数、VM の合計数を監視します。
Nutanix_PrismCentral_HostsデータソースPrism Central ホストのステータスとヘルス チェック スコアを監視します。
Nutanix_PrismCentral_LicensingデータソースPrism Central ライセンス情報と有効期限までの日数を監視します。
Nutanix_PrismCentral_VMsデータソースPrism Central 仮想マシンのパフォーマンスと使用率のメトリックを監視します。
addCategory_Nutanix_HypervisorプロパティソースNutanix Prism Central Hypervisor に適切なカテゴリを設定します。
addCategory_Nutanix_PrismCentralプロパティソースNutanix Prism Centralに適切なカテゴリを設定します

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

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

14日間フルアクセス LogicMonitor プラットフォーム