Servers - SNMP функция опроса свободного места на диске

Реклама:
Записка от 05.06.2015

Стандартная функция слежения за свободным паространством на сервере, входящая в набор сервера мониторинга 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: %
Вверх