Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mevdschee/tqdev-metrics
Light-weight Java library to measure critical components in a production environment.
https://github.com/mevdschee/tqdev-metrics
influxdb java jmx metrics spring time-series
Last synced: 4 days ago
JSON representation
Light-weight Java library to measure critical components in a production environment.
- Host: GitHub
- URL: https://github.com/mevdschee/tqdev-metrics
- Owner: mevdschee
- License: mit
- Created: 2017-09-29T09:52:12.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2018-06-05T14:35:39.000Z (over 6 years ago)
- Last Synced: 2024-10-18T18:59:49.505Z (29 days ago)
- Topics: influxdb, java, jmx, metrics, spring, time-series
- Language: Java
- Homepage: https://tqdev.com/metrics
- Size: 364 KB
- Stars: 2
- Watchers: 4
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[![Build Status](https://travis-ci.org/mevdschee/tqdev-metrics.svg?branch=master)](https://travis-ci.org/mevdschee/tqdev-metrics?branch=master)
[![Coverage Status](https://coveralls.io/repos/github/mevdschee/tqdev-metrics/badge.svg?branch=master)](https://coveralls.io/github/mevdschee/tqdev-metrics?branch=master)# TQdev.com's Metrics
This is a light-weight Java library to measure the behavior of critical components in a production environment.
### Requirements
- Java 8
### Modules
- **metrics-core** stores your metrics (you always need this module)
- **metrics-aspectj** instruments Java methods aggregated on method name
- **metrics-jdbc** instruments SQL queries aggregated on prepared statement
- **metrics-jetty** instruments HTTP requests aggregated on HTTP verb and response status and instruments thread counts
- **metrics-spring-security** instruments Spring requests aggregated on authenticated username
- **metrics-spring-webmvc** instruments Spring requests aggregated on request path and handler name
- **metrics-jvm** instruments current JVM system properties
- **metrics-sigar** _is not implemented yet_
- **metrics-influxdb** exports metrics to disk (rotated) and HTTP endpoint using the InfluxDB line protocol
- **metrics-prometheus** exports metrics to disk (rotated or for node_exporter) in Prometheus text format
- **metrics-jmx** exports metrics over a JMX connection using the JMX RMI protocol
- **metrics-spring-loaders** can be component scanned to load all modules### Philosophy
Where possible things are measured as an increasing value (monotonically increasing counter).
So instead of measuring 10, 10, 10 for a constant value you will have 10, 20, 30.
This way you can get cheap aggregates (at any given resolution), as you don't have to visit every value.Some values (such as "current thread count") cannot be stored as a counter. These values are not
converted to monotonically increasing counters, but they are represented by long integers that are
retrieved from the underlying system when they are read (on-demand).Counters use two long integers per metric: one for duration in nanoseconds and one for invocation count.
For on-demand measured values (Gauges) it also uses a long integer to unify the storage model. It is
recommended that you send the metrics every 10 seconds to a time series database such as InfluxDB.
In InfluxDB you can then use the "`non_negative_derivative`" function to graph the measured values.### Getting started
If you are using Spring you can add a "ComponentScan" annotation to your application to add
"com.tqdev.metrics.spring.loaders" as a scanned package, as you can see here:@SpringBootApplication
@ComponentScan({ "org.springframework.samples.petclinic", "com.tqdev.metrics.spring.loaders" })
public class PetClinicApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(PetClinicApplication.class, args);
}
}This is all you have to change in your code to get started (apart from adding the dependencies to your
maven or gradle config). After application has started you may connect to it using "jconsole" and see
the collected metrics via JMX under "com.tqdev.metrics" (configurable).### Release It to Maven Central
```
$ mvn versions:set -DnewVersion=[major.minor.patch]
$ mvn clean package deploy
```