Должен ли я использовать Perl или Python для мониторинга сети?

Я хочу выполнить некоторую работу на сетевом фронте, пинговать многочисленные компьютеры в локальной сети и получать данные о времени отклика. Какой из них был бы наиболее полезным и продуктивным для работы с Perl или Python?

Я согласен с тем, что довольно субъективно, какой язык программирования вы используете – по существу, я бы скорее выполнил эту работу как можно быстрее и эффективнее, что сделало ее доступной – так что это зависит от вашей инфраструктуры …

Могу ли я предложить вам взглянуть на Нагиос, а не на самовосстановление колеса?

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

Ну, я работаю как в Perl, так и в Python, и моя дневная работа поддерживает программное обеспечение для мониторинга сети. Большинство пунктов импорта уже рассмотрены, но я буду консолидировать / повторить здесь:

  1. Не изобретайте велосипед – есть десятки решений сетевого мониторинга, которые вы можете использовать для выполнения тестов ping и анализа собранных данных. См. Например

    • Nagios
    • Zenoss
    • OpenNMS
    • PyNMS
  2. Если вы настаиваете на том, чтобы сделать это самостоятельно, это можно сделать либо в Perl, либо в Python – используйте тот, который вы знаете лучше всего. Если вы планируете разбирать много текста, будет проще сделать это «быстро и грязно» в Perl, чем в Python. Оба могут это сделать, но Python требует подхода OOP, и это просто не так просто, как встроенный синтаксис регулярных выражений Perl.

  3. Использовать библиотеки – многие, многие люди выполнили эту задачу перед тем, как посмотреть на подходящую библиотеку, такую ​​как Net :: Ping в Perl или icmplib в Python или на этот код ping.py.

  4. Используйте потоки или асинхронные пинги – иначе пинг будет продолжаться вечно, например, см. Этот рецепт, используя потоки для одновременного запуска пинга. Это особенно легко сделать в Python, используя любой подход, поэтому это одно место. Python будет легче работать с IMO, чем с помощью Perl.

Пойдите с Perl.

У вас будет доступ к хорошему объекту Ping, Net :: Ping и сохранению результатов в базе данных довольно легко.

Любой должен работать нормально. Если у вас нет опыта, переверните монету. Ни один язык не является по своей природе продуктивным; языки позволяют людям быть продуктивными. Различные люди будут по-разному пользоваться разными языками.

В общем, хотя, когда вы знаете свою конкретную задачу и вам нужно выбрать инструмент, найдите библиотеки, которые сделают вашу жизнь легкой. Для Perl ознакомьтесь с обширной сетью архивов Perl . Существуют модули для всего сетевого взаимодействия, которое вам может понадобиться.

Python, вероятно, имеет очень похожие инструменты и библиотеки; Я просто не знаю, кто они.

Я знаю Perl лучше, чем Python, поэтому мой выбор будет падать на Perl. Тем не менее, я бы сказал, что на низкоуровневых задачах (например, на пинге компьютеров в сети и т. Д.) Они скорее эквивалентны. Python может иметь лучшую объектно-ориентированную поддержку, но для сценариев (что вам и нужно) мощь Perl вполне очевидна. Большой пул тестируемых модулей (некоторые из них даже ориентированы на объекты), которые вы найдете на CPAN, как правило, могут делать все, что вам нужно, и они могут даже хорошо масштабироваться, если вы используете их соответствующим образом.

Я не знаю Python, поэтому я не могу комментировать, что он предлагает, и я согласен с теми, кто предлагает Nagios или другие существующие системы.

Однако, если вы решили перевернуть свою собственную систему с помощью Perl, рассмотрите возможность использования POE . POE – совместная многозадачная и сетевая структура.

POE имеет крутую кривую обучения. Но вы будете очень быстро погашены за свои усилия. POE обеспечит прочную основу для создания. Большая часть кода клиента, который вам понадобится, уже доступен в CPAN.

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

В настоящий момент я экспериментировал с подходом к созданию простого простого тестирования сетевых сервисов с использованием различных TAP-библиотек (в основном bash + netcat + curl и perl). Преимущество состоит в том, что вы написали один скрипт, который вы можете использовать для тестирования как единичных, так и сетевых. Дисплей голубят через TAP :: Harness :: HTML.

Я бы сказал, что если вам понадобится что-то быстрое и грязное, которое работает и сегодня, то perl, вероятно, лучший язык.

Однако для разработки прочного приложения, которое легко поддерживать и расширять, и что вы можете строить с течением времени, я бы пошел с python.

Это, конечно, предполагает, что вы знаете оба языка более или менее одинаково хорошо.