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