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

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

В данный момент именно его и пользую. Но rancid только для бэкапов, не более того. А лично мне нужна полноценная система управления и мониторинга сети.

Выхода два:

1. Взять набор софта rancid, cacti, nagios и т.д. связать все это в единую систему, дописать все что не хватает.

2. Воспользоваться готовым ПО которое совмещает в себе максимум необходимого функционала.

Интеграция большого количества разнородного софта - сама по себе трудоемкая задача. Если результатом пользуется 1-2 человека, то еще терпимо, если 20-30,

то в полный рост начинают выползать различные проблемы, связанные с правами доступа и сложностью освоения.

 

to dvolodin

Пробую заставить работать веб морду под apache

не могу понять где файл /noc.fcgi который должен быть FastCgiServer. Судя по примерам конфигов lighttpd.conf и nginx.conf он должен быть в "/opt/noc" но найти я его не могу.

Задается параметром socket в разделе [fascgi] в etc/noc-fcgi.conf. По умолчанию: /tmp/noc.fcgi

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


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

Не изобретайте велосипед - для бекапа конфигов используйте Rancid:

http://www.shrubbery.net/rancid/

Ближе по функционалу ZipTie будет :) Сейчас service activation/configuration management - это примерно 1/3 от NOC'а.

 

Задачи совершенно разные. Rancid/ZipTie - сбор конфигов, NOC - автоматизация рутины центра управления сетью.

Разборки "кто бросил валенок на пульт" - конечно бывают, но это не самый основной рабочий процесс.

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


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

Для тех, у кого не получилось поставить NOC самостоятельно и для тех, кто просто хочет посмотреть демку

я подготовил компактный VMware image (~180M). Для запуска нужен VMware Player/Workstation/Server

(Player и Server доступны для скачивания на vmware.com).

 

Анонс и инструкция

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

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


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

Задается параметром socket в разделе [fascgi] в etc/noc-fcgi.conf. По умолчанию: /tmp/noc.fcgi

застрял опять :(

 

 

вот вырезка из документации по апачу

FastCgiServer Syntax: FastCgiServer filename [option ...]

Context: server config, virtual host

The FastCgiServer directive defines filename as a static FastCGI application. If the filename does not begin with a slash (/) then it is assumed to be relative to the ServerRoot.

 

что должно быть на месте файлнэйм? из конфигураций lighttpd.conf и nginx.conf похоже на то что /noc.fcgi который должен быть в /opt/noc

 

делаю вот так

<IfModule mod_fastcgi.c>
FastCgiIpcDir /tmp
FastCgiServer /noc.fcgi -socket /tmp/noc.fcgi
</IfModule>

 

получаю

Syntax error on line 630 of /usr/local/etc/apache/httpd.conf:
FastCgiServer: "/noc.fcgi" stat(/noc.fcgi) failed: No such file or directory

 

пробовал вот так

<IfModule mod_fastcgi.c>
FastCgiIpcDir /tmp
FastCgiServer /tmp/noc.fcgi
</IfModule>

 

получил

[Fri Apr  3 13:41:53 2009] [notice] FastCGI: process manager initialized (pid 92439)
[Fri Apr  3 13:41:53 2009] [warn] FastCGI: server "/tmp/noc.fcgi" started (pid 92440)
FastCGI: can't start server "/tmp/noc.fcgi" (pid 92440), execle() failed: Permission denied
[Fri Apr  3 13:41:53 2009] [warn] FastCGI: server "/tmp/noc.fcgi" (pid 92440) terminated by calling exit with status '255'

 

должен ли быть запущен ./scripts/noc-fcgi.py для работы веб морды через апач?

 

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


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

Задается параметром socket в разделе [fascgi] в etc/noc-fcgi.conf. По умолчанию: /tmp/noc.fcgi

застрял опять :(

 

 

вот вырезка из документации по апачу

FastCgiServer Syntax: FastCgiServer filename [option ...]

Context: server config, virtual host

The FastCgiServer directive defines filename as a static FastCGI application. If the filename does not begin with a slash (/) then it is assumed to be relative to the ServerRoot.

вот может это чем-то поможет:

http://docs.djangoproject.com/en/dev/howto...oyment/fastcgi/

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


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

вот вырезка из документации по апачу

FastCgiServer Syntax: FastCgiServer filename [option ...]

Context: server config, virtual host

The FastCgiServer directive defines filename as a static FastCGI application. If the filename does not begin with a slash (/) then it is assumed to be relative to the ServerRoot.

 

что должно быть на месте файлнэйм? из конфигураций lighttpd.conf и nginx.conf похоже на то что /noc.fcgi который должен быть в /opt/noc

 

делаю вот так

<IfModule mod_fastcgi.c>
FastCgiIpcDir /tmp
FastCgiServer /noc.fcgi -socket /tmp/noc.fcgi
</IfModule>

 

получаю

Syntax error on line 630 of /usr/local/etc/apache/httpd.conf:
FastCgiServer: "/noc.fcgi" stat(/noc.fcgi) failed: No such file or directory

 

пробовал вот так

<IfModule mod_fastcgi.c>
FastCgiIpcDir /tmp
FastCgiServer /tmp/noc.fcgi
</IfModule>

 

получил

[Fri Apr  3 13:41:53 2009] [notice] FastCGI: process manager initialized (pid 92439)
[Fri Apr  3 13:41:53 2009] [warn] FastCGI: server "/tmp/noc.fcgi" started (pid 92440)
FastCGI: can't start server "/tmp/noc.fcgi" (pid 92440), execle() failed: Permission denied
[Fri Apr  3 13:41:53 2009] [warn] FastCGI: server "/tmp/noc.fcgi" (pid 92440) terminated by calling exit with status '255'

Должно быть что-то вроде

FastCgiExternalServer /noc.fcgi -socket /tmp/noc.fcgi

 

Следующим шагом надо откусить статику и отправить все остальные запросы в сокет. Можно использовать mod_rewrite.

Что-то вроде вот такого.

RewriteEngine On
RewriteRule ^/(media.*)$ /$1 [QSA,L,PT]
RewriteRule ^/(static.*)$ /$1 [QSA,L,PT]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ /noc.fcgi/$1 [QSA,L]

 

должен ли быть запущен ./scripts/noc-fcgi.py для работы веб морды через апач?
Да, конечно, именно он и обрабатывает все запросы. HTTP сервер только отдает статику и проксирует запросы к noc-fcgi.

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


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

а где взять?
Image для VMware:

http://downloads.nocproject.org/

 

Логин/пароль: notroot/nocproject.org

Адрес: 192.168.1.101

только логин с паролем там вот такие noc/nocproject.org ;)

еще было бы классно если бы база была частично заполнена, что бы можно было проще разобраться что к чему :)

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


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

