You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Nutanix PowerShell API筛选过去24小时内的未解决告警

实现方案

核心思路

提前计算对应时间范围的Unix微秒阈值,在拉取告警阶段就完成过滤,避免全量拉取告警后再做二次处理,既简化逻辑也提升运行效率。

具体修改步骤

1. 预定义全局时间阈值

在遍历集群的循环外先计算好需要的时间阈值,避免循环内重复计算:

# 加载凭证和集群列表的原有逻辑保留
$MyNTNXCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $ntnxuserid, (Get-Content $NTNXCredPassPath | ConvertTo-SecureString )
$NTNXClusterList = import-csv -Path C:\path_to_list_of_clusters\ntnxclusters_list.csv

# 新增:预计算时间阈值
$unixEpoch = [DateTime]::new(1970,1,1,0,0,0,[DateTimeKind]::Utc)
# 按需调整时间范围:这里同时给出24小时和2小时的阈值,可根据需求切换
$threshold24hUtc = (Get-Date).AddDays(-1).ToUniversalTime()
$threshold2hUtc = (Get-Date).AddHours(-2).ToUniversalTime()
# 转成和接口返回字段一致的微秒级Unix时间戳
$threshold24hUnixUsec = ($threshold24hUtc - $unixEpoch).TotalSeconds * 1000000
$threshold2hUnixUsec = ($threshold2hUtc - $unixEpoch).TotalSeconds * 1000000
# 定义时区,提到循环外避免重复加载
$myTimeZone=[System.TimeZoneInfo]::FindSystemTimeZoneById("Central Standard Time")

$NTNXAlertArray = @()

2. 拉取告警时增加时间过滤条件

修改Get-NTNXAlert后的过滤逻辑,仅保留符合时间要求的未解决告警:

foreach($NTNXAlertCluster in $NTNXClusterList){
    $NTNXCluster = $NTNXAlertCluster.Name
    Connect-NutanixCluster -Server $NTNXCluster -UserName $MyNTNXCredential.UserName -Password $MyNTNXCredential.Password -AcceptInvalidSSLCerts -ForcedConnection

    # 新增时间过滤条件:如果要筛选2小时内的告警,把下面的$threshold24hUnixUsec换成$threshold2hUnixUsec即可
    # 如果要按最后发生时间过滤,把createdTimeStampInUsecs换成lastOccurrenceTimeStampInUsecs
    $GetNTNXAlert = Get-NTNXAlert | Where-Object {
        $_.resolved -ne $true -and
        $_.createdTimeStampInUsecs -ge $threshold24hUnixUsec
    } | Select-Object alertTitle, message, severity, categories, impact, resolved, createdTimeStampInUsecs, lastOccurrenceTimeStampInUsecs

    foreach($alert in $GetNTNXAlert){ 
        $NTNXAlertTitle = $alert.alertTitle
        $NTNXAlertMessage = $Alert.message
        $NTNXAlertSeverity = $Alert.severity
        $NTNXAlertCategories = $Alert.categories
        $NTNXAlertImpact = $Alert.impact
        $NTNXAlertResolved = $Alert.resolved
        $NTNXAlertCreated = $alert.createdTimeStampInUsecs
        $NTNXLastOccurance= $Alert.lastOccurrenceTimeStampInUsecs

        # 转换时间后补充时区转换逻辑
        $NTNXCreatedDateTime = (New-Object -Type DateTime -ArgumentList 1970, 1, 1, 0, 0, 0, 0).AddSeconds([math]::Floor($NTNXAlertCreated/1000000))
        $NTNXCreatedDateTime = [System.TimeZoneInfo]::ConvertTimeFromUtc($NTNXCreatedDateTime, $myTimeZone)
        $NTNXLastOccuranceDateTime = (New-Object -Type DateTime -ArgumentList 1970, 1, 1, 0, 0, 0, 0).AddSeconds([math]::Floor($NTNXLastOccurance/1000000))
        $NTNXLastOccuranceDateTime = [System.TimeZoneInfo]::ConvertTimeFromUtc($NTNXLastOccuranceDateTime, $myTimeZone)
        
        $NTNXAlertArray += [PSCUSTOMOBJECT]@{
            "Nutanix Cluster" = $NTNXCluster
            "Nutanix Alert Title" = $NTNXAlertTitle
            "Nutanix Alert Message" = $NTNXAlertMessage
            "Nutanix Alert Severity" = $NTNXAlertSeverity
            "Nutanix Alert Category" = $NTNXAlertCategories
            "Nutanix Alert Impact" = $NTNXAlertImpact
            "Nutanix Alert Resolved" = $NTNXAlertResolved
            "Nutanix Alert Created" = $NTNXCreatedDateTime
            "Nutanix Alert Last Occurred" = $NTNXLastOccuranceDateTime
        }
    }
}
$NTNXAlertHTML = $NTNXAlertArray | ConvertTo-HTML -Fragment -PreContent "<h3>NTNX Alerts</h3>"

可选调整说明

  • 如果需要同时展示24小时和2小时的告警,可在生成HTML前对$NTNXAlertArray做二次筛选,用DateTime字段比较更直观:
    # 筛选过去2小时内发生的告警
    $alert2hList = $NTNXAlertArray | Where-Object { $_."Nutanix Alert Last Occurred" -ge (Get-Date).AddHours(-2) }
    $alert2hHTML = $alert2hList | ConvertTo-HTML -Fragment -PreContent "<h3>过去2小时NTNX告警</h3>"
    
  • 时间过滤维度可根据需求切换为创建时间/最后发生时间,只需要修改过滤时对应的字段即可。

内容的提问来源于stack exchange,提问作者Devante

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 13:21:00