News:

We really need your input in this questionnaire

Main Menu
Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - Anth0ny

#241
Приветствую!

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

Как лучше всего реализовать данное комплексное получение данных и связать воедино для того, что бы здоровье системы определялось совокупностью всех показателей? (Предположим, что мы знаем какие цифры мы получим, т.е. трэшолды создать возможность у нас есть).

Какой из текущих инструментов, входящих в NetXMS позволяет это сделать?

Какие самые общие рекомендации при реализации такого рода комплексного опроса?

Пример 1: определяем состояние и здоровье MS SQL сервера.

\SQLServer:Buffer Manager\Buffer cache hit ratio
(процент запросов на получение страницы, которые
выполняются без обращения к жесткому диску).

\SQLServer:Buffer Manager\Page reads/sec
(среднее число страниц в секунду, которое SQL-сервер
читает с дисковой системы).

\SQLServer:SQL Statistics\Batch Requests/sec
(среднее число пакетных запросов в секунду).

\SQLServer:SQL Statistics\SQL Re-Compilations/sec
(среднее число рекомпиляций в секунду).

\Process(sqlservr)\% Processor Time
(утилизация процессоров, создаваемая процессом SQL-сервер).

\Process(sqlagent)\% Processor Time
(утилизация процессоров, создаваемая процессом SQL-агент).

\SQLServer:Locks(_Total)\Average Wait Time (ms)
(среднее время ожидания выполнения запросов блокировки).

\SQLServer:Locks(_Total)\Lock Wait Time (ms)
(общее время ожидания выполнения запросов блокировки).

Пример 2: определяем состояние и здоровье MS DNS сервера.

\DNS\Database Node Memory;
(Память узлов в базе данных)

\DNS\Dynamic Update Queued;
(Поставлено в очередь динамических обновлений)

\DNS\Total Query Received/sec;
(Общее число полученных запросов/сек)

\DNS\Total Response Sent/sec;
(Отправлено всего ответов/сек)

\Process(dns)\% Processor Time;
(Процесс(dns)\% загруженности процессора)

\DNS\Recursive Query Failure/sec;
(Рекурсивных ошибок запросов/сек)

\DNS\Recursive TimeOut/sec;
(Рекурсивных таймаутов отправления/сек)
#242
Quote from: Victor Kirhenshtein

^HTTP/1\.[01] 200.*<html.*red.* - togda mi budem iskat' slovo red tol'ko posle taga <html>.


Виктор, вопрос:
ServiceCheck.HTTP(10.200.1.100,80,/worktest.html,www.intwww.local,"^HTTP/1\.[01] 200.*<body.*red.*")

я правильно понял Вашу мысль?
будет такой запрос искать слово red начиная с тега <body id="popup"> ?

возникла следующая проблема: запрос не работает если страница, к которой он обращается, выглядит следующим образом (это исходник полученной страницы).


<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:x="http://www.w3.org/1999/xhtml" xml:space="x">
<head>
<link rel="stylesheet" type="text/css" href="/css/firefox/main.css" media="screen"/>
<link rel="stylesheet" type="text/css" href="/css/firefox/popup.css" media="screen"/>
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
<script type="text/javascript" src="/MonoRail/Files/AjaxScripts.visp"></script>
<script type="text/javascript" src="/MonoRail/Files/BehaviourScripts.visp"></script>
<!-- Behaviours -->
<script type="text/javascript">
<!--//--><![CDATA[//><!--
function writeX( parNode, elem, val)
{
            var par = document.getElementById(parNode);
            if( val && par)
            {
                var p = document.createElement( elem);
                try
                {
                    p.innerHTML = val;
                    par.appendChild(p);
                }
                catch(e){}
            }
        }

