Releases: hawkular/hawkular-metrics
0.8.0
This short schedule release is anchored by major enhancements for metrics query aggregation, updated container support, and performance and stability enhancements.
Here is a list of major changes:
- Counters
- Counter rates computations now avoid counter value resets (HWKMETRICS-218)
- Counter rates are now aligned with the actual counter data used to calculate the rate (HWKMETRICS-284)
- Aggregate Metric Statistics
- Added support for aggregate statistics based on multiple metrics
- Gauges, counters, and counter rates are supported
- Two methods of aggregation are currently available
- uniform: data from multiple metrics is bucketed as originating from a single source and then statistics are computed on the entire set
- stacked: statistics are first computed for every matching metric and then those statistics are stacked (added)
- by default uniform statistics are enabled, stacking is enabled by
stacked=true
query parameter
- The end-points are
/gauges/data
,/counters/data
,/counters/data/rate
- There is support to query by either tags or metrics ids; but not both
- Relevant JIRAs: HWKMETRICS-292, HWKMETRICS-263, HWKMETRICS-264
- Data storage updates
- Schema changes will require rebuilding the database
- Reduced data storage footprint by limiting the size of metric type (HWKMETRICS-301)
- Container support
- Secure connections are enabled between Hawkular Metrics and the Heapster sink (HWKMETRICS-217)
- cqlsh can be access directly from within the Cassandra docker (HWKMETRICS-260)
- Various updates to the Heapster sink to support latest Hawkular Metrics features: HWKMETRICS-285, HWKMETRICS-273, HWKMETRICS-276, HWKMETRICS-292
JBoss Nexus Maven artifacts:
http://origin-repository.jboss.org/nexus/content/repositories/public/org/hawkular/metrics/
Jira release tracker:
https://issues.jboss.org/browse/HWKMETRICS/fixforversion/12328157
Hawkular Metrics Clients:
Python: https://github.com/hawkular/hawkular-client-python
Go: https://github.com/hawkular/hawkular-client-go
Ruby: https://github.com/hawkular/hawkular-client-ruby
A big "Thank you" goes to John Sanda, Thomas Segismont, Mike Thompson, Matt Wringe, Michael Burman, Libor Zoubek, Jirka Kremser, and Heiko Rupp for their project contributions.
0.7.0
This release is anchored by major enhancements to counter metrics, updated tag support, and many performance and stability enhancements.
Here is a list of major changes:
- Cassandra Upgrade
- Cassandra version 2.2.x is now required for data storage
- Updated support for counter metrics
- Counter raw data and rate data now support buckets similar to the way gauge data does (HWKMETRICS-280, HWKMETRICS-283)
- The same query parameters as gauge metrics are supported.
- Tagging functionality (add, delete, update) is now identical to availability and gauge metrics.
- Revamped tag functionality
- Tag support has been updated to have identical functionality across all metric types.
- Tagging data points is no longer supported; however, this functionality may resurface when requirements are better understood and there is a real use case around it (HWKMETRICS-247)
- Improved metric tag storage and querying; metric tags are no longer stored in the data table (HWKMETRICS-254)
- Data storage updates
- Schema changes will require rebuilding database
- Interval column has been removed from all tables (HWKMETRICS-3)
- Stop the warning message in Cassandra log about batch statement size threshold being exceeded (HWKMETRICS-252)
- System-wide data retention default setting is now configurable via system property (HWKMETRICS-251)
- Data retention can be set during tenant creation (HWKMETRICS-127)
- Influx endpoint
- time_precision parameter is now supported (Hawkular Metrics does not support microseconds precision though)
- integer "overflow" fixes; long integers are now used where needed
- time range restrictions support values without unit (i.e. 'time > 1010101010')
- PTrans
- logback replaces log4j as logging backend
- REST API documentation
- Improved documentation (no more broken links, more details on parameters and data types) http://www.hawkular.org/docs/rest/rest-metrics.html
JBoss Nexus Maven artifacts:
http://origin-repository.jboss.org/nexus/content/repositories/public/org/hawkular/metrics/
Jira release tracker:
https://issues.jboss.org/browse/HWKMETRICS/fixforversion/12327874/
Hawkular Metrics Clients:
- Ruby: https://github.com/hawkular/hawkular-client-ruby
- Python: https://github.com/hawkular/hawkular-client-python
- Go: https://github.com/hawkular/hawkular-client-go
A big "Thank you" goes to John Sanda, Thomas Segismont, Mike Thompson, Matt Wringe, Michael Burman, Libor Zoubek, Jirka Kremser, and Heiko Rupp for their project contributions.
0.6.0
This release is anchored by enhancements for counter metrics, updates to the container infrastructure, and overall performance and stability enhancements.
Here is a list of major changes in this release:
- Querying
- Metrics can now be searched with regexp filtering capabilities on tags
- Metrics queries now support logical AND for tags
- Internal
- TenantId and type were moved to the MetricId instead of Metric class
- Implicit tenants (not manaully created prior to sending first set of metric data) are now created on metrics insertion
- Container
- Updated to the latest Heapster version (0.17)
- The communication between the Hawkular Metrics and Cassandra containers have now been secured. This means that only Hawkular Metrics can communicate with its Cassandra containers.
- Counters
- Per-minute rates can be retrieved via the /hawkular/metrics/counters/{id}/rate endpoint.
- Task scheduling
- The scheduler API and schema has undergone several changes. It is now possible to group related tasks so that order of execution can be controlled when there are interdependencies. There is still ongoing work to support asynchronous job execution and to provide fault tolerance.
- Ruby Client
- The project has now an official Ruby client, this joins the existing Go and Python clients. One of Hawkular Metrics' objectives is to be easy to integrate with; providing language specific clients is an important component for fulfilling this objective.
Hawkular Metrics Clients:
- Ruby: https://github.com/hawkular/hawkular-client-ruby
- Python: https://github.com/hawkular/hawkular-client-python
- Go: https://github.com/hawkular/hawkular-client-go
Github Release:
https://github.com/hawkular/hawkular-metrics/releases/tag/0.6.0
JBoss Nexus Maven artifacts:
http://origin-repository.jboss.org/nexus/content/repositories/public/org/hawkular/metrics/
Jira release tracker:
https://issues.jboss.org/browse/HWKMETRICS/fixforversion/12327689/
A big "Thank you" goes to John Sanda, Thomas Segismont, Mike Thompson, Matt Wringe, Michael Burman, Libor Zoubek, Jirka Kremser, and Heiko Rupp for their project contributions.
0.5.0
This is a bridge release that is delivered ahead of the proposed schedule to accommodate the upcoming release of Hawkular - Alpha 3. The release contains mainly bug fixes and small REST API enhancements. Major changes planned (such as Hawkular Bus integration and gauge metrics aggregation) for this release have been postponed for future releases.
For a complete list of changes please follow the JIRA release link below; artifacts are available in both Github and JBoss Nexus maven repository.
Jira release tracker:
https://issues.jboss.org/browse/HWKMETRICS/fixforversion/12327548
JBoss Nexus Maven artifacts:
http://origin-repository.jboss.org/nexus/content/repositories/public/org/hawkular/metrics/
A big "Thank you" goes to John Sanda, Thomas Segismont, Matt Wringe, Michael Burman, and Mike Thompson for their project contributions.
0.4.0.Final
The release is anchored by a new counter metric implementation, various stability enhancements, and Grafana integration updates.
Release Updates
There was an email thread on Hawkular Devel List about 1 week ago that announced some minor changes to the release process for Hawkular Metrics. This release is the first release to apply the plan. Going forward, the project will follow JBoss Project Versioning guidelines.
To avoid confusion here is an explanation of the release version number. The current release 0.4.0.Final contains the code that was initially planned under 0.3.5. The version bump was required to align the release version with the release mechanics. But there are no surprising commits or changes in functionality that were not expected to be released.
Here is a list of major changes in this release:
- Documentation
- Added a new, Metrics specific, documentation section on the Hawkular website
- Installation, configuration and Grafana integration are covered
- Link: http://www.hawkular.org/docs/components/metrics/index.html
- External Integration
- The Grafana graph panel editor is now able to autocomplete the metric name
- Documentation regrading the Grafana integration is now covered by the official Hawkular Metrics documentation (see above)
- Heapster versions 0.14.0 and up can use Hawkular-Metrics as their time series data storage.
- Updates to core API (HWMETRICS-113)
- Metric is now a concrete type. GaugeMetric and AvailabilityMetric classes have been removed.
- The new DataPoint class replaces the former GaugeDataPoint and AvailabilityDataPoint classes.
- All of the new model classes are immutable. We will continue refactoring to make model classes immutable.
- Swagger and Jackson dependencies have been removed from core
- Cassandra
- Cassandra java driver upgraded to version 2.1.6 (HWKMETRICS-109)
- Embedded Cassandra is no longer part of the Hawkular Metrics
- Cassandra is now an integral part of Hawkular Project
- Embedded Cassandra has been moved to Hawkular Commons repository
- For now, will keep including the compatible embedded jar distribution as part of the release downloads
- Note: the embedded Cassandra should only be used for testing, debugging, or developing Hawkular Metrics. In production environments please use a full Cassandra deployment.
- Updated Counter Metric (HWKMETRICS-53, HWKMETRICS-59)
- Core and REST APIs support reading/writing counters
- Core API supports generating and reading rates
- REST API for rates will come in next release
- Developer tools
- Gatling load testing scenario added
- Source code: https://github.com/hawkular/hawkular-metrics/tree/master/load-tests
- This is part of the on-going effort for testing and performance profiling
JBoss Nexus Maven artifacts:
http://origin-repository.jboss.org/nexus/content/repositories/public/org/hawkular/metrics/
Jira release tracker:
https://issues.jboss.org/browse/HWKMETRICS/fixforversion/12327451/
A big "Thank you" goes to John Sanda, Thomas Segismont, Mike Thompson, Matt Wringe, Michael Burman, Jirka Kremser, and Heiko Rupp for their project contributions.
0.3.4
The release is anchored by stability improvements and Docker + Kubernetes work. Here are the release highlights:
1) InfluxDB Compatibility Layer
- pretty printing of query results with the 'pretty' query parameter
- absolute moment operands in queries (ex: select * from test where time > 1501560s and time < 4560546h)
- various fixes which allow to integrate nicely with Grafana (declaring Hawkular Metrics as an InfluxDB 0.8 datasource)
2) RxJavaMigration
- big refactoring to use RxJava instead of Guava's ListenableFuture
- RxJava provides a much richer API for building asynchronous programs
3) Server Start-up
- the server no longer requires Cassandra to be started first
- any client requests will get back a 503 response code if the server has not fully initialized due to Cassandra being down at start up time
4) Docker and Kubernetes
- all project docker images are now available in Docker Hub! Get them here:
- improved replication controller support now means that both the Hawkular-Metrics and Cassandra images can be scaled up or down
- various other smaller improvements, including better support for when containers startup
5) REST API
- tenantId header was renamed to Hawkular-Tenant
- tenantId header fallback was removed
- GET {id}/tags only returns the tags, not the whole definition anymore
- GET {id} returns the metric definition (see HWKMETRICS-110 for known issue)
6) UI Explorer
- was removed from the project
- discussions are underway to find a new home for the functionality and code (probably hawkular-ui-components)
- npm is no longer required to compile the project
7) Task Queue
- a generic task queue was designed and developed as part of this release
- provides functionality for scheduling and executing background tasks or jobs
- task execution is
- scalable - automatically distributed among Hawkular Metrics servers
- durable - Tasks are persisted
- fault tolerant - Tasks are rescheduled for future execution when there is a failure
- it will serve as the foundation for
- computing/storing aggregated metrics (i.e., rollups)
- deleting metrics
- changing data retention
- this functionality will be basis for any background task based design for the project
JBoss Nexus Maven artifacts:
http://origin-repository.jboss.org/nexus/content/repositories/public/org/hawkular/metrics/
Jira release tracker:
https://issues.jboss.org/browse/HWKMETRICS/fixforversion/12327259/
A big "Thank you" goes to John Sanda, Thomas Segismont, Mike Thompson, Matt Wringe, Michael Burman, and Heiko Rupp for their project contributions. Special mentions go to Jeeva Kandasamy and Jirka Kremser for their project help.
0.3.3
Three major and notable changes are part of this release: REST API reorganization, tenant id changes, and Docker + Kubernetes work.
1) REST API reoganization
- The API has been reorganized to follow a more traditional REST structure.
- The numeric metrics have been renamed to Gauage. Going forward the term number will be used for an overarching category of metrics (gauge, counter, histograms, etc.).
- The root of the project has been updated to be consistent with the rest of the Hawkular projects. The new root is http://host:port/hawkular/metrics
The attached pdf document has the comparison for the API changes between 0.3.1 and 0.3.3.
2) Tenant Id
The tenant id has been removed from the path to either a header parameter or a query parameter. The query parameter is to be used in cases (such as curl) where setting a header is not possible, difficult, or inconvenient.
The concept of tenant will be an integral part of the project going forward. But we wanted more flexibility in the way the tenant id for a request is derived. So removing the tenant id from the URL will give us permanent & consistent addresses for resources (metrics and metric data points); and will gain a lot of flexibility on the security side. In the future, users could authenticate with a user/pass combo and the backend would transform that into a tenant id. If the same user later decides to use a tenant id header, the URL of the resources he just accessed with the user/pass combo would not change. Another expectation is that tenant id is not sufficient, it is typically a combo of id + secret; so we would have resorted to a header or query param for the second piece of information (the secret).
Here is an example of the change:
Existing URL:
/{tenantId}/gauge/{metricId}/data
New URL:
/gauge/{metricId}/data
Tenant id set via:
- header - tenantId
- query parameter - tenantId
There are two exceptions to this rule, /tenants and /db/{tenantid}/series. The /tenants end-point will be changed into something different in the upcoming releases since it is mostly a management type API that does not belong in the same place with the regular metrics endpoint. And /db/{tenantid}/series end-point is needed in this exact format for compatibility with Influxdb compatible services.
The attached pdf document includes the removal of the tenant id from the URL.
3) Docker and Kubernetes
Thanks to the amazing work done by Matt Wringe, we now have a subproject in Hawkular Metrics which can be used to create components to be run on Openshift/Fabric8 (https://github.com/hawkular/hawkular-metrics/tree/master/containers).
This includes:
a) A customized Cassandra docker image which uses a seed provider to automatically detect other nodes running behind the same service.
b) A standalone dockerized Hawkular Metrics image. This will startup a hawkular metrics instance which will automatically detect and connect to the Cassandra service.
c) A kubernetes application for a single step install into OpenShift or Fabric8. The zip can even be deployed via the drag-n-drop mechanism in the Fabric8 console!
This is the foundation for later integrations that would require the project package in the form of containers.
A big "Thank you" goes to @jsanda, @tsegismont, @mtho11, @mwringe, and @pilhuhn for their project contributions. Special mentions go to @jkandasa, @Jiri-Kremser , and @burmanm for their project help.
0.3.1
Changes:
- UI
- The core UI has been migrated to Hawkular UI related projects (hawkular-ui-components, hawkular, and hawkular-ui-services). The explorer project is still available for testing purposes.
- REST
- Consistent error reporting and status codes usage across endpoints
- Added Availability statistics (https://issues.jboss.org/browse/HWKMETRICS-35):
- Total downtime duration
- Last downtime
- Percentage of uptime
- Number of downtimes
- New Numeric Metric statistics (https://issues.jboss.org/browse/HWKMETRICS-34):
- Average
- Median
- 95th Percentile
- The implementation has been decoupled from the actual core logic, which paves the way for alternate REST implementations
- Core
- Large refactoring of the core classes and packages, the domain related logic has been pushed to the core layer
- The Memory storage engine has been dropped from the project. Cassandra (embedded or standalone) is the exclusive storage engine.
- InfluxDB Integration
- Influx Java client supports sending and reading data (it was not possible before because of the endoint URI differences) to/from Hawkular Metrics. Other clients are not tested but should work as well.
- PTrans
- Configurable list of listeners (previously all collectd, ganglia, ... etc listeners were started)
- Bug fix: send data to Metrics server if the buffer is full or no data was received recently (previously data could sit in the buffer and wait for the buffer to be full before being sent)
A big "Thank you" goes to John Sanda, Thomas Segismont, Mike Thompson, Matt Wringe, Jeeva Kandasamy, Jirka Kremser, Michael Burman, and Heiko Rupp for their project contributions.
0.2.7
Release Notes
Changes:
- Cassandra
- Schema changes (see note [1])
- REST web application
- now supports external configuration, from a configuration file or system properties. See #119 (comment) for more details
- JSONP: now disabled by default on all endpoints
- peformance enhancements: when composing asynchronous tasks, execute them in the same thread when possible (see commit 25b7c6c)
- ptrans
- added PID file support with the "-p" command line argument
- new distribution archive, zip format, wrapping the ptrans fat JAR and a README file to help users getting started
- start.sh
- stability fixes and enhancements
- Tagging
- Metric data tags are now key/value pairs
- Metric meta data is now metric tags
- Examples at https://github.com/rhq-project/rhq-metrics/tree/master/rest-servlet (will be) updated
Note [1] - Dev instructions for rebuilding schema
You will need to drop your existing keyspaces in order to pick up the changes. You can do this in cqlsh,
DROP KEYSPACE rhqtest;
and if you are using ccm, you can start a cqlsh session with,
ccm node1 cqlsh
I have also added a property to the build that will do this for you during metrics-core integration tests.
mvn test -Dresetdb
A big "Thank you!" goes to John Sanda, Mike Thompson, Heiko Rupp, and Thomas Segismont for their project contributions.
0.2.6
Release Notes
Changes:
- UI
- Console uses new REST Api for new C* schema (and new capabilities)
- Cassandra
- Initial support for configuring data retention
- per tenant
- per metric
- Initial support for configuring data retention
- Embedded Cassandra
- Packaged as EAR is now part of the distribution
- "embedded_cass" argument starts the embedded storage server and allows the rest interface to use it
- Default storage engine
- Optimized for fast startup and low memory usage
- Limited to single node deployment, cannot be clustered
- NOTE: the memory engine is still part of the distribution, please see note below about that.
- InfluxDB
- Influx query parser based on ANTLR grammar replaces regular expression based parser (stronger base for full compatibility)
- "limit" clause support
- Post data on the Influx series endpoint
- REST
- More test coverage
- Tests in the rest-tests module are now written in Groovy and the groovy-rest-tests module has been removed
- Updated example docs
- Removed deprecated 0.2.4 endpoints
- start.sh
- Script improved to allow just download of pre-build binaries
- Added embedded Cassandra option
NOTE: Memory Datastore
0.2.6 release planning announced that the memory datastore will be dropped. After getting feedback on the proposal and testing with the embedded Cassandra we decided to reverse the decision. The primary reason is the unbeatable almost instant startup of the Memory Datastore. Although an embedded Cassandra takes just under 2 seconds to boot after the initial configuration, that does not beat the mere milliseconds required for the memory datastore. So we will support standalone Cassandra deployments (recommended), along with the volatile memory datastore and the new embedded single-node Cassandra deployment.
A big "Thank you!" goes to John Sanda, Mike Thompson, Heiko Rupp, and Thomas Segismont for their project contributions.