а где взять?
Image для VMware:

http://downloads.nocproject.org/

 

Логин/пароль: notroot/nocproject.org

Адрес: 192.168.1.101

только логин с паролем там вот такие noc/nocproject.org ;)

еще было бы классно если бы база была частично заполнена, что бы можно было проще разобраться что к чему :)

Это на web интерфейс. В саму систему - notroot/nocproject.org

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


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

Добрый день!

 

есть вот какая ситуация с noc: установлена в VPSке с выделенной ей оперативой 2 гигабайта, ну так вот - если разом добавить например 60-70 новых устройств, то при поллинге оно съедает наглухо всю память и noc-sae выдает кучу tracebackов на cannot allocate memory и вообще когда например количество устройств в тестовой системе noc достигло 300 ситуации с памятью стали довольно часто случаться, потом при следующих опросах оно конечно устаканивается, но выглядит это малоприятно

 

отсюда предложение: а нельзя как-то данный процесс реализовать немного по-другому, ну например как в nagios, где на время поллинга дается некоторая дельта в размере например 30 секунд и опрос устройств идет не разом, а в эту дельту времени в виде случайной очереди (кажется там вот так примерно), на самом деле ведь не критично, прямо сейчас сольется конфиг или минутой позже:-)

 

или как вариант использовать thread pool, чтобы оно само выстраивало запросы в очередь и предотвращало случаи перегруза по ресурсам

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

 

сорри за сумбурное немного описание

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


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

Добрый день!

 

есть вот какая ситуация с noc: установлена в VPSке с выделенной ей оперативой 2 гигабайта, ну так вот - если разом добавить например 60-70 новых устройств, то при поллинге оно съедает наглухо всю память и noc-sae выдает кучу tracebackов на cannot allocate memory и вообще когда например количество устройств в тестовой системе noc достигло 300 ситуации с памятью стали довольно часто случаться, потом при следующих опросах оно конечно устаканивается, но выглядит это малоприятно

 

отсюда предложение: а нельзя как-то данный процесс реализовать немного по-другому, ну например как в nagios, где на время поллинга дается некоторая дельта в размере например 30 секунд и опрос устройств идет не разом, а в эту дельту времени в виде случайной очереди (кажется там вот так примерно), на самом деле ведь не критично, прямо сейчас сольется конфиг или минутой позже:-)

Оно примерно так и делает. У активатора есть лимит на количество одновременно запущенных скриптов. При достижении лимита он просто шлет сообщение о перегрузке и SAE назначает новый опрос устройства (делая при этом небольшую рандомизацию). Если включено периодический опрос fm.ping_check, то активатор запоминает результаты последнего опроса и не лезет

на неживые железки.

 

Правильно ли я понимаю, ситуация выглядит так: импортом в систему засасывается сотня устройств, после чего, когда доходит дело до выдирания конфигов, SAE выжирает всю память?

Попробую воспроизвести, хотя это странно, такого я не замечал, хотя за раз три сотни новых устройств мы обтрясали. Traceback остался?

 

или как вариант использовать thread pool, чтобы оно само выстраивало запросы в очередь и предотвращало случаи перегруза по ресурсам

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

 

сорри за сумбурное немного описание

Управление задачами ведет SAE. get_config нет смысла ставить в очередь, если он не прошел, проще просто поставить новое время опроса.

 

