Перейти к содержимому
Калькуляторы

Отрисовка топологии сети из коммутаторов.

Поделюсь своей поделкой. Писал для изучения Python (2.7 в данном случае) и для решения задачи построения сети в zabbix. Эта штука уже сэкономила мне массу времени и сил.

Собирает маки телнетом и по ним строит топологию сети. Никакого snmp, lldp и cdp, только хардкор =) 

Проверял на сетях от 10 до 500 коммутаторов. Dlink, cisco, olt cdata FD1216S, bdcom, mikrotik c бриджем. Что было, на том и отработал. 

Уверен, что кому-то не подойдет, но кому-то может помочь. Работа еще идет, допиливаю какие-то вещи. В ближайших планах автоматическое вычисление мака шлюза по умолчанию (это мак, который встречается чаще остальных) или мака мониторинга, если у вас мониторинг в той же сети, что и свичи. Вобщем нюансов тоже масса. 

 

https://github.com/infery/zabbix-map-creator

 

В простом случае сеть, которую вы переносите в заббикс, может выглядеть так (просто пример от руки):

 

 

network.png

Изменено пользователем infery

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо! Годное!

Уже запульнул вам issue )

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Пожалуйста!

Сори фор май пур инглиш) ответил как смог. Продублирую здесь. У меня была такая ситуация с snr, таймаут кончался быстрей, чем fdb. Тут тоже не увидел неполадок касательно регэкспов, добавил timeout=120 и запушил, должно работать.

Изменено пользователем infery

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1 час назад, infery сказал:

Пожалуйста!

Сори фор май пур инглиш) ответил как смог. Продублирую здесь. У меня была такая ситуация с snr, таймаут кончался быстрей, чем fdb. Тут тоже не увидел неполадок касательно регэкспов, добавил timeout=120 и запушил, должно работать.

 

У меня такой же инглиш) Спасибо, что помогаете разобраться. Софт немного допилить и будет вполне годным. Фич реквест - сделайте опциональное формирование карты в виде картинки, без добавления карты сети в Zabbix.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Насчет последней траблы - лучше расскажу тут. У меня было такое и это таковы уж длинки; на 3200 и 1210-28 вываливалась такая проблема, кривые транзитные пути. Обновлял прошивку, перезапускал все скрипты снова на обновленной топологии и приходило в норму. Звучит бредово, но как есть. 

 

По заббиксу учту, сделаю опцию, чтобы не трогал заббикс. А вообще скрипт ./build_map генерирует dot-файл <Mapname>.gv, который можно опробовать, например, тут https://dreampuf.github.io/GraphvizOnline , поэтому формировать свою картинку нет необходимости.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

10 минут назад, infery сказал:

Насчет последней траблы - лучше расскажу тут. У меня было такое и это таковы уж длинки; на 3200 и 1210-28 вываливалась такая проблема, кривые транзитные пути. Обновлял прошивку, перезапускал все скрипты снова на обновленной топологии и приходило в норму. Звучит бредово, но как есть. 

 

По заббиксу учту, сделаю опцию, чтобы не трогал заббикс. А вообще скрипт ./build_map генерирует dot-файл <Mapname>.gv, который можно опробовать, например, тут https://dreampuf.github.io/GraphvizOnline , поэтому формировать свою картинку нет необходимости.

 Ок, спасибо за ответ. Попробую на каком-нибудь небольшом сегменте, где нет 3200 и 1210.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

53 минуты назад, StSphinx сказал:

Фич реквест - сделайте опциональное формирование карты в виде картинки, без добавления карты сети в Zabbix

done!

[zabbix]

use_zabbix = no|yes

 

Поправил sql-запрос в build-map, скрипт не получал хосты из базы, у которых не было hostid. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

25 минут назад, infery сказал:

done!

[zabbix]

use_zabbix = no|yes

 

Поправил sql-запрос в build-map, скрипт не получал хосты из базы, у которых не было hostid. 

Попробовал. Словил вот такое:

 

Traceback (most recent call last):
  File "./build_map.py", line 302, in <module>
    lnk_str = '=='.join(sorted_transit_list)
TypeError: sequence item 3: expected string or Unicode, NoneType found

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тяжко заставить работать...

 

Схема:

Роутер Cisco собирающий на себе управляющие vlans (их несколько, сегментировано) - агрегатор сегментов - агрегатор домов - домовая сеть

 

по такой схеме не взлетает, потому что скрипту надо зайти на uplink и считать с него таблицу маков (коотрой у маршрутизатора тютю)

 

можно ли как то исключить проверку аплинка? я ведь его мак указал в ini файле - так вот пускай его и использует для определения магистрального порта на коммутаторе, а остальные порты где есть маки других коммутаторов, но нету мака аплинка - это соответсвенно порты до следущих коммутаторов?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

2 часа назад, Ko_stik сказал:

 

Роутер Cisco собирающий на себе управляющие vlans (их несколько, сегментировано) - агрегатор сегментов - агрегатор домов - домовая сеть

Была сильно похожая схема. По-моему пришлось строить для каждого саб-интерфейса отдельно. 

 

Начинаю понимать, почему нет универсального ПО для таких вещей.

 

2 часа назад, Ko_stik сказал:

можно ли как то исключить проверку аплинка? я ведь его мак указал в ini файле - так вот пускай его и использует для определения магистрального порта на коммутаторе, а остальные порты где есть маки других коммутаторов, но нету мака аплинка - это соответсвенно порты до следущих коммутаторов?

Есть пара вариантов - пустить скрипт на маршрутизатор, зайдет, не найдет маков и уйдет, ничего страшного. 

Второй вариант - убрать из арпа этот маршрутизатор, а вместо мака свича агрегации в файле указать мак-аплинка. Должно сработать

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

