Monitoring Intel VROC with rstcli

Hello!

I’m trying to monitor a windows machine with a vroc-raid from intel. (Virtual RAID on CPU)
I have two “controllers” activated. The VROC for NVME and the origine RST SATA Controller.

I modified the check_mk_agent-plugin (rstcli.bat) to match IntelVROCCli.exe.

The service-discovery for this plugin is working for the NVME-Volume. The other Volumes doesnt appear.
I couldn’t figure out the difference. There are no interesting “ifs” in the sourcecode for this check plugin.

Anybody a hint for me to look out?

Here the output of rstcli:

<<<rstcli:sep(58)>>>
--VOLUME INFORMATION--

Name:                  System
Raid Level:            1
Size:                  300.00 GB
StripeSize:            N/A
Num Disks:             2
State:                 Normal
System:                True
Bootable:              True
Initialized:           False
Cache Policy:          Off

--DISKS IN VOLUME: System --

ID:                    0-0-0-0
Type:                  Disk
Disk Type:             SATA
State:                 Normal
Size:                  3576.98 GB
System Disk:           False
Usage:                 Array member
Serial Number:         S6E9999999999996
Model:                 SAMSUNG MZ799999999999BLT-00A07
Logical sector size:   512 B

ID:                    0-1-0-0
Type:                  Disk
Disk Type:             SATA
State:                 Normal
Size:                  3576.98 GB
System Disk:           False
Usage:                 Array member
Serial Number:         S6E999999999
Model:                 SAMSUNG MZ9999999T-00A07
Logical sector size:   512 B

--VOLUME INFORMATION--

Name:                  SSD-SATA
Raid Level:            1
Size:                  3276.97 GB
StripeSize:            N/A
Num Disks:             2
State:                 Normal
System:                False
Bootable:              True
Initialized:           True
Cache Policy:          Off

--DISKS IN VOLUME: SSD-SATA --

ID:                    0-0-0-0
Type:                  Disk
Disk Type:             SATA
State:                 Normal
Size:                  3576.98 GB
System Disk:           False
Usage:                 Array member
Serial Number:         S6ER99999996
Model:                 SAMSUNG MZ99999999-00A07
Logical sector size:   512 B

ID:                    0-1-0-0
Type:                  Disk
Disk Type:             SATA
State:                 Normal
Size:                  3576.98 GB
System Disk:           False
Usage:                 Array member
Serial Number:         S6ER999999949
Model:                 SAMSUNG MZ79999999999-00A07
Logical sector size:   512 B

--VOLUME INFORMATION--

Name:                  SSD-NVME
Raid Level:            1
Size:                  3398.13 GB
StripeSize:            N/A
Num Disks:             2
State:                 Normal
System:                False
Bootable:              True
Initialized:           True
Cache Policy:          Off

--DISKS IN VOLUME: SSD-NVME --

ID:                    1-0-0-0
Type:                  Disk
Disk Type:             NVMe*
State:                 Normal
Size:                  3576.98 GB
System Disk:           False
PCH Connected:         False
Usage:                 Array member
Serial Number:         20999D9C999A
Model:                 Micron_7300_XXXXXX
Logical sector size:   512 B
Socket Number:         0
Vmd Controller Number: 4
Root Port Offset:      0
Slot Number:           272

ID:                    1-0-1-0
Type:                  Disk
Disk Type:             NVMe*
State:                 Normal
Size:                  3576.98 GB
System Disk:           False
PCH Connected:         False
Usage:                 Array member
Serial Number:         20992D9C99XX
Model:                 Micron_7300_XXXXXXTDF
Logical sector size:   512 B
Socket Number:         0
Vmd Controller Number: 4
Root Port Offset:      1
Slot Number:           288

@beli3005 looks like there is a bug in the parse function of rstcli check plugin.

 95 def parse_rstcli(info):
 96     if info == [["rstcli not found"]]:
 97         return {}
 98 
 99     rstcli_sections = parse_rstcli_sections(info)
100     if rstcli_sections is None:
101         return {}
102 
103     volumes = {}
104     for section in rstcli_sections:
105         if section[0] == "VOLUME INFORMATION":
106             volumes.update(parse_rstcli_volumes(section[1]))
107         elif section[0].startswith("DISKS IN VOLUME"):
108             volume = section[0].split(":")[1].strip()
109             volumes[volume]["Disks"] = parse_rstcli_disks(section[1])
110         else:
111             raise MKGeneralException("invalid section in rstcli output: %s" % section[0])
112 
113     return volumes

line 106

106             volumes = parse_rstcli_volumes(section[1])

needs to be changed to

106             volumes.update(parse_rstcli_volumes(section[1]))

after tis change the check will discover three volumes with two disks each

RAID Disk SSD-NVME/1-0-0-0 Normal (unit: SSD-NVME, size: 3576.98 GB, type: NVMe*, model: Micron_7300_XXXXXX, serial: 20999D9C999A)
RAID Disk SSD-NVME/1-0-1-0 Normal (unit: SSD-NVME, size: 3576.98 GB, type: NVMe*, model: Micron_7300_XXXXXXTDF, serial: 20992D9C99XX)
RAID Disk SSD-SATA/0-0-0-0 Normal (unit: SSD-SATA, size: 3576.98 GB, type: SATA, model: SAMSUNG MZ99999999-00A07, serial: S6ER99999996)
RAID Disk SSD-SATA/0-1-0-0 Normal (unit: SSD-SATA, size: 3576.98 GB, type: SATA, model: SAMSUNG MZ79999999999-00A07, serial: S6ER999999949)
RAID Disk System/0-0-0-0 Normal (unit: System, size: 3576.98 GB, type: SATA, model: SAMSUNG MZ799999999999BLT-00A07, serial: S6E9999999999996)
RAID Disk System/0-1-0-0 Normal (unit: System, size: 3576.98 GB, type: SATA, model: SAMSUNG MZ9999999T-00A07, serial: S6E999999999)
RAID Volume SSD-NVME RAID 1, 2 disks (3398.13 GB), state Normal
RAID Volume SSD-SATA RAID 1, 2 disks (3276.97 GB), state Normal
RAID Volume System   RAID 1, 2 disks (300.00 GB), state Normal

3 Likes

you nailed it

great appreciation

Thanks!