Сам алгоритм тут: http://trac.nocproject.org/trac/browser/cm/models.py#L240

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


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

Правильно ли я понимаю, ситуация выглядит так: импортом в систему засасывается сотня устройств, после чего, когда доходит дело до выдирания конфигов, SAE выжирает всю память?

Попробую воспроизвести, хотя это странно, такого я не замечал, хотя за раз три сотни новых устройств мы обтрясали. Traceback остался?

да, пожалуйста

 

2009-04-07 15:23:15,902 ERROR script(DLink.DES3xxx.get_config,**{}) failed: <type 'exceptions.OSError'>

[Errno 12] Cannot allocate memory

START OF TRACEBACK

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

File: /opt/noc/../noc/sa/script.py (Line: 169)

Function: run

162

163 def serialize_result(self,result):

164 return cPickle.dumps(result)

165

166 def run(self):

167 self.debug("Running")

168 try:

169 ==> self.result=self.serialize_result(self.guarded_run())

170 except:

171 t,v,tb=sys.exc_info()

172 r=[str(t),str(v)]

173 r+=[format_frames(get_traceback_frames(tb))]

174 self.error_traceback="\n".join®

175 self.debug("Script traceback:\n%s"%self.error_traceback)

Variables:

self = <script(script-10.1.33.134-DLink.DES3xxx.get_config, started)>

r = ["<type 'exceptions.OSError'>", '[Errno 12] Cannot allocate memory']

tb = <traceback object at 0x913c824>

t = <type 'exceptions.OSError'>

v = OSError(12, 'Cannot allocate memory')

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

File: /opt/noc/../noc/sa/script.py (Line: 156)

Function: guarded_run

149

150 def guarded_run(self):

151 self.debug("Guarded run")

152 # Enforce interface type checking

153 for i in self.implements:

154 self.kwargs=i.clean(**self.kwargs)

155 # Calling script body

156 ==> result=self.execute(**self.kwargs)

157 # Enforce interface result checking

158 for i in self.implements:

159 result=i.clean_result(result)

160 self.debug("Script returns with result: %s"%result)

161 return result

162

Variables:

i = <noc.sa.interfaces.igetconfig.IGetConfig object at 0x8ed70ec>

self = <script(script-10.1.33.134-DLink.DES3xxx.get_config, started)>

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

File: /opt/noc/../noc/sa/profiles/DLink/DES3xxx/get_config.py (Line: 15)

Function: execute

8 import noc.sa.script

9 from noc.sa.interfaces import IGetConfig

10

11 class Script(noc.sa.script.Script):

12 name="DLink.DES3xxx.get_config"

13 implements=[iGetConfig]

14 def execute(self):

15 ==> self.cli("disable clipaging")

16 config=self.cli("show config current_config")

17 return self.cleaned_config(config)

Variables:

self = <script(script-10.1.33.134-DLink.DES3xxx.get_config, started)>

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

File: /opt/noc/../noc/sa/script.py (Line: 202)

Function: cli

195 self.cli_provider=s_class(self.activator.factory,self.profile,self.access_profil

e)

196 self.cli_provider.queue.get(block=True) # Wait until provider in PROMPT

197 self.debug("CLI Provider is ready")

198 return self.cli_provider

199

200 def cli(self,cmd):

201 self.debug("cli(%s)"%cmd)

202 ==> self.request_cli_provider()

203 self.cli_provider.submit(cmd)

204 data=self.cli_provider.queue.get(block=True)

205 if self.strip_echo and data.lstrip().startswith(cmd):

206 data=self.strip_first_lines(data.lstrip())

207 self.debug("cli() returns:\n---------\n%s\n---------"%data)

208 return data

Variables:

self = <script(script-10.1.33.134-DLink.DES3xxx.get_config, started)>

cmd = 'disable clipaging'

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

File: /opt/noc/../noc/sa/script.py (Line: 195)

Function: request_cli_provider

188 self.debug("Running new provider")

189 if self.access_profile.scheme==TELNET:

190 s_class=CLITelnetSocket

191 elif self.access_profile.scheme==SSH:

192 s_class=CLISSHSocket

193 else:

194 raise Exception("Invalid access scheme '%d' for CLI"%self.access_profile.scheme)

195 ==> self.cli_provider=s_class(self.activator.factory,self.profile,self.access_profil

e)

196 self.cli_provider.queue.get(block=True) # Wait until provider in PROMPT

197 self.debug("CLI Provider is ready")

198 return self.cli_provider

199

200 def cli(self,cmd):

201 self.debug("cli(%s)"%cmd)

Variables:

s_class = <class 'noc.sa.script.CLITelnetSocket'>

self = <script(script-10.1.33.134-DLink.DES3xxx.get_config, started)>

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

File: /opt/noc/../noc/sa/script.py (Line: 414)

Function: __init__

407 #

408 ##

409 ##

410 class CLITelnetSocket(ScriptSocket,CLI,PTYSocket):

411 def __init__(self,factory,profile,access_profile):

