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

новый opensource софт для NOC провайдера

снуля переделал базу, заново завел тестовый объект, нажал на ссылку scripts и попытался сделать get_config, получил:

 

ProtocolError at /sa/2/scripts/Cisco.IOS.get_config/

 

<ProtocolError for 127.0.0.1:19702/RPC2: -1 >

 

Request Method: GET

Request URL: http://127.0.0.1:8000/sa/2/scripts/Cisco.IOS.get_config/

Exception Type: ProtocolError

Exception Value:

 

<ProtocolError for 127.0.0.1:19702/RPC2: -1 >

 

Exception Location: /usr/lib/python2.5/xmlrpclib.py in request, line 1191

Python Executable: /usr/bin/python

Python Version: 2.5.4

 

ниче не понимаю, вижу что обламывается на RPC, но как вычислить чего ему не хватает....

Значит будет лишний повод причесать эту часть с XML-RPC, уже назрело. Она используется только для того, чтобы оператор мог выполнить действие из web-интерфейса и для интеграции со сторонними системами. Архивирование конфигов происходит автоматически при включенной периодической задаче cm.pull_config.

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


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

вот такое оно мне выдает в логи при попытках вытаскивания конфига с кошки:

 

2009-03-12 18:07:25,994 INFO Executing cm.config_pull

2009-03-12 18:07:26,008 INFO script Cisco.IOS.get_config(7206-test)

2009-03-12 18:07:26,030 ERROR UNHANDLED EXCEPTION (2009-03-12 18:07:26.010327)

Working directory: /var/www/noc

<type 'exceptions.TypeError'>

22 has type <type 'int'>, but expected one of: (<type 'str'>, <type 'unicode'>)

START OF TRACEBACK

------------------------------------------------------------------------

File: ./scripts/../../noc/sa/sae.py (Line: 385)

Function: periodic_wrapper

378 self.periodic_task_lock.release()

379 t.start()

380

381 def periodic_wrapper(self,task):

382 logging.info(u"Executing %s"%unicode(task))

383 cwd=os.getcwd()

384 try:

385 ==> status=task.periodic_class(self).execute()

386 except:

387 error_report()

388 status=False

389 logging.info(u"Task %s is terminated with '%s'"%(unicode(task),status))

390 if status:

391 timeout=task.run_every

Variables:

self = <noc.sa.sae.SAE object at 0xb7d9efcc>

task = <TaskSchedule: cm.config_pull>

cwd = '/var/www/noc'

------------------------------------------------------------------------

File: /var/www/noc/../noc/cm/periodics/config_pull.py (Line: 20)

Function: execute

13 name="cm.config_pull"

14 description=""

15

16 def execute(self):

17 from noc.cm.models import Config

18 for o in Config.objects.filter((Q(next_pull__lt=datetime.datetime.now())|Q(next_pull__isn

ull=True))&Q(pull_every__isnull=False)).order_by("next_pull"):

19 logging.debug("Pulling %s",str(o))

20 ==> o.pull(self.sae)

21 return True

22

Variables:

self = <noc.cm.periodics.config_pull.Task object at 0x9a1cccc>

Config = <class 'noc.cm.models.Config'>

o = <Config: config/cisco>

------------------------------------------------------------------------

File: /var/www/noc/../noc/cm/models.py (Line: 223)

Function: pull

216 self.next_pull=datetime.datetime.now()+datetime.timedelta(seconds=timeout)

217 self.save()

218 return

219 if self.pull_every:

220 self.next_pull=datetime.datetime.now()+datetime.timedelta(seconds=self.pull_ever

y)

221 self.save()

222 self.write(result)

223 ==> sae.script(self.managed_object,"%s.get_config"%self.managed_object.profile_name,pull_callback)

224 def scripts_link(self):

225 return "<A HREF='/sa/%d/scripts/'>Scripts</A>"%(self.id)

226 scripts_link.short_description="Scripts"

227 scripts_link.allow_tags=True

228 ##

229 ## Access control

Variables:

self = <Config: config/cisco>

pull_callback = <function pull_callback at 0x9a15c6c>

sae = <noc.sa.sae.SAE object at 0xb7d9efcc>

