Расчет временного интервала для отключений, когда у меня есть только результаты неудачных вызовов - PullRequest
0 голосов
/ 03 августа 2010

Я пишу отчет, который показывает общее время простоя нашего сайта.Когда пользователь посещает наш сайт и что-то не работает (т.е. балансировщик нагрузки считает, что наш сайт не отвечает), он отправляет посетителей на страницу «Техническое обслуживание».Страница обслуживания регистрирует в базе данных, что она была просмотрена, и отображает дружеское сообщение для посетителя.

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

ReportedOutage
-----------------------
2010-07-30 06:23:18.093
2010-07-30 06:23:18.623
2010-07-30 06:23:18.720
2010-08-02 14:28:07.123

В идеале я хотел бы запустить отчет и увидеть что-то вроде этого:

OutageStart              OutageEnd
-----------------------  -----------------------
2010-07-30 06:23:18.093  2010-07-30 06:23:18.720
2010-08-02 14:28:07.123  2010-08-02 14:28:07.123

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

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

Ответы [ 2 ]

3 голосов
/ 03 августа 2010

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

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

То, как вы это сделаете, будет зависеть от вашей среды - я знаю, как бы я это делал в C #, но я бы не стал пытаться делать это в прямом SQL, например:)

1 голос
/ 03 августа 2010

Если у вас нет другой информации о том, как часто сервер получает попадания, вы не сможете ответить на вопрос, на который пытаетесь ответить.

И даже если у вас есть эти данные, тщательный анализ сбоев сервера не будет легким:

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

Для большинства приложений было бы намного проще и точнее реализовать процесс проверки, который вы упомянули в своем посте.

...