412 logging.debug("CLITelnetSocket connecting '%s'"%access_profile.address)

413 CLI.__init__(self,profile,access_profile)

414 ==> PTYSocket.__init__(self,factory,["/usr/bin/telnet",access_profile.address])

415 ScriptSocket.__init__(self)

416 ##

417 ##

418 ##

419 class CLISSHSocket(ScriptSocket,CLI,PTYSocket):

420 def __init__(self,factory,profile,access_profile):

Variables:

profile = <noc.sa.profiles.DLink.DES3xxx.Profile object at 0x9175b8c>

self = <noc.sa.script.CLITelnetSocket object at 0x916a12c>

factory = <noc.lib.nbsocket.SocketFactory object at 0x8eb808c>

access_profile = <noc.sa.protocols.sae_pb2.AccessProfile object at 0x90c29ac>

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

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

File: /opt/noc/../noc/lib/nbsocket.py (Line: 309)

Function: __init__

302 ##

303 ## PTY Socket Emulation

304 ## Events: on_read, on_close

305 ##

306 class PTYSocket(Socket):

307 def __init__(self,factory,argv):

308 self.out_buffer=""

309 ==> self.pid,fd=pty.fork()

310 if self.pid==0:

311 os.execv(argv[0],argv)

312 else:

313 Socket.__init__(self,factory,FileWrapper(fd))

314

315 def handle_read(self):

Variables:

self = <noc.sa.script.CLITelnetSocket object at 0x916a12c>

factory = <noc.lib.nbsocket.SocketFactory object at 0x8eb808c>

argv = ['/usr/bin/telnet', u'10.1.33.134']

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

File: /usr/lib/python2.5/pty.py (Line: 108)

Function: fork

101 os.setsid()

102 except OSError:

103 # os.forkpty() already set us session leader

104 pass

105 return pid, fd

106

107 master_fd, slave_fd = openpty()

108 ==> pid = os.fork()

109 if pid == CHILD:

110 # Establish a new session.

111 os.setsid()

112 os.close(master_fd)

113

114 # Slave becomes stdin/stdout/stderr of child.

Variables:

slave_fd = 117

master_fd = 116

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

END OF TRACEBACK

 

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


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

Дмитрий, а нет еще в закромах примера шаблона __init__.py для простого Linux хоста? а то чет не получается его победить

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


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

вот такая бяка при попытке get_confg с 3526

 

AttributeError at /sa/3/scripts/DLink.DES3xxx.get_config/

'exceptions.Exception' object has no attribute 'faultString'Request Method: GET

Request URL: http://noc.xxxxxx:81/sa/3/scripts/DLink.DES3xxx.get_config/

Exception Type: AttributeError

Exception Value: 'exceptions.Exception' object has no attribute 'faultString'

Exception Location: ./scripts/../../noc/sa/views.py in object_script, line 70

Python Executable: /usr/local/bin/python

Python Version: 2.5.4

Python Path: ['./scripts', './scripts/..', './scripts/../..', '/usr/local/noc/scripts', '/usr/local/lib/python2.5/site-packages/setuptools-0.6c9-py2.5.egg', '/usr/local/lib/python2.5/site-packages/psycopg2-2.0.9-py2.5-freebsd-6.4-STABLE-amd64.egg', '/usr/local/lib/python2.5/site-packages/Django-1.0.2_final-py2.5.egg', '/usr/local/lib/python2.5/site-packages/Sphinx-0.6.1-py2.5.egg', '/usr/local/lib/python2.5/site-packages/docutils-0.5-py2.5.egg', '/usr/local/lib/python2.5/site-packages/Jinja2-2.1.1-py2.5-freebsd-6.4-STABLE-amd64.egg', '/usr/local/lib/python2.5/site-packages/Pygments-1.0-py2.5.egg', '/usr/local/lib/python2.5/site-packages/flup-1.0.1-py2.5.egg', '/usr/local/lib/python2.5/site-packages/pysnmp-4.1.7a-py2.5.egg', '/usr/local/lib/python2.5/site-packages/pyasn1-0.0.6a-py2.5.egg', '/usr/local/lib/python2.5/site-packages/netifaces-0.5-py2.5-freebsd-6.4-STABLE-amd64.egg', '/usr/local/lib/python2.5/site-packages/pyke-1.0-py2.5.egg', '/usr/local/lib/python2.5/site-packages/hgsvn-0.1.6-py2.5.egg', '/usr/local/lib/python2.5/site-packages/protobuf-2.0.3-py2.5.egg', '/usr/local/lib/python2.5/site-packages/South-0.5-py2.5.egg', '/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', '/usr/local/lib/python2.5/plat-freebsd6', '/usr/local/lib/python2.5/lib-tk', '/usr/local/lib/python2.5/lib-dynload', '/usr/local/lib/python2.5/site-packages']

Server time: Чет, 9 Апр 2009 14:02:17 +0400

 

Traceback Switch to copy-and-paste view

/usr/local/lib/python2.5/site-packages/Django-1.0.2_final-py2.5.egg/django/core/handlers/base.py in get_response