------------------------------------------------------------------------

File: ./scripts/../../noc/sa/sae.py (Line: 443)

Function: script

436 return

437 r=ScriptRequest()

438 r.script=name

439 r.access_profile.profile = object.profile_name

440 r.access_profile.scheme = object.scheme

441 r.access_profile.address = object.address

442 if object.port:

443 ==> r.access_profile.port = object.port

444 if object.user:

445 r.access_profile.user = object.user

446 if object.password:

447 r.access_profile.password = object.password

448 if object.super_password:

449 r.access_profile.super_password= object.super_password

Variables:

name = u'Cisco.IOS.get_config'

stream = <noc.sa.sae.SAESocket object at 0x9a0aa4c>

script_callback = <function script_callback at 0x9a15d4c>

object = <ManagedObject: 7206-test>

callback = <function pull_callback at 0x9a15c6c>

r = <noc.sa.protocols.sae_pb2.ScriptRequest object at 0x9a08c44>

kwargs = {}

self = <noc.sa.sae.SAE object at 0xb7d9efcc>

------------------------------------------------------------------------

File: /var/lib/python-support/python2.5/google/protobuf/reflection.py (Line: 397)

Function: setter

390 type_checker = type_checkers.GetTypeChecker(field.cpp_type, field.type)

391

392 def getter(self):

393 return getattr(self, python_field_name)

394 getter.__module__ = None

395 getter.__doc__ = 'Getter for %s.' % proto_field_name

396 def setter(self, new_value):

397 ==> type_checker.CheckValue(new_value)

398 setattr(self, has_field_name, True)

399 self._MarkByteSizeDirty()

400 self._MaybeCallTransitionToNonemptyCallback()

401 setattr(self, python_field_name, new_value)

402 setter.__module__ = None

403 setter.__doc__ = 'Setter for %s.' % proto_field_name

Variables:

type_checker = <google.protobuf.internal.type_checkers.UnicodeValueChecker object at 0x965ce0c>

new_value = 22

self = <noc.sa.protocols.sae_pb2.AccessProfile object at 0x9ac622c>

python_field_name = '_value_port'

has_field_name = '_has_port'

------------------------------------------------------------------------

File: /var/lib/python-support/python2.5/google/protobuf/internal/type_checkers.py (Line: 117)

Function: CheckValue

110

111 """Checker used for string fields."""

112

113 def CheckValue(self, proposed_value):

114 if not isinstance(proposed_value, (str, unicode)):

115 message = ('%.1024r has type %s, but expected one of: %s' %

116 (proposed_value, type(proposed_value), (str, unicode)))

117 ==> raise TypeError(message)

118

119 # If the value is of type 'str' make sure that it is in 7-bit ASCII

120 # encoding.

121 if isinstance(proposed_value, str):

122 try:

123 unicode(proposed_value, 'ascii')

Variables:

message = "22 has type <type 'int'>, but expected one of: (<type 'str'>, <type 'unicode'>)"

proposed_value = 22

self = <google.protobuf.internal.type_checkers.UnicodeValueChecker object at 0x965ce0c>

------------------------------------------------------------------------

END OF TRACEBACK

 

 

 

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


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

Для Managed Object'а заполнено поле Port?

Что будет, если его оставить пустым?

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


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

Для Managed Object'а заполнено поле Port?

Что будет, если его оставить пустым?

 

все получилось, огромное спасибо за потраченное на меня время

 

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


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

Для Managed Object'а заполнено поле Port?

Что будет, если его оставить пустым?

 

все получилось, огромное спасибо за потраченное на меня время

Продолжаем вылавливать и фиксить архаичные баги :)

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


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

все получилось, огромное спасибо за потраченное на меня время

Баг с сериализацией пофиксен. См. TT #130

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

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


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

Вышел NOC 0.1.7. Среди изменений:

  • Поддержка платформы f5 BIG-IP
  • Поддежка Juniper SRX
  • Встроенная документация
  • Упрощенная процедура установки и обновления
  • Возможность клонирования правил классификации событий
  • Исправлен ряд ошибок, в том числе и те, которые упоминались в этой ветке

См. Release Notes

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


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

