Подтвердить что ты не робот

Что такое java-библиотеки для сбора/хранения/представления показателей/статистики приложений?

У меня есть приложение Java, которое должно собирать и сообщать большое количество показателей/операционных измерений/статистики (разные слова для разных людей - я просто использую метрики) о различных объектах. Метрики могут быть следующими:

  • Некоторое измеренное числовое значение в определенный момент времени (количество пользователей, которые в настоящее время вошли в систему,% использования некоторого ресурса)
  • Некоторое измеренное числовое значение в течение заданного интервала времени (количество сообщений, переданных за последние 5 минут)
  • Некоторое значение перечисления в определенный момент времени (состояние работоспособности какого-либо объекта: ONLINE/WARNING/FAILED/OFFLINE)

"Объекты" могут быть физическими устройствами (компьютер, коммутатор, модем), но чаще всего являются логическими объектами (канал связи 4567, пользователь 123456, интерфейс для обслуживания A). Кроме того, некоторые из этих логических объектов являются статическими, поскольку они известны заранее и не изменяются в течение срока действия приложения, а другие могут быть временными (канал связи 4567 может существовать только в течение некоторого времени, а затем удаляется).

Я ищу библиотеки, которые помогут решить две проблемы:

  • Упростите сбор и сохранение этих бит информации на сервере.
  • Представьте данные пользователю полезным способом.

Примечание/Требования:

  • Серверное приложение, создающее данные, представляет собой в основном процесс Java, выполняющийся как демон (т.е. не webapp)
  • Будет два разных типа клиентов.
    • One - это настольное приложение Java Swing, в котором будет использоваться большинство "тяжелых". Здесь важны богатые живые графические и исторические запросы.
    • Другой веб-интерфейс. На данный момент мои требования не на 100% понятны, но потребности этого клиента будут значительно легче, чем у swing-клиента. Здесь нужны открытые стандарты (AJAX/HTML не Flash).
  • Может быть внедрен в проприетарное программное обеспечение (то есть без лицензии GPL). Коммерческий или бесплатный.

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

  • Инкапсулировать код, используемый для обновления/записи метрики, чтобы он не перекрывал класс, который фактически измеряет значение.
  • Помогите управлять наименованием/идентификацией показателей. Их может легко быть 1000; придумывая какую-то схему именования, чтобы обеспечить уникальность PITA.
  • Хорошо справляйтесь с историческими данными. Возможность настройки времени хранения данных и архивирования или очистки старых записей.
  • На стороне клиента встроенная функция построения диаграмм и запросов с возможностью преобразования некоторых необработанных данных из базы данных перед представлением пользователю.

Извините за длинное описание. Благодарим за помощь.

4b9b3361

Ответ 1

Я могу порекомендовать эту библиотеку Java Yammer: https://github.com/dropwizard/metrics Он предлагает хороший API, чтобы иметь счетчики, тайминги, гистограммы и т.д. И он может автоматически собирать интересные данные из сервлетов, используя их и из JVM (память и т.д.).

Мы сохраняем данные в Graphite: http://graphite.wikidot.com/

Графит хранит данные в базе данных фиксированного размера, подобной RRD, и может генерировать диаграммы и информационные панели.

Ответ 2

RRD4J

Звучит как RRD4J (лицензия Apache) именно то, что вы ищете.
Это реализация Java хорошо установленного RRDtool. Он построен для сбора данных с течением времени в базе данных Round Robin (RRD). Старые данные обычно архивируются в архивах RRA, где временная шкала менее мелкозернистая, что приводит к большему пространственному хранению.

Хотя у меня нет прямого опыта работы с RRD4J, мы успешно используем RRDTool и Cacti в течение многих лет для мониторинга состояния здоровья в нашем центре обработки данных. Поскольку RRD является отраслевым стандартом, когда дело доходит до мониторинга, я определенно рекомендую вам взглянуть на RRD4J.

Ответ 4

Вы можете попробовать Stagemonitor https://github.com/stagemonitor/stagemonitor

Для хранения данных временных рядов может использоваться в паре с эластичным поиском/графитом/прибоем.

и вы можете использовать Grafana для визуализации метрик, и он может подключаться ко многим различным базам данных, таким какasticsearch, influenxdb, prometheus, mysql.

Ответ 5

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

Spring Boot 2 теперь использует https://micrometer.io - это должно стать хорошей отправной точкой для сбора метрик в приложениях Java в наши дни. Он не несет ответственности за их хранение или представление, но предлагает интеграцию для этого.