在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%的运维视角,当然,更多运维经验应该是在一次次的实战中去积累。