Jump to content
Калькуляторы

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

Поделюсь своей поделкой. Писал для изучения 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

Edited by infery

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Пожалуйста!

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

Edited by infery

Share this post


Link to post
Share on other sites
1 час назад, infery сказал:

Пожалуйста!

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

 

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites
10 минут назад, infery сказал:

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

 

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

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

Share this post


Link to post
Share on other sites
53 минуты назад, StSphinx сказал:

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

done!

[zabbix]

use_zabbix = no|yes

 

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

Share this post


Link to post
Share on other sites
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

 

Share this post


Link to post
Share on other sites

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

 

Схема:

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

 

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

 

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

 

 

Share this post


Link to post
Share on other sites
2 часа назад, Ko_stik сказал:

 

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

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

 

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

 

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

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

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

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

Share this post


Link to post
Share on other sites
4 часа назад, infery сказал:

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

 

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

 

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
44 минуты назад, infery сказал:

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

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

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

Share this post


Link to post
Share on other sites
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)
Edited by infery

Share this post


Link to post
Share on other sites

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

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

 

Share this post


Link to post
Share on other sites
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



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

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

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

Share this post


Link to post
Share on other sites
Только что, onspeed83 сказал:

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

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

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

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

Share this post


Link to post
Share on other sites
12 часов назад, OldNeer сказал:

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

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

image.thumb.png.9ff49a0c02404b93a499c4cc587e2838.png

 

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

Share this post


Link to post
Share on other sites
1 час назад, FATHER_FBI сказал:

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

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

Share this post


Link to post
Share on other sites
5 hours ago, FATHER_FBI said:

image.thumb.png.9ff49a0c02404b93a499c4cc587e2838.png

 

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

 

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

Share this post


Link to post
Share on other sites
9 часов назад, FATHER_FBI сказал:

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
3 hours ago, taf_321 said:

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this