【解析向】腾讯云的Windows Server日志配置收集工具是个什么鬼?(4)

在Windows Server日志配置收集工具的场景2里,有几个模块特别显眼,那就是带着Hard开头的:

GetHardDiskStatus
GetHardCPUStatus
GetHardMenStatus
GetHardBiosStatus
GetHRaid

笔者浏览了一下,忽然明白了,这些参数是针对硬件的,但是这不是针对IaaS层CVM的日志配置收集工具吗?为什么还有硬件的信息收集?难道腾讯云已经突破天际,可以实现软件隔离的情况下把硬件直通,所以才需要硬件日志收集?

接着,我看了下这几个模块的判断分支逻辑输出是:

Write-Progress -Activity "小Q:正在检查是否存在黑石特性并收集信息..."

黑石?原来是黑石,黑石是腾讯云业界首创的IaaS一种特殊形式:

通过技术手段将安全可靠的底层硬件暴露给客户,倒是蛮符合腾讯一贯的赋能作风。

但是一旦硬件开放出来,那就有可能出现问题,而在Windows Server是否有方法收集硬件呢?在传统行业中,要监控硬件或者获取硬件状态,一般需要根据服务器硬件厂商(OEM/ODM)来进行按照对应厂商提供的SA(Server Admin)管理套件进行底层串口获取,但是在互联网行业又是怎么做的呢?

通过解析工具,我们可以看到实现的方式是:

#收集硬件硬盘状态
function GetHardDiskStatus
{
 "hdiskinfo ===<" | Out-File -Append ".\$Dirfilename\hardware.txt"
 "——————————$date : 物理硬盘状态 如下————————————
 " | Out-File -Append ".\$Dirfilename\$Logfilename"
 $getHardDiskStatus = wmic diskdrive | Out-File -Append ".\$Dirfilename\$Logfilename"
 ">===" | Out-File -Append ".\$Dirfilename\hardware.txt"
}
#收集硬件CPU状态
function GetHardCPUStatus
{
 "hcpuinfo ===<" | Out-File -Append ".\$Dirfilename\hardware.txt"
 "——————————$date : 物理CPU状态 如下————————————
 " | Out-File -Append ".\$Dirfilename\hardware.txt"
 $getCPUStatus = wmic cpu | Out-File -Append ".\$Dirfilename\hardware.txt"
 ">===" | Out-File -Append ".\$Dirfilename\hardware.txt"
}
#收集硬件内存状态
function GetHardMenStatus
{
 "hmeninfo ===<" | Out-File -Append ".\$Dirfilename\hardware.txt"
 "——————————$date : 物理内存状态 如下————————————
 " | Out-File -Append ".\$Dirfilename\hardware.txt"
 $getHardMenStatus = wmic memorychip | Out-File -Append ".\$Dirfilename\hardware.txt"
 ">===" | Out-File -Append ".\$Dirfilename\hardware.txt"
}
#收集硬件主板状态
function GetHardBiosStatus
{
 "hbiosinfo ===<" | Out-File -Append ".\$Dirfilename\hardware.txt"
 "——————————$date : 物理主板状态 如下————————————
 " | Out-File -Append ".\$Dirfilename\hardware.txt"
 $getHardBoisStatus = wmic bios | Out-File -Append ".\$Dirfilename\hardware.txt"
 ">===" | Out-File -Append ".\$Dirfilename\;"
}

通过wmic接口进行获取,wmic全称The WMI command-line,WMI接口命令行,WMI的作用在前几篇都介绍过,在这里补充一点,WMI也可以通过系统接口获取有限的硬件状态,但是这是从带内接口进行获取,所以工具这里使用WMI接口获取其实不是特别严谨,在不加额外工具的情况下,较可信的获取方式应该是通过SNMP透传过来(带内手段中)。

对于这种级别的收集,建议只关注Status即可(不过一般带内看如果是Warning就已经很严重了,Error状态基本不可能看到,因为Error状态基本系统也就无法进入了)

在不加载其他的硬件旁路驱动的情况下,腾讯云对于这块收集已经算尽心尽力了,然而,在Raid卡这块的监控明显看到了与四大件不一样的地方:

通过WMI输出Raid卡类型:

 #判断Raid卡类型
 $RaidType = Get-WmiObject -Class Win32_SCSIController | where Name -NE "Microsoft Storage Spaces Controller"