document.write = function (s)
        {
            writeX( "counters", "span", s);
        }

        function addSpyLog()
        {
            writeX( 'counters', 'span', '<a href="http://u10123.54.spylog.com/cnt?cid=1012354&amp;f=3&amp;p=0" onclick="window.open(this.href); return false;"><img src="http://u10123.54.spylog.com/cnt?cid=1012354&amp;p=0" alt="SpyLOG" border="0" width="88" height="31"/></a>');
        }

function validateMail( mail)
{
var pattern = new RegExp("[\.\-_A-Za-z0-9]+@([\.\-_A-Za-z0-9]+)+(\.[A-Za-z0-9]{2,6})+");
return pattern.test(mail);
}





function getElementsByClass(searchClass,node,tag)
{
var classElements = new Array();
if (node == null) node = document;
if (tag == null) tag = '*';
var els = node.getElementsByTagName(tag);
var elsLen = els.length;
var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
for (i = 0, j = 0; i < elsLen; i++)
{
if (pattern.test(els[i].className) )
{
classElements[j] = els[i];
j++;
    }
}
return classElements;
}

function setCursorPosition(oInput,oStart,oEnd)
    {
        if (oInput.setSelectionRange)
        {
        oInput.setSelectionRange(oStart,oEnd);
        }
        else if (oInput.createTextRange)
        {
                range = oInput.createTextRange();
                range.collapse(true);
                range.moveEnd('character', oEnd);
                range.moveStart('character',oStart);
                range.select();
        }
    }

function focusSearch()
{
var elem = getElementsByClass('textformFields',null,'input');
if (elem.length > 0)
{
elem[0].focus();
setCursorPosition(elem[0], elem[0].value.length, elem[0].value.length);
    }
return true ;
}

function focusFirstField()
{
  var elem = document.getElementsByName("focusField");
  if (elem.length > 0)
  {
  var el = elem[0];
el.focus();
}
      return false;
}

function bannerPublicView()
        {
var publicBanner = document.getElementById('publicBanner');
                      if(publicBanner)
{publicBanner.style.display = "none";}
          }

        function onloadDefault()
{
focusSearch();
    bannerPublicView();
    addSpyLog();
}

    function supportEMailView()
{
var oFrame = $('mailframe');
    if (oFrame)
    {
    var frmHeight = window.innerHeight;
    var frTop = (frmHeight/2-260);
oFrame.style.display = 'block';
oFrame.style.height = '520px';
oFrame.style.width = '520px';
oFrame.style.top = frTop +'px';
oFrame.src="/support/supportframe.visp";
}
return false;
}

//--><!]]>
</script>
</head>
<body id="popup">

<h1>Монитор работоспособности ресурса IQLib</h1>

<h2>Получение файлов из хранилища фондов</h2>
<div class='green'><b>Успешно</b></div>

<h2>Получение файлов из хранилища баннеров</h2>
<div class='green'><b>Успешно</b></div>

<h2>Соединение с SQL-сервером</h2>
<div><b><span class='red'>IQLib.Site: OK</span><br/><span class='green'>IQLib.Site.Sys: OK</span><br/><span class='green'>IQLib.Users: OK</span><br/><span class='green'>IQLib.Statistic.Raw: OK</span><br/></b></div>

<h2>Выполнение запросов к поисковой системе и получение документов</h2>
<div><b><span class='green'>IQLib.XBook: OK</span><br/><span class='green'>IQLib.XRef: OK</span><br/></b></div>

<h2>Выполнение распределенной транзакции SQL-сервером</h2>
<div class='green'><b>Успешно</b></div>

<h2>Тестирование сервисов на сервере приложений</h2>
<div><b><span class='green'>Job: [Days] Garbage Collector: OK</span><br/><span class='green'>Job: [Days] Publishing Remove: OK</span><br/><span class='green'>Job: [Hours] Publishing Add: OK</span><br/><span class='green'>Job: [Hours] Statistic Collector: OK</span><br/><span class='green'>Job: [Minutes] Statistic Collector: OK</span><br/><span class='green'>Job: [Weeks] Statistic Collector: OK</span><br/><span class='green'>Send Message Service: OK</span><br/><span class='green'>User Query Execute Service: OK</span><br/><span class='green'>User Query Notify Service: OK</span><br/></b></div>
<br/>
<p>
<strong>Дата выполнения теста:</strong> 07.07.2008 10:33:01
</p>

