Использование SQL Server для ведения журнала приложений. За и против?

У меня многопользовательское приложение, которое хранит централизованный файл журнала для активности. Прямо сейчас, этот журнал идет в текстовые файлы на мелодию около 10 МБ-50 МБ/день. Текстовые файлы ежедневно меняются регистратором, и мы сохраняем последние 4 или 5 дней. Старее, чем это нас не интересует.

Они читаются редко: либо при разработке приложения для сообщений об ошибках, диагностических сообщений, либо когда приложение находится в процессе производства для сортировки по проблеме с сообщением пользователя или ошибке.

(Это строго журнал приложений. Ведение журнала безопасности хранится в другом месте.)

Но когда они читаются, это боль в заднице. Текстовые файлы Grepping 10MB не интересны даже с Perl: поля (идентификатор транзакции, идентификатор пользователя и т.д.) В файле полезны, но просто текст. Сообщения записываются последовательно, например, по одному, поэтому перемежаемая активность перемещается при попытке выполнить определенную транзакцию или пользователя.

Я ищу мысли по этой теме. Кто-нибудь выполнил ведение журнала на уровне приложений с помощью базы данных SQL и понравилось? Ненавидели его?

Ответ 1

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

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

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

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

Если вам нужно много анализировать журналы, и вам не удобно использовать текстовые инструменты, такие как grep, а затем хранить журналы в текстовых файлах и периодически импортировать их в базу данных SQL. Если SQL терпит неудачу, вы не потеряете информацию о журнале, и это даже не повлияет на способность приложения работать. Затем вы можете выполнить весь анализ данных в БД.

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

Ответ 2

Мы использовали базу данных журнала на моей последней работе, и это было здорово.

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

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

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

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

Это приводит к третьему улучшению. Мы создали единый ежедневный электронный адрес электронной почты, и это было единственное, что нам нужно было рассмотреть в те дни, когда все происходило нормально. Включенное электронное письмо показало ошибки и предупреждения. Пропущенные журналы были перезаписаны как предупреждение тем же заданием db, которое отправляет электронное письмо, а отсутствие электронной почты было большим делом. Мы могли бы отправить конкретное сообщение в журнал на наш трекер ошибок одним щелчком мыши прямо из ежедневного сообщения электронной почты (оно было html-форматировано, вытащили данные из веб-приложения).

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

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

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

Ответ 3

Да, мы делаем это здесь, и я не могу этого вынести. Одна из проблем, которую мы имеем здесь, - это проблема с db (соединение, повреждение и т.д.), Все остановки протоколирования. Моя другая большая проблема заключается в том, что сложно просмотреть проблемы. У нас также есть проблемы с журналами таблицы, занимающими слишком много места и необходимость беспокоиться об их усечении при перемещении баз данных, потому что наши журналы настолько велики.

Я думаю, что он неуклюж по сравнению с файлами журнала. Мне трудно увидеть "большую картину", когда она хранится в базе данных. Я признаю, что я человек журнала, мне нравится открывать текстовый файл и просматривать (regex) его вместо того, чтобы использовать sql, чтобы попытаться найти что-то.

В последнем месте, где я работал, у нас были файлы журналов размером 100 мегабайт. Их немного сложно открыть, но если у вас есть правильный инструмент, это не так уж плохо. У нас также была система для регистрации сообщений. Вы можете быстро просмотреть файл и определить, какой набор записей журнала принадлежит тому процессу.

Ответ 4

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

Как только вы получите все, что вам нужно, чтобы войти в нужные вам столбцы, гораздо легче отслеживать последовательные действия над чем-то, удалив его по столбцу. Например, если у вас был процесс "ввода", вы регистрируете все как обычно, когда текст "процесс ввода" помещается в столбец "logtype" или "process". Затем, когда у вас возникают проблемы с "процессом ввода", оператор WHERE в этом столбце изолирует все процессы ввода.

Ответ 5

Ранее мы использовали централизованное ведение журнала SQL Server, и, как было сказано выше, самая большая проблема заключалась в том, что прерванная связь с базой данных будет означать прерывание регистрации. Я на самом деле закончил добавление процедуры очередей к протоколу, который сначала попытался бы БД, и напишет в физический файл, если он не удался. Вам просто нужно добавить код к этой подпрограмме, который в успешном журнале для db проверит, будут ли локальные локальные записи помещены в очередь, и напишите их тоже.

Мне нравится иметь все в БД, в отличие от физических файлов журналов, но только потому, что мне нравится разбирать его с отчетами, которые я написал.

Ответ 6

мы делаем это в нашей организации в больших томах с SQL Server. В моем открытии запись в базу данных лучше из-за возможности поиска и фильтрации. Производительность данных от 10 до 50 МБ и сохранение их только в течение 5 дней не влияет на ваше приложение. Отслеживание транзакций и пользователей будет очень легко сравнить с отслеживанием его из текстового файла, так как вы можете фильтровать транзакцией или пользователем.

Вы отмечаете, что файлы читаются редко. Итак, решите, стоит ли вкладывать время в усилия по развитию для разработки структуры ведения журнала? Рассчитайте свое время, затрачиваемое на поиск журналов из файлов журналов в течение года, и времени, которое потребуется для кода и теста. Если время для поиска составляет 1 час или более в день для поиска журналов, лучше записывать журналы в базу данных. Это может значительно сократить затраты времени на решение проблем.

Если вы потратите меньше часа, вы можете использовать некоторые инструменты для поиска текста, такие как "SRSearch", который является отличным инструментом, который я использовал, выполняет поиск из нескольких файлов в папке и дает результаты в небольших snippts ( "like google search result" ), где вы нажимаете, чтобы открыть файл с заинтересованным результатом. Существуют и другие инструменты поиска текста. Если среда - это окна, то у вас есть Microsoft LogParser также хороший инструмент, доступный бесплатно, где вы можете запросить свой файл, как базу данных, если файл написан в определенном формате.

Ответ 7

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

Ответ 8

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

  • Пространство не так дешево при использовании VPS. Восстановление пространства в реальных системах баз данных часто представляет собой огромную проблему, и вам, возможно, придется отключать службы при восстановлении пространства. Если ваши журналы настолько важны, что вы должны держать их на долгие годы (как мы делаем), то это настоящая проблема. Помните, что большинство баз данных не восстанавливает пространство при удалении данных, поскольку оно просто повторно использует пространство - не очень помогает, если на самом деле у вас не хватает места.

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

  • Файлы журнала могут быть созданы, а старые журналы архивируются ежедневно. В зависимости от типа журналов массивные объемы пространства могут быть восстановлены путем архивирования журналов. Мы сохраняем около 6x пространства при сжатии наших журналов, и в большинстве случаев вы, вероятно, сэкономите гораздо больше.

  • Индивидуальные файлы меньшего размера могут быть сжаты и переданы без ущерба для сервера. Раньше у нас были журналы, содержащие данные из 100 данных GB в базе данных. Перемещение таких больших баз данных между серверами становится серьезной проблемой, особенно из-за того, что при этом вы должны закрыть сервер базы данных. Я говорю, что обслуживание становится настоящей болью в тот день, когда вы должны начать перемещать большие базы данных.

  • Запись в файлы журнала в целом намного быстрее, чем запись в БД. Не стоит недооценивать скорость файла IO операционной системы.

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

Ответ 9

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

http://logging.apache.org/log4net/

Ответ 10

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

Ответ 11

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

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

Таким образом, вы получаете преимущества обоих методов.