...

response = callback(request, *callback_args, **callback_kwargs) ...

▶ Local vars

/usr/local/lib/python2.5/site-packages/Django-1.0.2_final-py2.5.egg/django/contrib/auth/decorators.py in __call__

...

return self.view_func(request, *args, **kwargs) ...

▶ Local vars

./scripts/../../noc/sa/views.py in object_script

...

return render_failure(request,"Script Failed",why.faultString) ...

▶ Local vars

Request information

GET

 

No GET data

POST

 

No POST data

COOKIESVariable Value

sessionid 'c65e7ba20711506123e2eb7ebd2248b3'

 

METAVariable Value

DOCUMENT_ROOT '/usr/local/noc'

GATEWAY_INTERFACE 'CGI/1.1'

HTTP_ACCEPT 'text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1'

HTTP_ACCEPT_CHARSET 'iso-8859-1, utf-8, utf-16, *;q=0.1'

HTTP_ACCEPT_ENCODING 'deflate, gzip, x-gzip, identity, *;q=0'

HTTP_ACCEPT_LANGUAGE 'en'

HTTP_CACHE_CONTROL 'no-cache'

HTTP_CONNECTION 'Keep-Alive, TE'

HTTP_COOKIE 'sessionid=c65e7ba20711506123e2eb7ebd2248b3'

HTTP_COOKIE2 '$Version=1'

HTTP_HOST 'noc.xxxxx:81'

HTTP_REFERER 'http://noc.xxxxxx:81/sa/3/scripts/'

HTTP_TE 'deflate, gzip, chunked, identity, trailers'

HTTP_USER_AGENT 'Opera/9.52 (X11; FreeBSD 7.0-STABLE i386; U; ru)'

PATH_INFO u'/sa/3/scripts/DLink.DES3xxx.get_config/'

PATH_TRANSLATED '/usr/local/noc/sa/3/scripts/DLink.DES3xxx.get_config/'

QUERY_STRING ''

REDIRECT_STATUS '200'

REDIRECT_URI '/noc.fcgi/sa/3/scripts/DLink.DES3xxx.get_config/'

REMOTE_ADDR 'xxxxx'

REMOTE_PORT '56522'

REQUEST_METHOD 'GET'

REQUEST_URI '/sa/3/scripts/DLink.DES3xxx.get_config/'

SCRIPT_FILENAME '/usr/local/noc/noc.fcgi'

SCRIPT_NAME u''

SERVER_ADDR '192.168.7.16'

SERVER_NAME 'noc.xxxxx:81'

SERVER_PORT '81'

SERVER_PROTOCOL 'HTTP/1.1'

SERVER_SOFTWARE 'lighttpd/1.4.22'

wsgi.errors <flup.server.fcgi_base.TeeOutputStream object at 0x20acd90>

wsgi.input <flup.server.fcgi_base.InputStream object at 0x20acf90>

wsgi.multiprocess False

wsgi.multithread True

wsgi.run_once False

wsgi.url_scheme 'http'

wsgi.version (1, 0)

 

Settings

Using settings module noc.settingsSetting Value

ABSOLUTE_URL_OVERRIDES {}

ADMINS [('xxx', 'xxx@xxxxxx')]

ADMIN_FOR ()

ADMIN_MEDIA_PREFIX '/media/'

ALLOWED_INCLUDE_ROOTS ()

APPEND_SLASH True

AUTHENTICATION_BACKENDS ('django.contrib.auth.backends.ModelBackend',)

BANNED_IPS ()

CACHE_BACKEND 'locmem:///'

CACHE_MIDDLEWARE_KEY_PREFIX ''

CACHE_MIDDLEWARE_SECONDS 600

COMMENTS_ALLOW_PROFANITIES False

COMMENTS_BANNED_USERS_GROUP None

COMMENTS_FIRST_FEW 0

COMMENTS_MODERATORS_GROUP None

COMMENTS_SKETCHY_USERS_GROUP None

DATABASE_ENGINE 'postgresql_psycopg2'

DATABASE_HOST ''

DATABASE_NAME 'noc2'

DATABASE_OPTIONS {}

DATABASE_PASSWORD '********************'

DATABASE_PORT ''

DATABASE_USER 'nocuser'

DATETIME_FORMAT 'N j, Y, P'

DATE_FORMAT 'N j, Y'

DEBUG 'false'

DEBUG_PROPAGATE_EXCEPTIONS False

DEFAULT_CHARSET 'utf-8'

DEFAULT_CONTENT_TYPE 'text/html'

DEFAULT_FILE_STORAGE 'django.core.files.storage.FileSystemStorage'

DEFAULT_FROM_EMAIL 'webmaster@localhost'

DEFAULT_INDEX_TABLESPACE ''

DEFAULT_TABLESPACE ''

DISALLOWED_USER_AGENTS ()

EMAIL_HOST 'localhost'

EMAIL_HOST_PASSWORD '********************'

EMAIL_HOST_USER ''

EMAIL_PORT 25