вот еще - как грузить в неё MIBы?

а то в комплекте с системой идет набор, а при попытке upload mib на любой ругается Failure: Failed to upload MIB, или это не с web-интерфейса делать надо?

установлена последняя версия из репозитория

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

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


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

вот еще - как грузить в неё MIBы?

а то в комплекте с системой идет набор, а при попытке upload mib на любой ругается Failure: Failed to upload MIB, или это не с web-интерфейса делать надо?

установлена последняя версия из репозитория

libsmi установлен?

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


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

libsmi установлен?

да, все по мануалу сделано было

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


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

libsmi установлен?

да, все по мануалу сделано было

Можно загрузить из CLI:

# su - noc
$ cd /opt/noc
$ python manage.py import-mib <path-to-mib>

 

Если ругнется, то проблема связана либо с неправильными путями к smilint и smidump, либо с правами доступа к local/share/mibs, либо со старой версией libsmi

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


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

# su - noc
$ cd /opt/noc
$ python manage.py import-mib <path-to-mib>

 

Если ругнется, то проблема связана либо с неправильными путями к smilint и smidump, либо с правами доступа к local/share/mibs, либо со старой версией libsmi

спасибо, вот так все получилось (просто неправильно последовательность загрузки соблюдал)

 

а нет примерно такой же возможности пачками однотипные хосты добавлять в базу прямо с командной строки? (понятно, что голым sql запросом можно, но хочется красиво:-)

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


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

# su - noc
$ cd /opt/noc
$ python manage.py import-mib <path-to-mib>

 

Если ругнется, то проблема связана либо с неправильными путями к smilint и smidump, либо с правами доступа к local/share/mibs, либо со старой версией libsmi

спасибо, вот так все получилось (просто неправильно последовательность загрузки соблюдал)

Из web-интерфейса тоже должно заливаться. Чтобы залить MIB надо, чтобы были залиты все MIB'ы, которые он импортрует. В web-интерфейсе пишется, каких MIB'ов ему

не хватает для полного счастья. Учитывая, что компиляция всего вороха MIB-ов - весьма нудная операция, MIB'ы, необходимые для встроенных правил классификации событий

идут с системой и компилируются автоматически.

 

а нет примерно такой же возможности пачками однотипные хосты добавлять в базу прямо с командной строки? (понятно, что голым sql запросом можно, но хочется красиво:-)
Обычно добавляли SQL-запросами. Все равно по железкам придется пройтись, пробить хотя бы syslog и trap'ы на активатор.

В принципе, можно сделать и заливку из CSV, как и для IP-адресов, дел минут на 15 всего :)

 

 

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


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

а нет примерно такой же возможности пачками однотипные хосты добавлять в базу прямо с командной строки? (понятно, что голым sql запросом можно, но хочется красиво:-)
Теперь можно. Service Activation >> Managed Objects. В правом верхнем углу - кнопка "Tools", там инструкция есть.

Первая строка CSV - названия полей, остальные - сами объекты.

См. r945

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


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

еще вопрос - есть ли внятная дока, как с syslog и snmp trap eventами работать? а то собирать-то оно собирает и даже говорит, что classifier отрабатывает, но чего потом с ними делать - мне например из интерфейса непонятно

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


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

еще вопрос - есть ли внятная дока, как с syslog и snmp trap eventами работать? а то собирать-то оно собирает и даже говорит, что classifier отрабатывает, но чего потом с ними делать - мне например из интерфейса непонятно
Надо накатить последние апдейты, там в одном месте шаблон был поломан.

А дальше в меню Fault Management пункт Events.

 

События можно переклассифицировать, закрывать, искать по разным критериям.

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


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

обновился, post-update сделал, все с виду хорошо, однако открываю events и там пусто, хотя я так понимаю должно бы полный список выдавать, если фильтр не ставить, в отчете manage object summary например по каждому объекту показывает, что события в базе есть, что недокручено, чтобы еще и в events это видеть?

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


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

обновился, post-update сделал, все с виду хорошо, однако открываю events и там пусто, хотя я так понимаю должно бы полный список выдавать, если фильтр не ставить, в отчете manage object summary например по каждому объекту показывает, что события в базе есть, что недокручено, чтобы еще и в events это видеть?

