dvolodin Опубликовано 3 апреля, 2009 · Жалоба В данный момент именно его и пользую. Но 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 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
dvolodin Опубликовано 3 апреля, 2009 · Жалоба Не изобретайте велосипед - для бекапа конфигов используйте Rancid:http://www.shrubbery.net/rancid/ Ближе по функционалу ZipTie будет :) Сейчас service activation/configuration management - это примерно 1/3 от NOC'а. Задачи совершенно разные. Rancid/ZipTie - сбор конфигов, NOC - автоматизация рутины центра управления сетью. Разборки "кто бросил валенок на пульт" - конечно бывают, но это не самый основной рабочий процесс. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
dvolodin Опубликовано 3 апреля, 2009 (изменено) · Жалоба Для тех, у кого не получилось поставить NOC самостоятельно и для тех, кто просто хочет посмотреть демку я подготовил компактный VMware image (~180M). Для запуска нужен VMware Player/Workstation/Server (Player и Server доступны для скачивания на vmware.com). Анонс и инструкция Изменено 3 апреля, 2009 пользователем dvolodin Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
kostil Опубликовано 3 апреля, 2009 · Жалоба Задается параметром 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 для работы веб морды через апач? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
White_Alex Опубликовано 3 апреля, 2009 · Жалоба Задается параметром 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/ Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
dvolodin Опубликовано 3 апреля, 2009 · Жалоба вот вырезка из документации по апачу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. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
kostil Опубликовано 4 апреля, 2009 · Жалоба а где взять?Image для VMware:http://downloads.nocproject.org/ Логин/пароль: notroot/nocproject.org Адрес: 192.168.1.101 только логин с паролем там вот такие noc/nocproject.org ;) еще было бы классно если бы база была частично заполнена, что бы можно было проще разобраться что к чему :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
dvolodin Опубликовано 4 апреля, 2009 · Жалоба а где взять?Image для VMware:http://downloads.nocproject.org/ Логин/пароль: notroot/nocproject.org Адрес: 192.168.1.101 только логин с паролем там вот такие noc/nocproject.org ;) еще было бы классно если бы база была частично заполнена, что бы можно было проще разобраться что к чему :) Это на web интерфейс. В саму систему - notroot/nocproject.org Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
White_Alex Опубликовано 8 апреля, 2009 · Жалоба Добрый день! есть вот какая ситуация с noc: установлена в VPSке с выделенной ей оперативой 2 гигабайта, ну так вот - если разом добавить например 60-70 новых устройств, то при поллинге оно съедает наглухо всю память и noc-sae выдает кучу tracebackов на cannot allocate memory и вообще когда например количество устройств в тестовой системе noc достигло 300 ситуации с памятью стали довольно часто случаться, потом при следующих опросах оно конечно устаканивается, но выглядит это малоприятно отсюда предложение: а нельзя как-то данный процесс реализовать немного по-другому, ну например как в nagios, где на время поллинга дается некоторая дельта в размере например 30 секунд и опрос устройств идет не разом, а в эту дельту времени в виде случайной очереди (кажется там вот так примерно), на самом деле ведь не критично, прямо сейчас сольется конфиг или минутой позже:-) или как вариант использовать thread pool, чтобы оно само выстраивало запросы в очередь и предотвращало случаи перегруза по ресурсам опять же вопрос как себя ведет активатор, когда у него не хватит количества threads, указанных в настройках? мне показалось, что просто прекращает обработку запросов, выдав ошибку, а не ставит в очередь запросы, когда у него свободные треды появятся сорри за сумбурное немного описание Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
dvolodin Опубликовано 8 апреля, 2009 · Жалоба Добрый день! есть вот какая ситуация с 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 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
White_Alex Опубликовано 8 апреля, 2009 · Жалоба Правильно ли я понимаю, ситуация выглядит так: импортом в систему засасывается сотня устройств, после чего, когда доходит дело до выдирания конфигов, 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 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
White_Alex Опубликовано 9 апреля, 2009 · Жалоба Дмитрий, а нет еще в закромах примера шаблона __init__.py для простого Linux хоста? а то чет не получается его победить Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
tawer Опубликовано 9 апреля, 2009 · Жалоба вот такая бяка при попытке 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' Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
dvolodin Опубликовано 9 апреля, 2009 · Жалоба Дмитрий, а нет еще в закромах примера шаблона __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 одновременными сессиями. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
tawer Опубликовано 9 апреля, 2009 · Жалоба dvolodin, по моему трэйсбэку что скажите? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
White_Alex Опубликовано 9 апреля, 2009 · Жалоба Насколько я вижу, посыпался не SAE, а активатор. Ему просто не дали запустить очередной telnet. Лучше ограничить его 20-30 одновременными сессиями. Дмитрий, если не затруднит, расскажите как? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
dvolodin Опубликовано 9 апреля, 2009 · Жалоба Насколько я вижу, посыпался не 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 ? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
White_Alex Опубликовано 9 апреля, 2009 · Жалоба В etc/noc-activator.conf[activator]/max_pull_config=20 После этого он будет сам себя ограничивать. тогда вопрос - если железки первыми в списке попались отключенные, а остальным при этом сказали, что больше сессий открыть нельзя, что произойдет при следующем опросе? будет ли продолжен поллинг со следующих в очереди железок или оно опять сначала будет пытаться опросить предыдущие? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
dvolodin Опубликовано 9 апреля, 2009 · Жалоба В 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'ы конфигов на почту. Кому какие конфиги можно видеть и получать уведомление об изменении, само собой, настраивается. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
White_Alex Опубликовано 9 апреля, 2009 · Жалоба Спасибо, Дмитрий! просветление наступило:-) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
dvolodin Опубликовано 9 апреля, 2009 · Жалоба Спасибо, Дмитрий! просветление наступило:-) Пожалуйста. Собственно, теперь можно крутить таймауты из etc/noc.conf Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
rkarp Опубликовано 10 апреля, 2009 · Жалоба Всем день добрый! У меня такой вопрос... Не сохраняется конфиг с циски...Т.е. в /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) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
tawer Опубликовано 10 апреля, 2009 (изменено) · Жалоба 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 Изменено 10 апреля, 2009 пользователем tawer Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
dvolodin Опубликовано 10 апреля, 2009 · Жалоба Там был 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'ам Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
dvolodin Опубликовано 10 апреля, 2009 · Жалоба 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. Скорее всего, профиль неправильно назывался. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...