Стандартная функция слежения за свободным паространством на сервере, входящая в набор сервера мониторинга The dude, опрашивает только первый жесткий диск сервера и игнорирует остальные, поэтому необходимо дополнить сервер мониторинга своей функцией.
Для мониторинга за свободным местом на дисках серверов в настройках программы необходимо создать функцию обработки SNMP информации, например для диска D: функция выглядит так:
Name: Disk_D_FreeSpace Description: Code: if ( string_find ( oid_column("1.3.6.1.2.1.25.2.3.1.3",600), "D:" ) <> 4294967295, if ( string_find ( oid ( concatenate ( "iso.org.dod.internet.mgmt.mib-2.host.hrStorage.hrStorageTable.hrStorageEntry.hrStorageType.", array_find ( oid_column("1.3.6.1.2.1.25.2.3.1.3",600), string_substring ( oid_column("1.3.6.1.2.1.25.2.3.1.3",600), string_find ( oid_column("1.3.6.1.2.1.25.2.3.1.3",600), "D:" ), string_find ( oid_column("1.3.6.1.2.1.25.2.3.1.3",600), ",", string_find ( oid_column("1.3.6.1.2.1.25.2.3.1.3",600), "D:" ) ) - string_find ( oid_column("1.3.6.1.2.1.25.2.3.1.3",600), "D:" ) ) ) + 1 ) ), "iso.org.dod.internet.mgmt.mib-2.host.hrStorage.hrStorageTypes.hrStorageFixedDisk" ) <> 4294967295, string_substring ( ( 1 - oid ( concatenate ( "iso.org.dod.internet.mgmt.mib-2.host.hrStorage.hrStorageTable.hrStorageEntry.hrStorageUsed.", array_find ( oid_column("1.3.6.1.2.1.25.2.3.1.3",600), string_substring ( oid_column("1.3.6.1.2.1.25.2.3.1.3",600), string_find ( oid_column("1.3.6.1.2.1.25.2.3.1.3",600), "D:" ), string_find ( oid_column("1.3.6.1.2.1.25.2.3.1.3",600), ",", string_find ( oid_column("1.3.6.1.2.1.25.2.3.1.3",600), "D:" ) ) - string_find ( oid_column("1.3.6.1.2.1.25.2.3.1.3",600), "D:" ) ) ) + 1 ) ) / oid ( concatenate ( "iso.org.dod.internet.mgmt.mib-2.host.hrStorage.hrStorageTable.hrStorageEntry.hrStorageSize.", array_find ( oid_column("1.3.6.1.2.1.25.2.3.1.3",600), string_substring ( oid_column("1.3.6.1.2.1.25.2.3.1.3",600), string_find ( oid_column("1.3.6.1.2.1.25.2.3.1.3",600), "D:" ), string_find ( oid_column("1.3.6.1.2.1.25.2.3.1.3",600), ",", string_find ( oid_column("1.3.6.1.2.1.25.2.3.1.3",600), "D:" ) ) - string_find ( oid_column("1.3.6.1.2.1.25.2.3.1.3",600), "D:" ) ) ) +1 ) ) ) * 100, 0, 4 ), "" ), "" )
Эта функция работает по следующему алгоритму:
1. Проверяется, есть ли в массиве дисков опрашиваемого устройства диск, в описании которого содержится "D:".
2. Ищется индекс диска, в описании которого содержится "D:" (эта подфункция будет использоваться несколько раз).
3. Проверяется, если найденный диск является жестким диском (hrStorageFixedDisk).
4. Запрашивается используемое место на диске с указанным индексом.
5. Запрашивается емкость диска с указанным индексом.
6. Вычисляется свободное место в процентах по формуле (1 - (занятое место / емкость диска)) * 100
7. От полученного значения берется подстрока из первых 4 символа, а остальное отсекается.
Для того, чтобы создать функцию опроса для другого диска, например для E:, нужно заменить в тексте функции имя диска D: на E:
Чтобы сервер мониторинга The dude проверял наличие дисков в серверах, согласно созданной функции, необходимо создать пробу SNMP, например для диска D: проба выглядит так:
Name: Disk D free space Type: Function Agent: Default Available: Disk_D_FreeSpace()>0 Error: if(Disk_D_FreeSpace() < 10, "Low Disk Space D:", "") Value: Disk_D_FreeSpace() Unit: %
Чтобы на карте дисков отображать информацию по свободному пространству на серверах, необходимо создать следующую функцию:
Name: device_FreeSpace Description: Code: concatenate ( if ( Disk_C_FreeSpace(), concatenate("C: ", Disk_C_FreeSpace(), "% free "), "" ), if ( Disk_D_FreeSpace(), concatenate("D: ", Disk_D_FreeSpace(), "% free "), "" ), if ( Disk_E_FreeSpace(), concatenate("E: ", Disk_E_FreeSpace(), "% free "), "" ) )
Созданную функцию device_FreeSpace нужно вставить в значек устройства в настройках сервера на вкладке Map в секцию Device appearance:
Label: [Device.Name] [device_performance()] [device_FreeSpace()] [Device.ServicesDown]
Стандартную пробу с именем disk, желательно удалить с сервера, а чтобы не потеряеть ее конфигурацию, ее параметры приведены ниже:
Name: disk Type: Function Agent: Default Available: hdd_size() > 0 Error: if(hdd_size() > 0, "", "down") Value: hdd_usage() Unit: %