# cd /opt/noc
# hg tip

что показывает?

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


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

# cd /opt/noc
# hg tip

что показывает?

abort: requirement 'fncache' not supported! - ругается типа

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


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

# cd /opt/noc
# hg tip

что показывает?

abort: requirement 'fncache' not supported! - ругается типа

NOC поставлен из .tgz?

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


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

Вышел NOC 0.1.8. Cреди изменений:

  • Возможность настройки web-интерфейса из файла конфигурации
  • Загрузка Managed Objects из файлов CSV
  • При выделении IP-адреса в форме автоматически проставляется первый свободный IP-адрес в блоке
  • Исправлена ошибка в форме поиска событий FM, которая приводила к тому, что список событий не отображался
  • Багфиксы, мелкие usability fixes, дополнения в документацию

 

Подробнее: CHANGELOG

 

 

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


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

NOC поставлен из .tgz?

нет, сделан hg clone и т.д.

 

обновился с репозитория - вроде заработало отображение events

 

попробовал загрузку объектов из cvs файла - не взлетело, говорит:

 

AttributeError at /sa/tools/upload_managed_objects/

 

'str' object has no attribute 'META'

 

Request Method: POST

Request URL: http://192.168.4.15:8000/sa/tools/upload_managed_objects/

Exception Type: AttributeError

Exception Value:

 

'str' object has no attribute 'META'

 

Exception Location: /var/lib/python-support/python2.5/django/core/context_processors.py in debug, line 34

 

 

дальше чет еще интереснее, видать счастливый я для этой программы:

в Address Space Management создаю новый блок, привязываю его к новому VRF, иду в Assignment Address, жму педаль на вновь созданном VRF и получаю:

 

DoesNotExist at /ip/5/

 

IPv4Block matching query does not exist.

 

Request Method: GET

Request URL: http://192.168.4.15:8000/ip/5/

Exception Type: DoesNotExist

Exception Value:

 

IPv4Block matching query does not exist.

 

Exception Location: /var/lib/python-support/python2.5/django/db/models/query.py in get, line 309

 

не любит оно меня, хотя могет руки кривые:-)))

 

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

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


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

NOC поставлен из .tgz?
попробовал загрузку объектов из cvs файла - не взлетело, говорит:

 

AttributeError at /sa/tools/upload_managed_objects/

 

'str' object has no attribute 'META'

 

Request Method: POST

Request URL: http://192.168.4.15:8000/sa/tools/upload_managed_objects/

Exception Type: AttributeError

Exception Value:

 

'str' object has no attribute 'META'

 

Exception Location: /var/lib/python-support/python2.5/django/core/context_processors.py in debug, line 34

Можно полный traceback?

 

дальше чет еще интереснее, видать счастливый я для этой программы:

в Address Space Management создаю новый блок, привязываю его к новому VRF, иду в Assignment Address, жму педаль на вновь созданном VRF и получаю:

 

DoesNotExist at /ip/5/

 

IPv4Block matching query does not exist.

 

Request Method: GET

Request URL: http://192.168.4.15:8000/ip/5/

Exception Type: DoesNotExist

Exception Value:

 

IPv4Block matching query does not exist.

 

Exception Location: /var/lib/python-support/python2.5/django/db/models/query.py in get, line 309

 

не любит оно меня, хотя могет руки кривые:-)))

В новом VRF'е надо проверить, что в нем есть блок адресов 0.0.0.0/0 (Была такая особенность, надо поправить наконец-то :) ). Блоки адресов лучше выделять напрямую из Assigned Addresses. IPv4 Blocks - это администраторская форма, скорее для коррекции данных.

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


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

дальше чет еще интереснее, видать счастливый я для этой программы:

в Address Space Management создаю новый блок, привязываю его к новому VRF, иду в Assignment Address, жму педаль на вновь созданном VRF и получаю:

 

DoesNotExist at /ip/5/

 

IPv4Block matching query does not exist.

Это пофиксили. См TT #41. Есть в последних апдейтах.

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


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

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

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


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

Join the conversation

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

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

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

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

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

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

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