4 часа назад, infery сказал:

Была сильно похожая схема. По-моему пришлось строить для каждого саб-интерфейса отдельно. 

 

Начинаю понимать, почему нет универсального ПО для таких вещей.

 

Есть пара вариантов - пустить скрипт на маршрутизатор, зайдет, не найдет маков и уйдет, ничего страшного. 

Второй вариант - убрать из арпа этот маршрутизатор, а вместо мака свича агрегации в файле указать мак-аплинка. Должно сработать

костылявенько

указываю мак маршрутизатора, но пускать его не пускал - телнет выключен на нем

мак роутера в таблице есть всегда а вот мак агрегатора нет... 

в общем полет фантазий для доработок обширный )

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вся эта штука - это один большой костыль размером с дом, согласен на 100%. Вероятно, я совершил ошибку, выложив скрипт в паблик, потому что он дает ложную надежду и отнимает время. 

Но пусть остается как есть 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

44 минуты назад, infery сказал:

Вся эта штука - это один большой костыль размером с дом, согласен на 100%. Вероятно, я совершил ошибку, выложив скрипт в паблик, потому что он дает ложную надежду и отнимает время. 

Но пусть остается как есть 

оооо нет уж, допиливай давай, мы в тебя верим =)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1 час назад, Ko_stik сказал:

мак роутера в таблице есть всегда а вот мак агрегатора нет...

Я неправильно выразился и был неверно понят) 

Есть арп-файл, в нем фигурирует что-то типа

10.0.0.1    11:22:33:44:55:66   <- gateway

10.0.0.20  12:56:12:56:12:55   <- aggregation

 

Удаляем 0.1, подставляем мак в 0.20

10.0.0.20  11:22:33:44:55:66   <- aggregation

 

В итоге мак по-прежнему участвует в вычислениях, а гейтвей отдыхает. Примерно так я и поступал.

Возможно, тебе придется закомментировать строку в build_map.py:268. 

sorted_transit_list.insert(0, uplink_ip)
Изменено пользователем infery

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Есть Netdisco - cтроит топологию по l2, cdp, lldp

Есть Observium/LibreNMS - строит по l2, l3, cdp, lldp. Без визуализации, но, конечно, можно присамопалить

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

On 4/1/2019 at 2:58 PM, infery said:

Поделюсь своей поделкой. Писал для изучения Python (2.7 в данном случае) и для решения задачи построения сети в zabbix. Эта штука уже сэкономила мне массу времени и сил.

Собирает маки телнетом и по ним строит топологию сети. Никакого snmp, lldp и cdp, только хардкор =) 

Проверял на сетях от 10 до 500 коммутаторов. Dlink, cisco, olt cdata FD1216S, bdcom, mikrotik c бриджем. Что было, на том и отработал. 

Уверен, что кому-то не подойдет, но кому-то может помочь. Работа еще идет, допиливаю какие-то вещи. В ближайших планах автоматическое вычисление мака шлюза по умолчанию (это мак, который встречается чаще остальных) или мака мониторинга, если у вас мониторинг в той же сети, что и свичи. Вобщем нюансов тоже масса. 

  

https://github.com/infery/zabbix-map-creator

 

В простом случае сеть, которую вы переносите в заббикс, может выглядеть так (просто пример от руки):

 

 

network.png



ха! коллега!) писать столько парсеров вывода телнета - это точно хардкор!

сколько по времени идет расчет самой топологии без учета опроса самих железок?

свой скрипт немного переписал. сейчас он делает это секунды полторы-две...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Только что, onspeed83 сказал:

сколько по времени идет расчет самой топологии без учета опроса самих железок?

Цели сделать это максимально быстро у меня не было, и расчет напрямую зависит от кол-ва опрошенных железок, поэтому не могу ответить на этот вопрос)

К слову все парсеры однотипные, отличие по-большому счету только в регэкспах. 

Но я не защищаю эту штуку. Если кто скажет, что оно сильно тормозное, отрицать не буду

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Кому интересно вот есть альтернативный вариант рисовки

http://abills.net.ua:8090/pages/viewpage.action?pageId=31883275

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

12 часов назад, OldNeer сказал:

Кому интересно вот есть альтернативный вариант рисовки

http://abills.net.ua:8090/pages/viewpage.action?pageId=31883275

image.thumb.png.9ff49a0c02404b93a499c4cc587e2838.png

 

Мне страшно представить какой у вас там говнокод!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1 час назад, FATHER_FBI сказал:

Мне страшно представить какой у вас там говнокод!

С кодом там как раз может быть все в порядке..

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

5 hours ago, FATHER_FBI said:

image.thumb.png.9ff49a0c02404b93a499c4cc587e2838.png

 

Мне страшно представить какой у вас там говнокод!

 

Ну почему сразу гавно код? Возможно я не русскоязычный человек.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

9 часов назад, FATHER_FBI сказал:

Мне страшно представить какой у вас там говнокод!

Там Perl, и этим все сказано.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тем, что если его использовать именно как язык perl, то на выходе будет нечто элегантное, работающее, но совершенно неподдерживаемое (без соотвествующих психостимуляторов). Если писать на перле как на нормальном ЯП, то встает вопрос - а нахен он тогда сдался, если все то же самое рисуется на нормальных ЯП и на выходе получаем более производительный и экономный к ресурсам код?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

3 hours ago, taf_321 said:

Тем, что если его использовать именно как язык perl, то на выходе будет нечто элегантное, работающее, но совершенно неподдерживаемое (без соотвествующих психостимуляторов). Если писать на перле как на нормальном ЯП, то встает вопрос - а нахен он тогда сдался, если все то же самое рисуется на нормальных ЯП и на выходе получаем более производительный и экономный к ресурсам код?

Можно примеры  в студию ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.