从下面的分支可以看到至少支持Avag/LSI/IBM/PERC/Smart等Raid命令行信息:

 if ($RaidType.Name -like "*Avag*")
 {
  "HRaidinfo ===<" | Out-File -Append $logpath
  C:\WindowsRaidCard\sas3ircu list | Out-File -Append $logpath
  C:\WindowsRaidCard\sas3ircu 0 display | Out-File -Append $logpath
  ">===" | Out-File -Append $logpath
 }
 if ($RaidType.Name -like "*LSI MegaRAID*") {
  "HRaidinfo ===<" | Out-File -Append $logpath
  "FwLog<" | Out-File -Append $logpath
  C:\WindowsRaidCard\MegaCli64 -FwTermLog dsply -a0 >> $logpath
  ">" | Out-File -Append $logpath
  "PdInfo<" | Out-File -Append $logpath
  C:\WindowsRaidCard\MegaCli64 -LdPdinfo -Aall -nolog | Out-File -Append $logpath
  ">" | Out-File -Append $logpath
  ">===" | Out-File -Append $logpath
 }
 if ($RaidType.Name -like "*IBM*")
 {
  "HRaidinfo ===<" | Out-File -Append $logpath
  "FwLog<" | Out-File -Append $logpath
  C:\WindowsRaidCard\MegaCli64 -FwTermLog dsply -a0 >> $logpath
  ">" | Out-File -Append $logpath
  "PdInfo<" | Out-File -Append $logpath
  C:\WindowsRaidCard\MegaCli64 -LdPdinfo -Aall -nolog | Out-File -Append $logpath
  ">" | Out-File -Append $logpath
  ">===" | Out-File -Append $logpath
 }
 if ($RaidType.Name -like "*PERC")
 {
  "HRaidinfo ===<" | Out-File -Append $logpath
  C:\WindowsRaidCard\perccli64 /c0 show all >> $logpath
  ">===" | Out-File -Append $logpath
 }
 if ($RaidType.Name -like "*Smart Array*")
 {
  "HRaidinfo ===<" | Out-File -Append $logpath
  "此黑石服务器无免装命令行工具,请在带外检查Raid卡"
  ">===" | Out-File -Append $logpath
 }
 if ($RaidType.Name -like "*NVM*")
 {
  "HRaidinfo ===<" | Out-File -Append $logpath
  "此黑石服务器为NVMeSSD机型,无免装命令行工具,请直接检查硬盘状态即可"
  ">===" | Out-File -Append $logpath
 }
 ">===" | Out-File -Append ".\$Dirfilename\hardware.txt"
}

其中MegaCli工具不单单在Windows中可以使用,也有Linux版本,所以在Raid卡这里采用这个工具会比较通用,在Windows Server特别是使用了虚拟化技术的Windows Server,对IO会非常敏感,很多业务连接异常都来源IO异常(时延/抖动/带宽),而Raid卡异常在常规系统日志里也只会体现为Warning的“IO重置”。

然而,这些都是系统非自带的命令行工具,日志配置工具是如何解决这个问题的?

$client = new-object System.Net.WebClient
$client.DownloadFile('http://mirrors.tencentyun.com/install/platform_ops/bm/WindowsRaidCard.zip', 'C:\WindowsRaidCard.zip')
if (Test-Path C:\WindowsRaidCard) { }else
 { New-Item -Path C:\WindowsRaidCard -Type Directory }
 Unzip-File -ZipFile C:\WindowsRaidCard.zip -TargetFolder C:\WindowsRaidCard
 Write-Progress -Activity "小Q:正在收集Raid卡硬件信息" -status "$Pi %已完成" -PercentComplete $Pi;

似乎是自己收集了一个对应的工具包,然后通过WebClient进行下载。

至此,也可以看到腾讯云Windows Server 日志配置收集工具在硬件收集上的用心,建议有硬件服务器运维需求的读者,可以参照着用,对于Windows Server,硬件方面的排错建议结合性能/日志一起看,常规硬件状态与对应时间点的Raid卡日志将是硬件故障排错的关键。

在下一篇,将对剩余的7个模块进行介绍,目前到现在这个系列已经发布了4篇,借助腾讯云Windows Server日志配置收集工具加上这五篇的解读可以说覆盖了Windows Server日常70%的运维视角,当然,更多运维经验应该是在一次次的实战中去积累。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注