<div class="more green" title="Повторить тест"><a href="/monitor/view.visp">Повторить тест</a></div>

</body>
</html>


Как только убираю всё, что завёрнуто в <HEAD>, так запрос начинает работать нормально и обнаруживает слово red на этой странице. В чём может быть проблема, не подскажете?

Я собственно потому и спросил выше, можно ли начать просмотр с тега <body> а не с <html>. Чтобы не парсить заголовок.
#243
2 Виктор: удачи! очень надеемся что время всё же будет. и Вы реализуете всё что запланировали. и даже больше.  ;)

2 Isherim: нуу.. в общем да, ты прав.
было бы здОрово иметь эти возможности.

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

и поэтому реакция на SysLog очень даже интересна.
тут полностью согласен.
#244
дык я про то, что там можно и ip и hostname использовать.

я так понял основное условие - должны быть заполнены оба поля (чтобы искалось по ip).
а вот чем они заполнены, ip или hostname'ами... это я так понял дело десятое.
#245
Вот ещё реализуете работу с логами windows и тогда вообще уже практически нечего будет желать =).

offtop: что там насчёт 0.2.22? =)
когда нам ожидать (примерно) и что нового будет в релизе?
#246
thanks! =)
i understand now.

great support!
#247
ещё раз ОГРОМНОЕ спасибо за помощь и проявленное при этом нечеловеческое терпение.
#248
просто получается, что найдя искомое, Threshold пометит хост в соответствии со значением, заданным ему при помощи Event'а. А как же перевести его в обратное состояние, в то, которое предшествовало новому?

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

я даже проверил поиск абстрактным словом "^HTTP/1\.[01] 200.*blablablabla.*"
не получается. если условия настроены так как сказано выше (при ответе = 0 -> проблема), то при каждом запросе получаю именно состояние "Проблема".


а всё-таки Вы оказались правы!

если я ищу слово blablablabla а его нет на странице, я получаю ответ "3"!
если добавляю- получаю 0 - и хост помечается проблемным.
если снова убираю- хост помечается как нормальный.

соответственно прошу меня извинить, был не прав.  :-\
усиленно бью челом.
всё работает так как заявлено.


#249
вот ответ моего тестового сайта:

Quote
http://www.intwww.local/worktest.html

GET /worktest.html HTTP/1.1
Host: www.intwww.local
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,ru;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
If-Modified-Since: Wed, 02 Jul 2008 10:12:27 GMT
If-None-Match: "b17d7e212cdcc81:c90"

HTTP/1.x 304 Not Modified
Server: Microsoft-IIS/5.1
Date: Wed, 02 Jul 2008 11:41:16 GMT
X-Powered-By: ASP.NET
Etag: "b17d7e212cdcc81:c90"
Content-Length: 0

хмм.. тоже присутствует X-Powered-By
а как же тогда быть?
как заставить искать только конкретное слово, БЕЗ совпадений?
#250
Виктор, спасибо за быстрый ответ!

О проблеме: моя тестовая страница совершенно пуста. там вообще нет тегов. это просто текстовый файл с расширением html и одним-единственным тестовым словом. вообще, как мне кажется, дело тут не в том, что находит-ли искомое regexp или не находит, а в том, что в ответ на запрос с regexp'ом всегда возвращается "0".

Нашёл? = 0
Не нашёл? = 0

Моё условие Вы уже видели: если на странице встречается слово "red" - должно быть зафиксировано событие (Event), что слово "red" найдено. Затем запускается процессинг, который отсылает мне извещение, что слово на странице найдено.

