2013-10-08 3 views
1

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

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

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

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

Это информация, которую я думаю, что может помочь:

  1. количество сообщений и общий размер записанного в последний час (в среднем, в течение долгого времени)
  2. , сколько времени требуется, чтобы завершить «полный цикл»(в среднем, в течение долгого времени)
  3. является сбор связанной с макс байтов или макс-документы ограничивают

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

Советы по интеграции с Graphite/Carbon также будут замечательными!

ответ

1
  1. Установите стек StatD-Graphite и начните с отправки ему метрик.

  2. Информация, которую вы хотите отправить, может быть отправлена ​​на любом языке, который может отправлять сообщение через UDP.

  3. Есть языковые привязки во всех распространенных языках - PHP, Python, Ruby, C++, Java и т. Д., Так что это не должно быть проблемой.

  4. Как только вы сделаете это с технической точки зрения, вы можете сосредоточиться на других вещах, которые вы хотите измерить.

+0

Спасибо, но ваш ответ выглядит как общий «графитовый стиль», в то время как мой вопрос касался главным образом mongodb. – shx2

0

Неспособность найти решение из-из-коробки, и не получив никаких ответов здесь, вот что я в конечном итоге делает

я в конечном итоге создание процесса, который:

  1. регистрирует все коллекции, передаваемые сообщениями, в моем mongodb (с использованием запроса с хвостовым курсором), поток на коллекцию.
  2. хранит сообщения-счетчики в коллекции X time_unit (единица времени составляет каждые 10 минут, т. Е.каждые 10 минут я запускаю новый счетчик, сохраняя все старые в памяти)
  3. периодически запрашивает статистику закрытых коллекций (размер, количество документов и лимитов), а также сохраняет все эти данные в memroy.

Затем я разрешил ему работать в течение недели и проверял его состояние. Таким образом, мне удалось получить очень хорошую картину активности в течение недели.

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

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

Смежные вопросы