EMAIL_SUBJECT_PREFIX '[Django] '

EMAIL_USE_TLS False

FILE_CHARSET 'utf-8'

FILE_UPLOAD_HANDLERS ('django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler')

FILE_UPLOAD_MAX_MEMORY_SIZE 2621440

FILE_UPLOAD_PERMISSIONS None

FILE_UPLOAD_TEMP_DIR None

FIXTURE_DIRS ()

FORCE_SCRIPT_NAME ''

IGNORABLE_404_ENDS ('mail.pl', 'mailform.pl', 'mail.cgi', 'mailform.cgi', 'favicon.ico', '.php')

IGNORABLE_404_STARTS ('/cgi-bin/', '/_vti_bin', '/_vti_inf')

INSTALLED_APPS ['django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.admin', 'south', 'noc.main', 'noc.sa', 'noc.fm', 'noc.cm', 'noc.ip', 'noc.vc', 'noc.dns', 'noc.peer']

INTERNAL_IPS ()

JING_PATH '/usr/bin/jing'

LANGUAGES (('ar', 'Arabic'), ('bn', 'Bengali'), ('bg', 'Bulgarian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('el', 'Greek'), ('en', 'English'), ('es', 'Spanish'), ('et', 'Estonian'), ('es-ar', 'Argentinean Spanish'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('ga', 'Irish'), ('gl', 'Galician'), ('hu', 'Hungarian'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('ko', 'Korean'), ('km', 'Khmer'), ('kn', 'Kannada'), ('lv', 'Latvian'), ('lt', 'Lithuanian'), ('mk', 'Macedonian'), ('nl', 'Dutch'), ('no', 'Norwegian'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sr', 'Serbian'), ('sv', 'Swedish'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('uk', 'Ukrainian'), ('zh-cn', 'Simplified Chinese'), ('zh-tw', 'Traditional Chinese'))

LANGUAGES_BIDI ('he', 'ar', 'fa')

LANGUAGE_CODE 'ru'

LANGUAGE_COOKIE_NAME 'django_language'

LOCALE_PATHS ()

LOGIN_REDIRECT_URL '/accounts/profile/'

LOGIN_URL '/accounts/login/'

LOGOUT_URL '/accounts/logout/'

MANAGERS [('xxx', 'xxx@xxxxxxxx')]

MEDIA_ROOT ''

MEDIA_URL ''

MIDDLEWARE_CLASSES ('django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.middleware.doc.XViewMiddleware', 'django.middleware.transaction.TransactionMiddleware')

MONTH_DAY_FORMAT 'F j'

PASSWORD_RESET_TIMEOUT_DAYS '********************'

PREPEND_WWW False

PROFANITIES_LIST '********************'

ROOT_URLCONF 'noc.urls'

SECRET_KEY '********************'

SEND_BROKEN_LINK_EMAILS False

SERVER_EMAIL 'root@localhost'

SESSION_COOKIE_AGE 1209600

SESSION_COOKIE_DOMAIN None

SESSION_COOKIE_NAME 'sessionid'

SESSION_COOKIE_PATH '/'

SESSION_COOKIE_SECURE False

SESSION_ENGINE 'django.contrib.sessions.backends.db'

SESSION_EXPIRE_AT_BROWSER_CLOSE False

SESSION_FILE_PATH None

SESSION_SAVE_EVERY_REQUEST False

SETTINGS_MODULE 'noc.settings'

SITE_ID 1

TEMPLATE_CONTEXT_PROCESSORS ('django.core.context_processors.auth', 'django.core.context_processors.debug', 'django.core.context_processors.i18n', 'django.core.context_processors.media', 'noc.lib.render.setup_processor')

TEMPLATE_DEBUG 'false'

TEMPLATE_DIRS ('.', 'template')

TEMPLATE_LOADERS ('django.template.loaders.filesystem.load_template_source', 'django.template.loaders.app_directories.load_template_source')

TEMPLATE_STRING_IF_INVALID ''

TEST_DATABASE_CHARSET None

TEST_DATABASE_COLLATION None

TEST_DATABASE_NAME None

TEST_RUNNER 'django.test.simple.run_tests'

TIME_FORMAT 'P'

TIME_ZONE 'Europe/Moscow'

TRANSACTIONS_MANAGED False

URL_VALIDATOR_USER_AGENT 'Django/1.0.2 final (http://www.djangoproject.com)'

USE_ETAGS False

USE_I18N True

YEAR_MONTH_FORMAT 'F Y'

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


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

Дмитрий, а нет еще в закромах примера шаблона __init__.py для простого Linux хоста? а то чет не получается его победить
На Протеях Linux (Protei.MediaGateway).

Если проблемы с пейджером, то самый заковыристый на f5.BIGIP

 

 

 

Правильно ли я понимаю, ситуация выглядит так: импортом в систему засасывается сотня устройств, после чего, когда доходит дело до выдирания конфигов, SAE выжирает всю память?

Попробую воспроизвести, хотя это странно, такого я не замечал, хотя за раз три сотни новых устройств мы обтрясали. Traceback остался?

да, пожалуйста

 

2009-04-07 15:23:15,902 ERROR script(DLink.DES3xxx.get_config,**{}) failed: <type 'exceptions.OSError'>

[Errno 12] Cannot allocate memory

 

START OF TRACEBACK

Насколько я вижу, посыпался не SAE, а активатор. Ему просто не дали запустить очередной telnet. Лучше ограничить его 20-30 одновременными сессиями.

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


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

dvolodin, по моему трэйсбэку что скажите?

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


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

Насколько я вижу, посыпался не SAE, а активатор. Ему просто не дали запустить очередной telnet. Лучше ограничить его 20-30 одновременными сессиями.

Дмитрий, если не затруднит, расскажите как?

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


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

Насколько я вижу, посыпался не SAE, а активатор. Ему просто не дали запустить очередной telnet. Лучше ограничить его 20-30 одновременными сессиями.

Дмитрий, если не затруднит, расскажите как?

В etc/noc-activator.conf

[activator]/max_pull_config=20

 

После этого он будет сам себя ограничивать.

 

Это при попытке запуска через web-интерфейс?

вот такая бяка при попытке get_confg с 3526

 

AttributeError at /sa/3/scripts/DLink.DES3xxx.get_config/

'exceptions.Exception' object has no attribute 'faultString'Request Method: GET

Это при попытке запуска через web-интерфейс?

 

SAE живой? Что в логах noc-sae.log и noc-activator.log ?

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


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

В etc/noc-activator.conf

[activator]/max_pull_config=20

 

После этого он будет сам себя ограничивать.

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

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


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

В etc/noc-activator.conf

[activator]/max_pull_config=20

 

После этого он будет сам себя ограничивать.

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

Если до хоста не удалось добраться в течении минуты, следующий опрос будет через 300 секунд (+- 10% случайного разброса). Если активатор отшиб запрос с сообщением о перегрузке, следующий опрос будет назначен через 150 секунд (+- 10% разброса). Если включен опрос хостов (fm.check_ping) и известно, что сейчас хост лежит, то следующая проверка будет через 60 секунд (+- 10%). Если хост опрошен успешно, то следующий опрос назначается через значение pull_every в конфиге для этой железки. Если с железки пришло событие, которое было классифицировано как Config Changed, то следующий опрос будет через 10 минут.

 

Чисто физически, в таблице cm_config есть поле next_pull. Из нее выбираются все записи, у которых next_pull меньше текущего времени, сортируются по возрастанию и опрашиваются по порядку. По результатам опроса поле next_pull корректируется.

 

Если надо срочно опросить железку, то можно просто приравнять next_pull к 'now'

psql> UPDATE cm_config SET next_pull='now' WHERE id=<ID конфига>;

(Наверное, надо таки сделать кнопку "Pull Now", чтобы не шаманить).

 

В целом, если нового железа много, в течении какого-то времени отлупы, конечно, будут, но потом все устаканится. Даже если железка видна только короткое время, ее все равно подловят. Параметры, подбирали под наши условия. Наверное, имеет смысл вообще вынести их в конфиг, чтобы можно было подтюнить под себя.

 

 

 

И, естественно, NOC умеет присылать diff'ы конфигов на почту. Кому какие конфиги можно видеть и получать уведомление об изменении, само собой, настраивается.

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


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

Спасибо, Дмитрий!

 

просветление наступило:-)

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


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

