Jump to content

Recommended Posts

Posted
снуля переделал базу, заново завел тестовый объект, нажал на ссылку 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.
  • Replies 808
  • Created
  • Last Reply

Top Posters In This Topic

Posted

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

 

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

 

 

 

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

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

 

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

 

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

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

 

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

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

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

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

См. Release Notes

Posted (edited)

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

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

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

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

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

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

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

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

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

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

 

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

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

 

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

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

 

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

Posted
# 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 всего :)

 

 

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

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

См. r945

Posted

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

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

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

 

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

Posted

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

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

# cd /opt/noc
# hg tip

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

Posted

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

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

 

Подробнее: CHANGELOG

 

 

Posted (edited)
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

 

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

 

Edited by White_Alex
Posted
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 - это администраторская форма, скорее для коррекции данных.
Posted
дальше чет еще интереснее, видать счастливый я для этой программы:

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

 

DoesNotExist at /ip/5/

 

IPv4Block matching query does not exist.

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

еще один момент - активатор выдает 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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.