Наверное каждый администратор, сталкиваясь с сетевым оборудованием,
задается вопросом о мониторинге. На моей работе так сложилось, что
провода не всегда промаркированы и
висят огромным "пауком". Да и вообще, я по натуре ленив и бегать,
лазить, искать "концы"
- это меня напрягает. Есть много различных программ и целых проектов
для мониторинга. Но они либо сложно настраиваются, либо слишком
громоздки (90% функционала мне не нужно). Мне нужно было получать
информацию о включении и отключении портов, об access и voice vlan на
портах.
Пример: я послал инженера в серверную и попросил выдернуть из сервера патч. Он дернул - я увидел в какой порт он приходит, какие vlan на нем.
Теперь к сути и по шагам.
1. Настраиваем community на Cisco (у меня 99% оборудования cisco и поэтому писал под них).
Я создал комъюнити "mycommun" и разрешил к нему доступ с двух ip адресов.
configure terminal
snmp-server community mycommun RO 5
snmp-server location MyCity
access-list 5 permit 10.0.0.250
access-list 5 permit 10.0.5.215
end
wri
2. В файлике device.txt добавляем устройства для мониторинга.
Пример:
10.0.111.55 - Офис 1, (стек из 7)
10.0.111.60 - Офис 2, 10 каб
Можно в файл ничего не добавлять и запускать из командной строки:
ciscomon.exe /ip:10.0.111.55
3. Я тестировал на Cisco 3750, так что если oid не совпадают, то можно поковырять файл "OID.txt"
4. Все, запускаем и наблюдаем. Желтым цветом надписей выделяются гигабитные порты.Опрос идет раз в минуту, либо по кнопке "Refresh". Информация падает в Memo и соответственно отображается графически. При наведениии на порт показывается информация о vlan. Работает со стеками. Рисует графики загрузки CPU, Memory, Temperature.
5. Скачать
6. Исходники, если кому нужно вышлю на почту. А так вот пример одной из процедуры:
Procedure GetMySNMPinfo(host,commun,oid:string;var SP:TStringList);
var
i:integer;
SNMP:TidSNMP;
begin
SNMP:=TIdSNMP.Create(Form1);
SP.Clear;
SNMP.Community := commun;
SNMP.Host := host;
SNMP.Query.Clear;
SNMP.Query.MIBAdd(OID, '');
SNMP.Query.PDUType := PDUGetNextRequest;
//While port162 do
// sleep(100);
// port162:=true;
while SNMP.SendQuery do
begin
if (Copy(SNMP.Reply.MIBOID[0], 1, Length(OID)) <> OID) then
Break;
for I := 0 to SNMP.Reply.ValueCount - 1 do
SP.Append(SNMP.Reply.ValueOID[i]+' = '+IntToStr(SNMP.Reply.ValueType[i]) +' : '+ SNMP.Reply.Value[I]);
SNMP.Query.Clear;
SNMP.Query.MIBAdd(SNMP.Reply.ValueOID[0], '');
SNMP.Query.PDUType := PDUGetNextRequest;
end;
SNMP.Destroy;
// port162:=false;
end;
Пример: я послал инженера в серверную и попросил выдернуть из сервера патч. Он дернул - я увидел в какой порт он приходит, какие vlan на нем.
Теперь к сути и по шагам.
1. Настраиваем community на Cisco (у меня 99% оборудования cisco и поэтому писал под них).
Я создал комъюнити "mycommun" и разрешил к нему доступ с двух ip адресов.
configure terminal
snmp-server community mycommun RO 5
snmp-server location MyCity
access-list 5 permit 10.0.0.250
access-list 5 permit 10.0.5.215
end
wri
2. В файлике device.txt добавляем устройства для мониторинга.
Пример:
10.0.111.55 - Офис 1, (стек из 7)
10.0.111.60 - Офис 2, 10 каб
Можно в файл ничего не добавлять и запускать из командной строки:
ciscomon.exe /ip:10.0.111.55
3. Я тестировал на Cisco 3750, так что если oid не совпадают, то можно поковырять файл "OID.txt"
4. Все, запускаем и наблюдаем. Желтым цветом надписей выделяются гигабитные порты.Опрос идет раз в минуту, либо по кнопке "Refresh". Информация падает в Memo и соответственно отображается графически. При наведениии на порт показывается информация о vlan. Работает со стеками. Рисует графики загрузки CPU, Memory, Temperature.
5. Скачать
6. Исходники, если кому нужно вышлю на почту. А так вот пример одной из процедуры:
Procedure GetMySNMPinfo(host,commun,oid:string;var SP:TStringList);
var
i:integer;
SNMP:TidSNMP;
begin
SNMP:=TIdSNMP.Create(Form1);
SP.Clear;
SNMP.Community := commun;
SNMP.Host := host;
SNMP.Query.Clear;
SNMP.Query.MIBAdd(OID, '');
SNMP.Query.PDUType := PDUGetNextRequest;
//While port162 do
// sleep(100);
// port162:=true;
while SNMP.SendQuery do
begin
if (Copy(SNMP.Reply.MIBOID[0], 1, Length(OID)) <> OID) then
Break;
for I := 0 to SNMP.Reply.ValueCount - 1 do
SP.Append(SNMP.Reply.ValueOID[i]+' = '+IntToStr(SNMP.Reply.ValueType[i]) +' : '+ SNMP.Reply.Value[I]);
SNMP.Query.Clear;
SNMP.Query.MIBAdd(SNMP.Reply.ValueOID[0], '');
SNMP.Query.PDUType := PDUGetNextRequest;
end;
SNMP.Destroy;
// port162:=false;
end;
Комментариев нет:
Отправить комментарий