Спасибо, Дмитрий!

 

просветление наступило:-)

Пожалуйста. Собственно, теперь можно крутить таймауты из etc/noc.conf

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


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

Всем день добрый!

У меня такой вопрос...

Не сохраняется конфиг с циски...Т.е. в /var/repo пусто...Через scripts-> get_config все отлично,конфиг получает.Так же работают get_version,ping.

Делаю Pull Every 30s или Next Pull - Now...не чего не происходит,в логах чисто,в /var/repo пусто.

Ставил все по документации.

Помогите плиз...

 

Debian Lenny(vmware)

Python 2.5.2

Cisco7200(dynamips)

 

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


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

dvolodin

вот такая бяка при попытке get_confg с 3526

 

AttributeError at /sa/3/scripts/DLink.DES3xxx.get_config/

'exceptions.Exception' object has no attribute 'faultString'Request Method: GET

Это при попытке запуска через web-интерфейс?

 

SAE живой? Что в логах noc-sae.log и noc-activator.log ?

 

 

SAE заваливается после выдергивания конфига, похоже.

 

 

2009-04-10 09:28:21,660 INFO XML-RPC.script DLink.DES3xxx.get_config(object_id=3)

2009-04-10 09:28:21,663 INFO script DLink.DES3xxx.get_config(d3526-1)

2009-04-10 09:28:35,548 ERROR UNHANDLED EXCEPTION (2009-04-10 09:28:35.519258)

Working directory: /usr/local/noc

<class 'noc.sa.models.DoesNotExist'>

ManagedObject matching query does not exist.

START OF TRACEBACK

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

File: ./scripts/../../noc/lib/daemon.py (Line: 163)