И всё бы хорошо, да только у Threshold'а, который использует этот regexp, нет другого возвращаемого состояния, кроме как "0". А это значит, что DCI не в состоянии отличить состояние "найдено" last()=0 от "не найдено" last()l=0.

И соответственно я не могу создать условие-терминатор, которое бы тоже опиралось на возвращаемое состояние и заканчивало бы обработку данного эвента (помечало DCI как нормально рабюотающий). Не на что опираться, потому что всегда получаем 0.

применительно к моему тестированию: ищем слово red, если находим- проблема, если нет- всё ок.

Threshold Configuration
----------------------
Condition

Will be "Equal"
Than "0"
----------------------
Event

Condition TRUE
Site test Filed!

Condition FALSE
Site test OK!
----------------------

Я собственно вот о чём...
=)

Нужно ввести возвратные коды для такого рода Threshold'ов.
0 - условие regexp'а полностью выполнено (искомое найдено).
1 - условие regexp'а не выполнено (искомое не найдено)

Это возможно? А то невозможно понять что вообще происходит...
=)
#251
дополнительный комментарий:

даю скрины, чтобы было понятно о чём спич.

1. строка проверки на наличие слова RED на странице:
ServiceCheck.HTTP(10.200.1.100,80,/worktest.html,www.intwww.local,"^HTTP/1\.[01] 200.*red.*")

При выполнении DCI всегда возвращается 0, а значит НЕЛЬЗЯ настроить прерывание для Event'а.

2. скрин Theshold'а, как это сейчас настроено

3. скрин Event Processing'а - Alarm
4. скрин Event Processing'а - терминатор для Alarm'а


#252
Виктор, Вы гений =)

Действительно, для тестов использовалась пустая страница, где было только одно слово: red или green
Сейчас попробую сделать так, как Вы сказали.

Спасибо!

А всё-таки что по кодам возврата?
Что должно вернуться если условие regexp'а не выполнено но сайт работает корректно?

Т.е. что вернёт DCI если в моём случае нет слова "red" на странице?

Если 0 (мол, запрос отработал удачно), то можно ли как-то изменить это положение вещей, чтобы я однозначно видел, какой именно ответ вернуло выполнение regexp'а (что заданное в regexp условие было отправлено и полученный результат или TRUE или FALSE ?)

А то всё время 0 да 0 ... Не удобно, право слово...

ТЕСТ НЕ ПРОЙДЕН: после модификации запроса на .*red.* всё вроде бы отработало успешно. Однако возвращаемый результат по прежнему - 0. True regexp  или false - всё равно возвращается 0. если условие Threshold'а говорит, что если ответ = 0 -> ошибка, то при любых словах на странице DCI помечается как обнаруживший искомое.

нет эффекта. изменение слова на текстовой странице не влияет на получаемый результат: всегда получаю 0 и соответственно отрабатывает только правило, обнаруживающее что получено значение 0.

складывает впечатление что в моём конкретном случае это не работает.

что red что green на странице- всегда возвращается 0.

и почему-то не могу завершить процессинг эвента...
не работает правило, прерывающее обработку. может дело в том что всегда возвращается 0 (чтобы не получил regexp) и дальше тупо нечего процессить? Потому что 0 - это TRUE, при котором считается что RED найдено. А если не найдено, то всё равно получаю 0.
#253
ээ.. так оно и щаз работает.
я таким образом цепляю киски.

просто забиваю ip два раза, в оба поля.
#254
уточнение к первому пункту:

PollCountForStatusChange с ним ни коим образом не перекликается?

нашёл это: https://www.netxms.org/forum/index.php/topic,367.0.html
нельзя ли сделать этот параметр более общим, чтобы его можно было использовать не только для опроса интерфейса, но и как раз для того, о чём я прошу?
#255
Общие вопросы / Re: NetXMS FAQ/ЧаВо
July 01, 2008, 02:09:51 PM
обновление для пункта "Q: Под какими операционными системами работает NetXMS?"
проверено: работает на Windows 2008 Server Enterprise 64 Bit.