Function: start

156 ## "start" command handler

157 ##

158 def start(self):

159 # Daemonize

160 if self.options.daemonize:

161 self.become_daemon()

162 try:

163 ==> self.run()

164 except KeyboardInterrupt:

165 pass

166 except:

167 error_report()

168 ##

169 ## "stop" command handler

Variables:

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

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

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

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

Function: run

325 tasks = TaskSchedule.get_pending_tasks(exclude=self.active_periodic_tasks.keys())

326 self.periodic_task_lock.release()

327 last_task_check=time.time()

328 if tasks:

329 for t in tasks:

330 self.run_periodic_task(t)

331 if time.time()-last_crashinfo_check>=60:

332 ==> self.collect_crashinfo()

333 last_crashinfo_check=time.time()

334 ##

335 ## Collect crashinfo and write as FM events

336 ##

337 def collect_crashinfo(self):

338 if not self.config.get("main","logfile"):

Variables:

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

tasks = []

last_crashinfo_check = 1239341254.9342821

last_task_check = 1239341306.2681799

last_cleanup = 1239341254.934279

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

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

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

Function: collect_crashinfo

336 ##

337 def collect_crashinfo(self):

338 if not self.config.get("main","logfile"):

339 return

340 c_d=os.path.dirname(self.config.get("main","logfile"))

341 if not os.path.isdir(c_d):

342 return

343 ==> mo=ManagedObject.objects.get(name="ROOT")

344 event_priority=EventPriority.objects.get(name="DEFAULT")

345 event_class=EventClass.objects.get(name="DEFAULT")

346 event_category=EventCategory.objects.get(name="DEFAULT")

347 for fn in [fn for fn in os.listdir(c_d) if fn.startswith(DEBUG_CTX_CRASH_PREFIX)]:

348 path=os.path.join(c_d,fn)

349 try:

Variables:

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

c_d = '/var/log/noc'

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

File: /usr/local/lib/python2.5/site-packages/Django-1.0.2_final-py2.5.egg/django/db/models/manager.py (Line: 93

Function: get

86 def distinct(self, *args, **kwargs):

87 return self.get_query_set().distinct(*args, **kwargs)

88

89 def extra(self, *args, **kwargs):

90 return self.get_query_set().extra(*args, **kwargs)

91

92 def get(self, *args, **kwargs):

93 ==> return self.get_query_set().get(*args, **kwargs)

94

95 def get_or_create(self, **kwargs):

96 return self.get_query_set().get_or_create(**kwargs)

97

98 def create(self, **kwargs):

99 return self.get_query_set().create(**kwargs)

Variables:

self = <django.db.models.manager.Manager object at 0x14acf10>

args = ()

kwargs = {'name': 'ROOT'}

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

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

File: /usr/local/lib/python2.5/site-packages/Django-1.0.2_final-py2.5.egg/django/db/models/query.py (Line: 309)

Function: get

302 """

303 clone = self.filter(*args, **kwargs)

304 num = len(clone)

305 if num == 1:

306 return clone._result_cache[0]

307 if not num:

308 raise self.model.DoesNotExist("%s matching query does not exist."

309 ==> % self.model._meta.object_name)

310 raise self.model.MultipleObjectsReturned("get() returned more than one %s -- it returned %s!

311 % (self.model._meta.object_name, num, kwargs))

312

313 def create(self, **kwargs):

314 """

315 Creates a new object with the given kwargs, saving it to the database

Variables:

clone = []

num = 0

self = [<ManagedObject: d3526-V43-1>]

args = ()

kwargs = {'name': 'ROOT'}

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

END OF TRACEBACK

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

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


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

Там был Managed Object под названием ROOT. Не надо его удалять.

dvolodin
вот такая бяка при попытке get_confg с 3526

 

AttributeError at /sa/3/scripts/DLink.DES3xxx.get_config/

'exceptions.Exception' object has no attribute 'faultString'Request Method: GET

Это при попытке запуска через web-интерфейс?

 

SAE живой? Что в логах noc-sae.log и noc-activator.log ?

 

 

SAE заваливается после выдергивания конфига, похоже.

 

Всем день добрый!

У меня такой вопрос...

Не сохраняется конфиг с циски...Т.е. в /var/repo пусто...Через scripts-> get_config все отлично,конфиг получает.Так же работают get_version,ping.

Делаю Pull Every 30s или Next Pull - Now...не чего не происходит,в логах чисто,в /var/repo пусто.

Ставил все по документации.

Помогите плиз...

 

Debian Lenny(vmware)

Python 2.5.2

Cisco7200(dynamips)

В Service Activation > Task Schedules надо добавить задачу cm.config_pull (с периодичностью 300 секунд).

Pull Every в Config не имеет смысла делать меньше 1 дня, NOC умеет автоматически перечитывать конфиги с Cisco по сообщениям syslog и trap'ам

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


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

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

 

Пофиксил. r1036. Скорее всего, профиль неправильно назывался.

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


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

Join the conversation

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

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

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

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

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

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

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